Ten samouczek zawiera kompletne kroki projektowania schematu bazy danych systemu zarządzania pracownikami w celu zarządzania użytkownikami, rolami, uprawnieniami, organizacjami i pracownikami.
Diagram relacji encji lub wizualny projekt bazy danych pokazano poniżej.
Baza danych zarządzania pracownikami
Możesz również odwiedzić popularne samouczki, w tym Jak zainstalować MySQL 8 na Ubuntu 20.04 LTS, Jak zainstalować MySQL 8 w systemie Windows, Jak zainstalować MySQL Workbench na Ubuntu, Jak zainstalować MySQL 8 z Workbench na Windows 10, Baza danych RBAC w MySql, Baza danych blogów w MySql, Baza danych quizów w MySQL, Baza ankiet i ankiet w MySQL, Baza danych koszyka zakupów online w MySQL, Baza danych zapasów w MySQL i Nauka podstawowych zapytań SQL w MySQL.
Notatki :Możesz również postępować zgodnie ze schematem niestandardowej bazy danych systemu zarządzania pracownikami, aby uzyskać niestandardowe rozwiązania w oparciu o Twoje wymagania.
Baza danych organizacji
Pierwszym krokiem jest stworzenie bazy danych organizacji. Można go utworzyć za pomocą zapytania, jak pokazano poniżej.
CREATE SCHEMA `organization` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Użyłem zestawu znaków utf8mb4 do obsługi szerokiej gamy znaków.
Tabela ról
W tej sekcji zaprojektujemy Tabelę ról do przechowywania ról systemowych i organizacyjnych. Typ kolumny może służyć do określenia, czy rola dotyczy użytkowników aplikacji, czy pracowników organizacji. Poniżej znajduje się opis wszystkich kolumn tabeli ról.
Identyfikator | Unikalny identyfikator do identyfikacji roli. |
Tytuł | Tytuł roli. |
Ślimak | Unikalny ślimak do wyszukiwania roli. |
Opis | Opis wymieniający rolę. |
Wpisz | Typ roli do rozróżnienia między rolami systemowymi i organizacyjnymi. |
Aktywny | Flaga sprawdzająca, czy rola jest aktualnie aktywna. |
Utworzono w | Przechowuje datę i godzinę utworzenia roli. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji roli. |
Treść | Pełne szczegóły dotyczące roli. |
Tabela ról z odpowiednimi ograniczeniami jest pokazana poniżej.
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) );
Tabela uprawnień
W tej sekcji zaprojektujemy Tabelę uprawnień do przechowywania uprawnień systemowych i organizacyjnych. Typ kolumny może służyć do określenia, czy uprawnienie dotyczy użytkowników aplikacji, czy pracowników organizacji. Poniżej znajduje się opis wszystkich kolumn tabeli uprawnień.
Identyfikator | Unikalny identyfikator identyfikujący uprawnienia. |
Tytuł | Tytuł pozwolenia. |
Ślimak | Unikalny ślimak do wyszukiwania uprawnień. |
Opis | Opis, w którym należy wspomnieć o pozwoleniu. |
Wpisz | Typ uprawnień do rozróżnienia uprawnień systemowych i organizacyjnych. |
Aktywny | Flaga sprawdzająca, czy uprawnienie jest aktualnie aktywne. |
Utworzono w | Przechowuje datę i godzinę utworzenia pozwolenia. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji uprawnień. |
Treść | Pełne szczegóły dotyczące pozwolenia. |
Tabela uprawnień z odpowiednimi ograniczeniami jest pokazana poniżej.
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) );
Tabela uprawnień do ról
Tabela uprawnień do ról może służyć do przechowywania mapowań uprawnień do ról. Poniżej znajduje się opis wszystkich kolumn tabeli uprawnień do ról.
Identyfikator roli | Identyfikator roli do identyfikacji roli. |
Identyfikator uprawnień | Identyfikator pozwolenia identyfikujący pozwolenie. |
Utworzono w | Przechowuje datę i godzinę utworzenia mapowania. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji mapowania. |
Tabela uprawnień do ról z odpowiednimi ograniczeniami jest pokazana poniżej.
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);
Tabela użytkowników
W tej sekcji zaprojektujemy Tabelę użytkowników do przechowywania informacji o użytkowniku. Użytkownicy mogą zarządzać własnymi profilami. Ponadto użytkownicy mogą korzystać z aplikacji zgodnie z przypisanymi im rolami systemowymi. Poniżej znajduje się opis wszystkich kolumn tabeli użytkowników.
Identyfikator | Unikalny identyfikator do identyfikacji użytkownika. |
Identyfikator roli | Rola użytkownika. Może to być Administrator lub Użytkownik. |
Imię | Imię użytkownika. |
Drugie imię | Drugie imię użytkownika. |
Nazwisko | Nazwisko użytkownika. |
Komórka | Numer telefonu komórkowego użytkownika. Może być używany do celów logowania i rejestracji. |
Poczta e-mail | E-mail użytkownika. Może być używany do celów logowania i rejestracji. |
Hash hasła | Skrót hasła wygenerowany przez odpowiedni algorytm. Musimy unikać przechowywania zwykłych lub zaszyfrowanych haseł. |
Zarejestrowano w | Ta kolumna może być użyta do obliczenia życia użytkownika z aplikacją. |
Ostatnie logowanie | Może być używany do identyfikacji ostatniego logowania użytkownika. |
Wprowadzenie | Krótkie wprowadzenie Użytkownika. |
Profil | Szczegóły użytkownika. |
Tabela użytkownika z odpowiednimi ograniczeniami jest pokazana poniżej.
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);
Tabela organizacyjna
W tej sekcji zaprojektujemy Tabelę organizacyjną do przechowywania danych organizacji. Poniżej znajduje się opis wszystkich kolumn tabeli organizacyjnej.
Identyfikator | Unikalny identyfikator do identyfikacji organizacji. |
Utworzone przez | Identyfikator użytkownika do identyfikacji użytkownika, który zarejestrował organizację. |
Zaktualizowane przez | Identyfikator użytkownika identyfikujący użytkownika, który zaktualizował organizację. |
Tytuł | Tytuł organizacji. |
Metatytuł | Metatytuł używany do tytułu przeglądarki i celów SEO. |
Ślimak | Ślad tworzący unikalny adres URL. |
Podsumowanie | Podsumowanie zawierające najważniejsze informacje. |
Stan | Status organizacji może być Nowa, Zatwierdzona, Aktywna lub Zablokowana. |
Utworzono w | Przechowuje datę i godzinę utworzenia organizacji. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji organizacji. |
Profil | Kolumna używana do przechowywania szczegółów profilu organizacji. |
Treść | Kolumna używana do przechowywania dodatkowych szczegółów organizacji. |
Wykorzystuje status kolumny do śledzenia statusu organizacji. Status może być Nowy, Zatwierdzony, Aktywny lub Zablokowany. Tabela organizacyjna z odpowiednimi ograniczeniami jest pokazana poniżej.
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 organizacji
Metatabela organizacji może być używana do przechowywania dodatkowych informacji o organizacjach, w tym adresu URL banera organizacji itp. Poniżej znajduje się opis wszystkich kolumn metatablicy organizacji.
Identyfikator | Unikalny identyfikator do identyfikacji meta organizacji. |
Identyfikator organizacji | Identyfikator organizacji do identyfikacji organizacji nadrzędnej. |
Klucz | Klucz identyfikujący meta. |
Treść | Kolumna używana do przechowywania metadanych organizacji. |
Metatabela organizacji z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Tabela pracowników
W tej sekcji zaprojektujemy Tabelę pracowników do przechowywania danych pracowników. Poniżej znajduje się opis wszystkich kolumn tabeli pracowników.
Identyfikator | Unikalny identyfikator do identyfikacji pracownika. |
Identyfikator użytkownika | Identyfikator użytkownika do identyfikacji użytkownika powiązanego z pracownikiem. |
Identyfikator roli | Identyfikator roli specyficznej dla organizacji przydzielony pracownikowi. |
Utworzone przez | Identyfikator użytkownika identyfikujący użytkownika, który dodał pracownika. |
Zaktualizowane przez | Identyfikator użytkownika do identyfikacji użytkownika, który zaktualizował pracownika. |
Kod | Kod używany przez organizację do identyfikacji pracownika. |
Stan | Status pracownika może być Nowy, Zatwierdzony, Aktywny, Zablokowany lub Zwolniony. |
Utworzono w | Przechowuje datę i godzinę utworzenia pracownika. |
Aktualizacja o | Przechowuje datę i godzinę aktualizacji pracownika. |
Zaczyna się o | Przechowuje datę i godzinę rozpoczęcia zatrudnienia. |
Kończy się o | Przechowuje datę i godzinę zakończenia zatrudnienia. |
Notatki | Kolumna używana do przechowywania notatek dotyczących zatrudnienia. |
Wykorzystuje status kolumny do śledzenia statusu pracownika. Status może być Nowy, Zatwierdzony, Aktywny, Zablokowany lub Zakończony. Tabela pracowników z odpowiednimi ograniczeniami jest pokazana poniżej.
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;
Podsumowanie
W tym samouczku omówiliśmy projekt bazy danych systemu zarządzania pracownikami do przechowywania ról, uprawnień, użytkowników, organizacji i zarządzania pracownikami organizacji.
Możesz przesłać swoje uwagi, aby dołączyć do dyskusji. Możesz być również zainteresowany zaprojektowaniem bazy danych aplikacji Blog, Koszyk oraz Ankiety i ankiety. Pełny schemat bazy danych jest również dostępny na GitHub.