sql >> Database teknologi >  >> RDS >> Mysql

Guide til design af database til medarbejderstyringssystem i MySQL

Denne vejledning indeholder de komplette trin til at designe et databaseskema for medarbejderstyringssystemet til at administrere brugere, roller, tilladelser, organisationer og medarbejdere.

Entity Relationship Diagram eller visuelle databasedesign er vist nedenfor.

Medarbejderledelsesdatabase

Du kan også besøge de populære tutorials, herunder Sådan installeres MySQL 8 på Ubuntu 20.04 LTS, Sådan installeres MySQL 8 på Windows, Sådan installeres MySQL Workbench på Ubuntu, Sådan installeres MySQL 8 med Workbench på Windows 10, RBAC-database i MySql, Blogdatabase i MySQL, Quiz-database i MySQL, afstemnings- og undersøgelsesdatabase i MySQL, Online Shopping Cart Database i MySQL, Inventory Database i MySQL og Lær grundlæggende SQL-forespørgsler i MySQL.

Noter :Du kan også følge Custom Database-skemaet i Employee Management System for at få skræddersyede løsninger baseret på dine krav.

Organisationsdatabase

Det allerførste trin er at oprette organisationsdatabasen. Den kan oprettes ved hjælp af forespørgslen som vist nedenfor.

CREATE SCHEMA `organization` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Jeg har brugt tegnsættet utf8mb4 for at understøtte en bred vifte af tegn.

Rolletabel

I dette afsnit vil vi designe Rolletabellen at gemme system- og organisationsrollerne. Kolonnetypen kan bruges til at identificere, om rollen er for applikationsbrugerne eller organisationens medarbejdere. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i rolletabellen.

Id Det unikke id til at identificere rollen.
Titel Rolletitlen.
Snegl Den unikke snegl til at søge efter rollen.
Beskrivelse Beskrivelsen for at nævne rollen.
Type Rolletypen til at skelne mellem system- og organisationsroller.
Aktiv Flaget til at kontrollere, om rollen er aktiv i øjeblikket.
Oprettet på Den gemmer datoen og tidspunktet, hvor rollen er oprettet.
Opdateret kl. Det gemmer dato og klokkeslæt, hvor rollen opdateres.
Indhold De fuldstændige detaljer om rollen.

Rolletabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `organization`.`role` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`active` TINYINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );

Tabel med tilladelser

I dette afsnit vil vi designe Tilladelsestabellen at gemme system- og organisationstilladelser. Kolonnetypen kan bruges til at identificere, om tilladelsen er for applikationsbrugerne eller organisationens medarbejdere. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Tilladelsestabellen.

Id Det unikke id til at identificere tilladelsen.
Titel Tilladelsens titel.
Snegl Den unikke slug til at søge efter tilladelsen.
Beskrivelse Beskrivelsen for at nævne tilladelsen.
Type Tilladelsestypen til at skelne mellem system- og organisationstilladelser.
Aktiv Flaget til at kontrollere, om tilladelsen er aktiv i øjeblikket.
Oprettet på Den gemmer datoen og tidspunktet, hvor tilladelsen er oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor tilladelsen opdateres.
Indhold De fuldstændige detaljer om tilladelsen.

Tilladelsestabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `organization`.`permission` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(75) NOT NULL,
`slug` VARCHAR(100) NOT NULL,
`description` TINYTEXT NULL,
`type` SMALLINT NOT NULL DEFAULT 0,
`active` TINYINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC) );

Tabel med rolletilladelser

Rolletilladelsestabellen kan bruges til at gemme tilknytningerne af tilladelserne til rollerne. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Rolletilladelsestabellen.

Rolle-id Rolle-id'et til at identificere rollen.
Tilladelses-id Tilladelses-id'et til at identificere tilladelsen.
Oprettet på Det gemmer datoen og klokkeslættet, hvor kortlægningen er oprettet.
Opdateret kl. Den gemmer datoen og klokkeslættet, hvor kortlægningen opdateres.

Rolletilladelsestabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `organization`.`role_permission` (
`roleId` BIGINT NOT NULL,
`permissionId` BIGINT NOT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL,
PRIMARY KEY (`roleId`, `permissionId`),
INDEX `idx_rp_role` (`roleId` ASC),
INDEX `idx_rp_permission` (`permissionId` ASC),
CONSTRAINT `fk_rp_role`
FOREIGN KEY (`roleId`)
REFERENCES `organization`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_rp_permission`
FOREIGN KEY (`permissionId`)
REFERENCES `organization`.`permission` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Brugertabel

I dette afsnit vil vi designe Brugertabellen at gemme brugeroplysninger. Brugere kan administrere deres egne profiler. Brugerne kan også bruge applikationen i henhold til de systemroller, der er tildelt dem. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i brugertabellen.

Id Det unikke id til at identificere brugeren.
Rolle-id Brugerens rolle. Det kan være Admin eller Bruger.
Fornavn Brugerens fornavn.
Mellemnavn Brugerens mellemnavn.
Efternavn Brugerens efternavn.
Mobil Brugerens mobilnummer. Det kan bruges til login og registreringsformål.
E-mail Brugerens e-mail. Det kan bruges til login og registreringsformål.
Password Hash Adgangskodehashen genereret af den passende algoritme. Vi skal undgå at gemme almindelige eller krypterede adgangskoder.
Registreret på Denne kolonne kan bruges til at beregne levetiden for brugeren med applikationen.
Sidste login Det kan bruges til at identificere brugerens sidste login.
Introduktion Den korte introduktion af brugeren.
Profil Brugeroplysninger.

Brugertabellen med de relevante begrænsninger er vist nedenfor.

CREATE TABLE `organization`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`roleId` BIGINT NOT NULL,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`username` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_username` (`username` ASC),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC),
INDEX `idx_user_role` (`roleId` ASC),
CONSTRAINT `fk_user_role`
FOREIGN KEY (`roleId`)
REFERENCES `organization`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

Organisationstabel

I dette afsnit vil vi designe Organisationstabellen at gemme organisationens data. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i organisationstabellen.

Id Det unikke id til at identificere organisationen.
Oprettet af Bruger-id'et til at identificere den bruger, der har registreret organisationen.
Opdateret af Bruger-id'et til at identificere den bruger, der opdaterede organisationen.
Titel Organisationens titel.
Metatitel Metatitlen, der skal bruges til browsertitel og SEO-formål.
Snegl Sneglen til at danne den unikke URL.
Oversigt Opsummeringen for at nævne de vigtigste højdepunkter.
Status Organisationens status kan være Ny, Godkendt, Aktiv eller Blokeret.
Oprettet på Den gemmer datoen og tidspunktet, hvor organisationen er oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor organisationen opdateres.
Profil Kolonnen, der bruges til at gemme organisationens profiloplysninger.
Indhold Kolonnen, der bruges til at gemme de yderligere oplysninger om organisationen.

Den bruger kolonnestatus til at spore organisationens status. Status kan enten være Ny, Godkendt, Aktiv eller Blokeret. Organisationstabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `organization`.`organization` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_organization_creator` (`createdBy` ASC),
CONSTRAINT `fk_organization_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `organization`.`organization`
ADD INDEX `idx_organization_modifier` (`updatedBy` ASC);
ALTER TABLE `organization`.`organization`
ADD CONSTRAINT `fk_organization_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Organisation Meta

Organisations-metatabellen kan bruges til at gemme yderligere information om organisationer, herunder organisationens banner-URL osv. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Organisations-metatabellen.

Id Det unikke id til at identificere organisationens meta.
Organisations-id Organisations-id'et til at identificere den overordnede organisation.
Nøgle Nøglen, der identificerer metaen.
Indhold Kolonnen, der bruges til at gemme organisationens metadata.

Organisationsmetatabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `organization`.`organization_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`organizationId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_organization` (`organizationId` ASC),
UNIQUE INDEX `uq_meta_organization` (`organizationId` ASC, `key` ASC),
CONSTRAINT `fk_meta_organization`
FOREIGN KEY (`organizationId`)
REFERENCES `organization`.`organization` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

