sql >> Databáze >  >> RDS >> Mysql

Průvodce návrhem databáze pro systém řízení zaměstnanců v MySQL

Tento výukový program poskytuje úplné kroky k návrhu databázového schématu systému řízení zaměstnanců pro správu uživatelů, rolí, oprávnění, organizací a zaměstnanců.

Diagram vztahů entit nebo návrh vizuální databáze je uveden níže.

Databáze managementu zaměstnanců

Můžete také navštívit oblíbené výukové programy včetně Jak nainstalovat MySQL 8 na Ubuntu 20.04 LTS, Jak nainstalovat MySQL 8 na Windows, Jak nainstalovat MySQL Workbench na Ubuntu, Jak nainstalovat MySQL 8 s Workbenchem na Windows 10, Databáze RBAC v MySql, Databáze blogů v MySql, kvízová databáze v MySQL, databáze anket a průzkumů v MySQL, databáze nákupních košíků online v MySQL, databáze zásob v MySQL a Naučte se základní SQL dotazy v MySQL.

Poznámky :Můžete také postupovat podle schématu vlastní databáze systému řízení zaměstnanců a získat přizpůsobená řešení na základě vašich požadavků.

Databáze organizace

Úplně prvním krokem je vytvoření databáze organizací. Lze jej vytvořit pomocí dotazu, jak je uvedeno níže.

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

Použil jsem znakovou sadu utf8mb4 pro podporu široké škály znaků.

Tabulka rolí

V této části navrhneme Tabulku rolí k uložení systémových a organizačních rolí. Typ sloupce lze použít k identifikaci, zda je role určena pro uživatele aplikace nebo zaměstnance organizace. Níže je uveden popis všech sloupců tabulky rolí.

ID Jedinečné ID k identifikaci role.
Název Název role.
Slimák Jedinečný slimák pro vyhledávání role.
Popis Popis pro zmínku o roli.
Typ Typ role pro rozlišení mezi systémovými a organizačními rolemi.
Aktivní Příznak pro kontrolu, zda je role aktuálně aktivní.
Vytvořeno v Ukládá datum a čas, kdy byla role vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je role aktualizována.
Obsah Úplné podrobnosti o roli.

Tabulka rolí s příslušnými omezeními je uvedena níže.

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

Tabulka oprávnění

V této části navrhneme Tabulku oprávnění k uložení systémových a organizačních oprávnění. Typ sloupce lze použít k identifikaci, zda je oprávnění určeno uživatelům aplikace nebo zaměstnancům organizace. Níže je uveden popis všech sloupců tabulky oprávnění.

ID Jedinečné ID k identifikaci oprávnění.
Název Název oprávnění.
Slimák Jedinečný slimák pro vyhledávání oprávnění.
Popis Popis uvádějící oprávnění.
Typ Typ oprávnění k rozlišení mezi systémovými a organizačními oprávněními.
Aktivní Příznak pro kontrolu, zda je oprávnění aktuálně aktivní.
Vytvořeno v Ukládá datum a čas, kdy bylo oprávnění vytvořeno.
Aktualizováno dne Ukládá datum a čas, kdy je oprávnění aktualizováno.
Obsah Úplné podrobnosti o oprávnění.

Tabulka oprávnění s příslušnými omezeními je uvedena níže.

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

Tabulka oprávnění role

Tabulka oprávnění role lze použít k uložení mapování oprávnění k rolím. Níže je uveden popis všech sloupců tabulky oprávnění role.

ID role ID role k identifikaci role.
ID oprávnění ID oprávnění k identifikaci oprávnění.
Vytvořeno v Ukládá datum a čas, kdy je mapování vytvořeno.
Aktualizováno dne Ukládá datum a čas, kdy je mapování aktualizováno.

Tabulka oprávnění role s příslušnými omezeními je uvedena níže.

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

Tabulka uživatelů

V této části navrhneme Tabulku uživatelů k ukládání uživatelských informací. Uživatelé mohou spravovat své vlastní profily. Uživatelé také mohou používat aplikaci podle systémových rolí, které jim byly přiděleny. Níže je uveden popis všech sloupců tabulky uživatelů.

