sql >> Databasteknik >  >> RDS >> Mysql

Guide för att designa databas för anställdas ledningssystem i MySQL

Denna handledning innehåller de fullständiga stegen för att utforma ett databasschema för Employee Management System för att hantera användare, roller, behörigheter, organisationer och anställda.

Entity Relationship Diagram eller visuell databasdesign visas nedan.

Databas för personalhantering

Du kan också besöka de populära handledningarna inklusive Hur man installerar MySQL 8 på Ubuntu 20.04 LTS, Hur man installerar MySQL 8 på Windows, Hur man installerar MySQL Workbench på Ubuntu, Hur man installerar MySQL 8 med Workbench på Windows 10, RBAC Database i MySql, Bloggdatabas i MySQL, Frågesportdatabas i MySQL, Enkät- och undersökningsdatabas i MySQL, Online Shopping Cart Database i MySQL, Inventory Database i MySQL och Lär dig grundläggande SQL-frågor i MySQL.

Anteckningar :Du kan också följa Custom Database-schemat för Employee Management System för att få skräddarsydda lösningar baserat på dina krav.

Organisationsdatabas

Det allra första steget är att skapa organisationsdatabasen. Den kan skapas med hjälp av frågan som visas nedan.

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

Jag har använt teckenuppsättningen utf8mb4 för att stödja ett stort antal tecken.

Rolltabell

I det här avsnittet kommer vi att utforma Rolltabellen att lagra system- och organisationsrollerna. Kolumntypen kan användas för att identifiera om rollen är för applikationsanvändare eller organisationsanställda. Nedan nämns beskrivningen av alla kolumner i rolltabellen.

Id Det unika ID:t för att identifiera rollen.
Titel Rollens titel.
Snigel Den unika snigeln för att söka efter rollen.
Beskrivning Beskrivningen för att nämna rollen.
Typ Rolltypen för att skilja mellan system- och organisationsroller.
Aktiv Flaggan för att kontrollera om rollen för närvarande är aktiv.
Skapat vid Den lagrar datum och tid då rollen skapas.
Uppdaterad kl. Den lagrar datum och tid då rollen uppdateras.
Innehåll Fullständig information om rollen.

Rolltabellen med lämpliga begränsningar är som visas nedan.

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) );

Tillståndstabell

I det här avsnittet kommer vi att utforma Tillståndstabellen för att lagra system- och organisationsbehörigheter. Kolumntypen kan användas för att identifiera om behörigheten är för applikationsanvändare eller organisationsanställda. Nedan nämns beskrivningen av alla kolumner i behörighetstabellen.

Id Det unika ID:t för att identifiera behörigheten.
Titel Tillståndstiteln.
Snigel Den unika snigeln för att söka efter behörigheten.
Beskrivning Beskrivningen för att nämna tillståndet.
Typ Behörighetstypen för att skilja mellan system- och organisationsbehörigheter.
Aktiv Flaggan för att kontrollera om behörigheten för närvarande är aktiv.
Skapat vid Den lagrar datum och tid då behörigheten skapas.
Uppdaterad kl. Den lagrar datum och tid då behörigheten uppdateras.
Innehåll Fullständig information om behörigheten.

Tillståndstabellen med lämpliga begränsningar är som visas nedan.

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) );

Tabell för rollbehörigheter

Rollbehörighetstabellen kan användas för att lagra mappningarna av behörigheterna till rollerna. Nedan nämns beskrivningen av alla kolumner i Rollbehörighetstabellen.

Roll-ID Roll-id för att identifiera rollen.
Behörighets-ID Behörighets-id för att identifiera behörigheten.
Skapat vid Den lagrar datum och tid då kartläggningen skapas.
Uppdaterad kl. Den lagrar datum och tid då kartläggningen uppdateras.

Rollbehörighetstabellen med lämpliga begränsningar visas nedan.

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);

Användartabell

I det här avsnittet kommer vi att utforma användartabellen för att lagra användarinformation. Användare kan hantera sina egna profiler. Användarna kan också använda applikationen enligt de systemroller som tilldelats dem. Nedan nämns beskrivningen av alla kolumner i användartabellen.