Medarbejdertabel

I dette afsnit vil vi designe Medarbejdertabellen at gemme medarbejderdata. Nedenfor nævnt er beskrivelsen af ​​alle kolonnerne i Medarbejdertabellen.

Id Det unikke id til at identificere medarbejderen.
Bruger-id Bruger-id'et til at identificere den bruger, der er knyttet til medarbejderen.
Rolle-id Det organisationsspecifikke rolle-id, der er tildelt til medarbejderen.
Oprettet af Bruger-id'et til at identificere den bruger, der tilføjede medarbejderen.
Opdateret af Bruger-id'et til at identificere den bruger, der opdaterede medarbejderen.
Kode Koden, der bruges af organisationen til at identificere medarbejderen.
Status Medarbejderens status kan være Ny, Godkendt, Aktiv, Blokeret eller Afsluttet.
Oprettet på Den gemmer datoen og tidspunktet, hvor medarbejderen er oprettet.
Opdateret kl. Den gemmer datoen og tidspunktet, hvor medarbejderen opdateres.
Starter ved Den gemmer datoen og tidspunktet, hvor ansættelsen starter.
Ender kl. Den gemmer datoen og tidspunktet, hvor ansættelsen slutter.
Noter Kolonnen, der bruges til at gemme de bemærkninger, der er specifikke for beskæftigelse.

Den bruger kolonnestatus til at spore medarbejderens status. Status kan enten være Ny, Godkendt, Aktiv, Blokeret eller Afsluttet. Medarbejdertabellen med de relevante begrænsninger er som vist nedenfor.

CREATE TABLE `organization`.`employee` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`organizationId` BIGINT NOT NULL,
`userId` BIGINT NOT NULL,
`roleId` BIGINT NOT NULL,
`createdBy` BIGINT NOT NULL,
`updatedBy` BIGINT NOT NULL,
`code` VARCHAR(100) NOT NULL,
`status` SMALLINT NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`notes` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_employee_user` (`userId` ASC),
CONSTRAINT `fk_employee_user`
FOREIGN KEY (`userId`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_organization` (`organizationId` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_organization`
FOREIGN KEY (`organizationId`)
REFERENCES `organization`.`organization` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_role` (`roleId` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_role`
FOREIGN KEY (`roleId`)
REFERENCES `organization`.`role` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_creator` (`createdBy` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_creator`
FOREIGN KEY (`createdBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

ALTER TABLE `organization`.`employee`
ADD INDEX `idx_employee_modifier` (`updatedBy` ASC);
ALTER TABLE `organization`.`employee`
ADD CONSTRAINT `fk_employee_modifier`
FOREIGN KEY (`updatedBy`)
REFERENCES `organization`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;

Oversigt

I denne øvelse har vi diskuteret databasedesignet af et medarbejderstyringssystem til at gemme roller, tilladelser, brugere, organisationer og administrere organisationens medarbejdere.

Du kan indsende dine kommentarer for at deltage i diskussionen. Du kan også være interesseret i at designe databasen med blog-, indkøbskurv- og afstemnings- og undersøgelsesapplikationerne. Det komplette databaseskema er også tilgængeligt på GitHub.


  1. Sjovt med (columnstore) komprimering på et meget stort bord – del 3

  2. ORA-04021:timeout opstod, mens man ventede på at låse objektet

  3. Bedste måde at køre Oracle-forespørgsler med jævne mellemrum

  4. Oracle Database Developer Choice Awards