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. |
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.