ID Jedinečné ID k identifikaci uživatele.
ID role Role uživatele. Může to být správce nebo uživatel.
Křestní jméno Křestní jméno uživatele.
Prostřední jméno Prostřední jméno uživatele.
Příjmení Příjmení uživatele.
Mobil Číslo mobilního telefonu uživatele. Lze jej použít pro účely přihlášení a registrace.
E-mail E-mailová adresa uživatele. Lze jej použít pro účely přihlášení a registrace.
Hašování hesla Hash hash hesla vygenerovaný příslušným algoritmem. Musíme se vyhnout ukládání jednoduchých nebo šifrovaných hesel.
Registrováno na Tento sloupec lze použít k výpočtu životnosti uživatele s aplikací.
Poslední přihlášení Lze jej použít k identifikaci posledního přihlášení uživatele.
Úvod Krátké představení uživatele.
Profil Podrobnosti o uživateli.

Tabulka uživatelů s příslušnými omezeními je uvedena níže.

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

Organizační tabulka

V této části navrhneme Organizační tabulku k uložení dat organizace. Níže je uveden popis všech sloupců organizační tabulky.

ID Jedinečné ID k identifikaci organizace.
Vytvořil ID uživatele k identifikaci uživatele, který zaregistroval organizaci.
Aktualizováno ID uživatele k identifikaci uživatele, který aktualizoval organizaci.
Název Název organizace.
Název metadat Název metadat, který se má použít pro název prohlížeče a účely SEO.
Slimák Slim tvořící jedinečnou adresu URL.
Shrnutí Souhrn, ve kterém jsou zmíněny hlavní body.
Stav Stav organizace může být Nová, Schválená, Aktivní nebo Blokovaná.
Vytvořeno v Ukládá datum a čas, kdy byla organizace vytvořena.
Aktualizováno dne Ukládá datum a čas, kdy je organizace aktualizována.
Profil Sloupec používaný k uložení podrobností profilu organizace.
Obsah Sloupec používaný k uložení dalších podrobností o organizaci.

Používá stav sloupce ke sledování stavu organizace. Stav může být buď Nový, Schváleno, Aktivní nebo Blokováno. Tabulka organizace s příslušnými omezeními je uvedena níže.

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;

Meta organizace

Metatabulku organizace lze použít k uložení dalších informací o organizacích včetně adresy URL banneru organizace atd. Níže je uveden popis všech sloupců metatabulky organizace.

ID Jedinečné ID k identifikaci meta organizace.
ID organizace ID organizace k identifikaci nadřazené organizace.
Klíč Klíč identifikující meta.
Obsah Sloupec používaný k uložení metadat organizace.

Metatabulka organizace s příslušnými omezeními je uvedena níže.

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;

Tabulka zaměstnanců

V této části navrhneme Tabulku zaměstnanců k uložení dat zaměstnanců. Níže je uveden popis všech sloupců tabulky zaměstnanců.

ID Jedinečné ID k identifikaci zaměstnance.
ID uživatele ID uživatele k identifikaci uživatele spojeného se zaměstnancem.
ID role ID role specifické pro organizaci přiřazené zaměstnanci.
Vytvořil ID uživatele k identifikaci uživatele, který zaměstnance přidal.
Aktualizováno ID uživatele k identifikaci uživatele, který aktualizoval zaměstnance.
Kód Kód používaný organizací k identifikaci zaměstnance.
Stav Stav zaměstnance může být Nový, Schváleno, Aktivní, Blokováno nebo Ukončeno.
Vytvořeno v Ukládá datum a čas, kdy je zaměstnanec vytvořen.
Aktualizováno dne Ukládá datum a čas, kdy je zaměstnanec aktualizován.
Začíná v Ukládá datum a čas, kdy zaměstnání začíná.
Končí v Ukládá datum a čas, kdy pracovní poměr končí.
Poznámky Sloupec používaný k uložení poznámek specifických pro zaměstnání.

Ke sledování stavu zaměstnance používá stav sloupce. Stav může být buď Nový, Schváleno, Aktivní, Blokováno nebo Ukončeno. Tabulka zaměstnanců s příslušnými omezeními je uvedena níže.

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;

Shrnutí

V tomto tutoriálu jsme diskutovali o návrhu databáze systému pro správu zaměstnanců pro ukládání rolí, oprávnění, uživatelů, organizací a správu zaměstnanců organizace.

Do diskuse můžete zasílat své komentáře. Také by vás mohl zajímat návrh databáze aplikací Blog, Nákupní košík a Anketa a průzkumy. Kompletní schéma databáze je k dispozici také na GitHubu.


  1. Jaké je použití funkce DECODE v SQL?

  2. Zkraťte (ne zaokrouhlujte) desetinná místa v SQL Server

  3. Zkontrolujte, zda v poli Postgres existuje hodnota

  4. Kontrola a optimalizace databáze MySQL automaticky pomocí Crontab/Cron