Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przewodnik po projektowaniu bazy danych dla systemu zarządzania pracownikami w MySQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy możemy połączyć zdalną bazę danych MySQL w systemie Android za pomocą JDBC?

  2. Błąd instalacji Ruby gem mysql2

  3. Django :Tabela nie istnieje

  4. Dynamiczne połączenie z bazą danych MySQL dla Entity Framework 6

  5. Przewodnik po projektowaniu bazy danych dla systemu zarządzania zapasami w MySQL