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