Id Det unika ID:t för att identifiera användaren.
Roll-ID Användarens roll. Det kan vara Admin eller User.
Förnamn Användarens förnamn.
Mellannamn Användarens mellannamn.
Efternamn Användarens efternamn.
Mobil Användarens mobilnummer. Den kan användas för inloggning och registreringsändamål.
E-post Användarens e-postadress. Den kan användas för inloggning och registreringsändamål.
Lösenordshash Lösenords-hash som genereras av lämplig algoritm. Vi måste undvika att lagra vanliga eller krypterade lösenord.
Registrerad på Denna kolumn kan användas för att beräkna användarens livslängd med programmet.
Senaste inloggning Den kan användas för att identifiera användarens senaste inloggning.
Intro Den korta introduktionen av användaren.
Profil Användarinformation.

Användartabellen med lämpliga begränsningar visas nedan.

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);

Organisationstabell

I det här avsnittet kommer vi att utforma Organisationstabellen för att lagra organisationsdata. Nedan nämns beskrivningen av alla kolumner i organisationstabellen.

Id Det unika ID:t för att identifiera organisationen.
Skapad av Användar-id för att identifiera användaren som registrerade organisationen.
Uppdaterad av Användar-id för att identifiera användaren som uppdaterade organisationen.
Titel Organisationens titel.
Metatitel Metatiteln som ska användas för webbläsartitel och SEO-ändamål.
Snigel Snigeln för att bilda den unika URL:en.
Sammanfattning Sammanfattningen för att nämna de viktigaste höjdpunkterna.
Status Organisationens status kan vara Ny, Godkänd, Aktiv eller Blockerad.
Skapat vid Den lagrar datum och tid då organisationen skapades.
Uppdaterad kl. Den lagrar datum och tid då organisationen uppdateras.
Profil Kolumnen som används för att lagra organisationens profildetaljer.
Innehåll Kolumnen som används för att lagra ytterligare information om organisationen.

Den använder kolumnstatusen för att spåra organisationens status. Statusen kan vara antingen Ny, Godkänd, Aktiv eller Blockerad. Organisationstabellen med lämpliga begränsningar är som visas nedan.

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;

Organisationsmeta

Organisationsmetatabellen kan användas för att lagra ytterligare information om organisationer inklusive webbadressen till organisationens banner etc. Nedan nämns en beskrivning av alla kolumner i organisationens metatabell.

Id Det unika ID:t för att identifiera organisationens meta.
Organisations-ID Organisations-id för att identifiera moderorganisationen.
Nyckel Nyckeln som identifierar meta.
Innehåll Kolumnen som används för att lagra organisationens metadata.

Organisationens metatabell med lämpliga begränsningar visas nedan.

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;

Medarbetartabell

I det här avsnittet kommer vi att utforma medarbetartabellen för att lagra personalens uppgifter. Nedan nämns beskrivningen av alla kolumner i Personaltabellen.

Id Det unika ID:t för att identifiera medarbetaren.
Användar-ID Användar-ID för att identifiera användaren som är kopplad till den anställde.
Roll-ID Det organisationsspecifika roll-id som tilldelats till den anställde.
Skapad av Användar-ID för att identifiera användaren som lade till medarbetaren.
Uppdaterad av Användar-ID för att identifiera användaren som uppdaterade medarbetaren.
Kod Koden som används av organisationen för att identifiera medarbetaren.
Status Medarbetarens status kan vara Ny, Godkänd, Aktiv, Blockerad eller Avslutad.
Skapat vid Den lagrar datum och tid då medarbetaren skapades.
Uppdaterad kl. Den lagrar datum och tid då medarbetaren uppdateras.
Börjar vid Den lagrar datum och tid då anställningen börjar.
Slutar vid Den lagrar datum och tid då anställningen upphör.
Anteckningar Kolumnen som används för att lagra anteckningar som är specifika för anställning.

Den använder kolumnstatus för att spåra den anställdes status. Statusen kan vara antingen Ny, Godkänd, Aktiv, Blockerad eller Avslutad. Medarbetartabellen med lämpliga begränsningar visas nedan.

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;

Sammanfattning

I den här handledningen har vi diskuterat databasdesignen för ett Employee Management System för att lagra roller, behörigheter, användare, organisationer och hantera organisationsanställda.

Du kan skicka in dina kommentarer för att delta i diskussionen. Du kanske också är intresserad av att designa databasen med applikationerna blogg, kundvagn och omröstning och undersökning. Det fullständiga databasschemat finns också tillgängligt på GitHub.


  1. Hur man visar radvärden som kolumner i MySQL

  2. Relationsdatabaser

  3. Det är dags att vi ger Microsoft Access IDE lite kärlek

  4. Hur man visar ett datum som iso 8601-format med PHP