Deze tutorial biedt de volledige stappen voor het ontwerpen van een databaseschema van het Employee Management System om de gebruikers, rollen, machtigingen, organisaties en werknemers te beheren.
Het entiteitsrelatiediagram of visueel databaseontwerp wordt hieronder weergegeven.
Database voor personeelsbeheer
U kunt ook de populaire tutorials bezoeken, waaronder MySQL 8 installeren op Ubuntu 20.04 LTS, MySQL 8 installeren op Windows, MySQL Workbench installeren op Ubuntu, MySQL 8 installeren met Workbench op Windows 10, RBAC Database in MySql, Blogdatabase in MySql, quizdatabase in MySQL, enquête- en enquêtedatabase in MySQL, online winkelwagendatabase in MySQL, inventarisdatabase in MySQL en leer elementaire SQL-query's in MySQL.
Opmerkingen :U kunt ook het aangepaste databaseschema van het werknemersbeheersysteem volgen om aangepaste oplossingen te krijgen op basis van uw vereisten.
Organisatiedatabase
De allereerste stap is het maken van de Organisatiedatabase. Het kan worden gemaakt met behulp van de onderstaande query.
CREATE SCHEMA `organization` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ik heb de tekenset utf8mb4 . gebruikt om een breed scala aan karakters te ondersteunen.
Roltabel
In deze sectie zullen we de Rollentabel . ontwerpen om de systeem- en organisatierollen op te slaan. Het kolomtype kan worden gebruikt om te bepalen of de rol voor de toepassingsgebruikers of organisatiemedewerkers is. Hieronder staat de beschrijving van alle kolommen van de Rollentabel.
Id | Het unieke ID om de rol te identificeren. |
Titel | De roltitel. |
Naaktslak | De unieke slug om de rol te doorzoeken. |
Beschrijving | De beschrijving om de rol te vermelden. |
Type | Het roltype om onderscheid te maken tussen systeem- en organisatierollen. |
Actief | De vlag om te controleren of de rol momenteel actief is. |
Gemaakt op | Het slaat de datum en tijd op waarop de rol is aangemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de rol is bijgewerkt. |
Inhoud | De volledige details over de rol. |
De rollentabel met de juiste beperkingen is zoals hieronder weergegeven.
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) );
Toestemmingstabel
In deze sectie zullen we de Toestemmingstabel . ontwerpen om de systeem- en organisatierechten op te slaan. Het kolomtype kan worden gebruikt om te bepalen of de toestemming voor de applicatiegebruikers of de organisatiemedewerkers is. Hieronder staat de beschrijving van alle kolommen van de machtigingstabel.
Id | Het unieke ID om de toestemming te identificeren. |
Titel | De toestemmingstitel. |
Naaktslak | De unieke slug om de toestemming te doorzoeken. |
Beschrijving | De beschrijving om de toestemming te vermelden. |
Type | Het machtigingstype om onderscheid te maken tussen systeem- en organisatiemachtigingen. |
Actief | De vlag om te controleren of de toestemming momenteel actief is. |
Gemaakt op | Het slaat de datum en tijd op waarop de toestemming is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de toestemming is bijgewerkt. |
Inhoud | De volledige details over de toestemming. |
De machtigingentabel met de juiste beperkingen is zoals hieronder weergegeven.
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) );
Rolmachtigingstabel
De Rolmachtigingstabel kan worden gebruikt om de toewijzingen van de machtigingen voor de rollen op te slaan. Hieronder vindt u de beschrijving van alle kolommen van de Rolmachtigingstabel.
Rol-ID | De rol-ID om de rol te identificeren. |
Toestemmings-ID | De machtigings-ID om de machtiging te identificeren. |
Gemaakt op | Het slaat de datum en tijd op waarop de toewijzing is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de toewijzing is bijgewerkt. |
De roltoestemmingstabel met de juiste beperkingen is zoals hieronder weergegeven.
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);
Gebruikerstabel
In deze sectie zullen we de Gebruikerstabel . ontwerpen om gebruikersinformatie op te slaan. Gebruikers kunnen hun eigen profielen beheren. De gebruikers kunnen de applicatie ook gebruiken volgens de systeemrollen die aan hen zijn toegewezen. Hieronder staat de beschrijving van alle kolommen van de gebruikerstabel.
Id | Het unieke ID om de gebruiker te identificeren. |
Rol-ID | De rol van de gebruiker. Dit kan beheerder of gebruiker zijn. |
Voornaam | De voornaam van de gebruiker. |
Middelste naam | De middelste naam van de gebruiker. |
Achternaam | De achternaam van de gebruiker. |
Mobiel | Het mobiele nummer van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden. |
Het e-mailadres van de gebruiker. Het kan worden gebruikt voor aanmeldings- en registratiedoeleinden. | |
Wachtwoordhash | De wachtwoord-hash gegenereerd door het juiste algoritme. We moeten vermijden om gewone of versleutelde wachtwoorden op te slaan. |
Geregistreerd bij | Deze kolom kan worden gebruikt om de levensduur van de gebruiker met de applicatie te berekenen. |
Laatste aanmelding | Het kan worden gebruikt om de laatste login van de gebruiker te identificeren. |
Inleiding | De korte introductie van de gebruiker. |
Profiel | Gebruikersgegevens. |
De gebruikerstabel met de juiste beperkingen wordt hieronder weergegeven.
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);
Organisatietabel
In deze sectie zullen we de Organisatietabel . ontwerpen om de organisatiegegevens op te slaan. Hieronder staat de beschrijving van alle kolommen van de Organisatietabel.
Id | Het unieke ID om de organisatie te identificeren. |
Gemaakt door | Het gebruikers-ID om de gebruiker te identificeren die de organisatie heeft geregistreerd. |
Bijgewerkt door | Het gebruikers-ID om de gebruiker te identificeren die de organisatie heeft bijgewerkt. |
Titel | De titel van de organisatie. |
Metatitel | De metatitel die moet worden gebruikt voor browsertitel en SEO-doeleinden. |
Naaktslak | De slug om de unieke URL te vormen. |
Samenvatting | De samenvatting om de belangrijkste hoogtepunten te noemen. |
Status | De status van de organisatie kan Nieuw, Goedgekeurd, Actief of Geblokkeerd zijn. |
Gemaakt op | Het slaat de datum en tijd op waarop de organisatie is gemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de organisatie is bijgewerkt. |
Profiel | De kolom die wordt gebruikt om de profieldetails van de organisatie op te slaan. |
Inhoud | De kolom die wordt gebruikt om de aanvullende details van de organisatie op te slaan. |
Het gebruikt de kolomstatus om de status van de organisatie bij te houden. De status kan Nieuw, Goedgekeurd, Actief of Geblokkeerd zijn. De organisatietabel met de juiste beperkingen is zoals hieronder weergegeven.
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;
Organisatiemeta
De Organization Meta Table kan worden gebruikt om aanvullende informatie over organisaties op te slaan, waaronder de banner-URL van de organisatie, enz. Hieronder vindt u de beschrijving van alle kolommen van de Organization Meta Table.
Id | De unieke id om de meta van de organisatie te identificeren. |
Organisatie-ID | De organisatie-ID om de bovenliggende organisatie te identificeren. |
Sleutel | De sleutel die de meta identificeert. |
Inhoud | De kolom die wordt gebruikt om de metadata van de organisatie op te slaan. |
De metatabel van de organisatie met de juiste beperkingen is zoals hieronder weergegeven.
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;
Medewerkerstabel
In deze sectie zullen we de Employee Table . ontwerpen om de werknemersgegevens op te slaan. Hieronder staat de beschrijving van alle kolommen van de Werknemerstabel.
Id | Het unieke ID om de werknemer te identificeren. |
Gebruikers-ID | Het gebruikers-ID om de gebruiker te identificeren die aan de Werknemer is gekoppeld. |
Rol-ID | De organisatie-specifieke rol-ID die aan de werknemer is toegewezen. |
Gemaakt door | Het gebruikers-ID om de gebruiker te identificeren die de werknemer heeft toegevoegd. |
Bijgewerkt door | Het gebruikers-ID om de gebruiker te identificeren die de werknemer heeft bijgewerkt. |
Code | De code die door de organisatie wordt gebruikt om de werknemer te identificeren. |
Status | De status van de werknemer kan Nieuw, Goedgekeurd, Actief, Geblokkeerd of Beëindigd zijn. |
Gemaakt op | Het slaat de datum en tijd op waarop de werknemer is aangemaakt. |
Bijgewerkt om | Het slaat de datum en tijd op waarop de werknemer wordt bijgewerkt. |
Begint om | Het slaat de datum en tijd op waarop het dienstverband begint. |
Eindigt op | Het slaat de datum en tijd op waarop het dienstverband eindigt. |
Opmerkingen | De kolom die wordt gebruikt om de notities op te slaan die specifiek zijn voor tewerkstelling. |
Het gebruikt de kolomstatus om de status van de werknemer bij te houden. De status kan Nieuw, Goedgekeurd, Actief, Geblokkeerd of Beëindigd zijn. De werknemerstabel met de juiste beperkingen ziet er als volgt uit.
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;
Samenvatting
In deze zelfstudie hebben we het databaseontwerp van een werknemersbeheersysteem besproken om de rollen, machtigingen, gebruikers, organisaties en het beheren van organisatiemedewerkers op te slaan.
U kunt uw opmerkingen indienen om deel te nemen aan de discussie. Mogelijk bent u ook geïnteresseerd in het ontwerpen van de database van de toepassingen Blog, Shopping Cart en Poll &Survey. Het volledige databaseschema is ook beschikbaar op GitHub.