Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Guia para projetar banco de dados para sistema de gerenciamento de funcionários no MySQL


Este tutorial fornece as etapas completas para projetar um esquema de banco de dados do Employee Management System para gerenciar os usuários, funções, permissões, organizações e funcionários.



O diagrama de relacionamento de entidade ou design de banco de dados visual é mostrado abaixo.



Banco de dados de gerenciamento de funcionários



Você também pode visitar os tutoriais populares, incluindo como instalar o MySQL 8 no Ubuntu 20.04 LTS, como instalar o MySQL 8 no Windows, como instalar o MySQL Workbench no Ubuntu, como instalar o MySQL 8 com o Workbench no Windows 10, banco de dados RBAC no MySql, Banco de dados de blog em MySQL, banco de dados de questionário em MySQL, banco de dados de pesquisa e pesquisa em MySQL, banco de dados de carrinho de compras on-line em MySQL, banco de dados de inventário em MySQL e aprender consultas básicas de SQL em MySQL.



Observações :Você também pode seguir o esquema de banco de dados personalizado do sistema de gerenciamento de funcionários para obter soluções personalizadas com base em seus requisitos.


Banco de dados da organização




O primeiro passo é criar o banco de dados da organização. Ele pode ser criado usando a consulta conforme mostrado abaixo.


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



Eu usei o conjunto de caracteres utf8mb4 para suportar uma ampla gama de caracteres.


Tabela de Funções




Nesta seção, projetaremos a Tabela de funções para armazenar as funções do sistema e da organização. O tipo de coluna pode ser usado para identificar se a função é para os usuários do aplicativo ou funcionários da organização. Abaixo mencionada é a descrição de todas as colunas da Tabela de Funções.


ID O ID exclusivo para identificar a função.
Título O título da função.
Slug O slug exclusivo para pesquisar a função.
Descrição A descrição para mencionar a função.
Tipo O tipo de função para distinguir entre funções do sistema e da organização.
Ativo O sinalizador para verificar se a função está ativa no momento.
Criado em Ele armazena a data e hora em que a função foi criada.
Atualizado em Ele armazena a data e hora em que a função é atualizada.
Conteúdo Os detalhes completos sobre a função.



A Tabela de Funções com as restrições apropriadas é mostrada abaixo.


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 de permissões




Nesta seção, projetaremos a Tabela de permissões para armazenar as permissões do sistema e da organização. O tipo de coluna pode ser usado para identificar se a permissão é para os usuários do aplicativo ou funcionários da organização. Abaixo mencionada é a descrição de todas as colunas da Tabela de Permissões.


ID O ID exclusivo para identificar a permissão.
Título O título da permissão.
Slug O slug exclusivo para pesquisar a permissão.
Descrição A descrição para mencionar a permissão.
Tipo O tipo de permissão para distinguir entre as permissões do sistema e da organização.
Ativo O sinalizador para verificar se a permissão está ativa no momento.
Criado em Ele armazena a data e hora em que a permissão foi criada.
Atualizado em Ele armazena a data e hora em que a permissão é atualizada.
Conteúdo Os detalhes completos sobre a permissão.



A Tabela de Permissões com as restrições apropriadas é mostrada abaixo.


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 de permissões de funções




A Tabela de permissões de papéis pode ser usado para armazenar os mapeamentos das permissões para as funções. Abaixo mencionada é a descrição de todas as colunas da Tabela de Permissão de Função.


ID da função O ID da função para identificar a função.
ID de permissão O ID da permissão para identificar a permissão.
Criado em Ele armazena a data e hora em que o mapeamento é criado.
Atualizado em Ele armazena a data e hora em que o mapeamento é atualizado.



A Tabela de Permissões de Função com as restrições apropriadas é mostrada abaixo.


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 de usuário




Nesta seção, projetaremos a Tabela do usuário para armazenar informações do usuário. Os usuários podem gerenciar seus próprios perfis. Além disso, os usuários podem usar o aplicativo de acordo com as funções do sistema atribuídas a eles. Abaixo está a descrição de todas as colunas da Tabela de Usuários.


ID O ID exclusivo para identificar o usuário.
ID da função A função do usuário. Pode ser Administrador ou Usuário.
Nome O primeiro nome do usuário.
Nome do meio O nome do meio do usuário.
Sobrenome O sobrenome do usuário.
Celular O número de celular do usuário. Ele pode ser usado para fins de login e registro.
E-mail O e-mail do usuário. Ele pode ser usado para fins de login e registro.
Hash de senha O hash de senha gerado pelo algoritmo apropriado. Devemos evitar armazenar senhas simples ou criptografadas.
Registrado em Esta coluna pode ser usada para calcular a vida útil do usuário com o aplicativo.
Último login Pode ser usado para identificar o último login do usuário.
Introdução A breve introdução do usuário.
Perfil Detalhes do usuário.



A Tabela de Usuários com as restrições apropriadas é mostrada abaixo.


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 de Organização




Nesta seção, projetaremos a Tabela de organização para armazenar os dados da organização. Segue abaixo a descrição de todas as colunas da Tabela de Organização.


ID O ID exclusivo para identificar a organização.
Criado por O ID do usuário para identificar o usuário que registrou a organização.
Atualizado por O ID do usuário para identificar o usuário que atualizou a organização.
Título O título da organização.
Metatítulo O meta-título a ser usado para o título do navegador e propósitos de SEO.
Slug O slug para formar o URL exclusivo.
Resumo O resumo para mencionar os principais destaques.
Estado O status da organização pode ser Novo, Aprovado, Ativo ou Bloqueado.
Criado em Ele armazena a data e hora em que a organização foi criada.
Atualizado em Ele armazena a data e hora em que a organização é atualizada.
Perfil A coluna usada para armazenar os detalhes do perfil da organização.
Conteúdo A coluna usada para armazenar os detalhes adicionais da organização.



Ele usa o status da coluna para rastrear o status da organização. O status pode ser Novo, Aprovado, Ativo ou Bloqueado. A Tabela de Organização com as restrições apropriadas é mostrada abaixo.


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 da Organização




A Meta Tabela da Organização pode ser usada para armazenar informações adicionais sobre as organizações, incluindo a URL do banner da organização, etc. Abaixo mencionada é a descrição de todas as colunas da Meta Tabela da Organização.


ID O ID exclusivo para identificar a meta da organização.
ID da organização O ID da organização para identificar a organização pai.
Chave A chave que identifica o meta.
Conteúdo A coluna usada para armazenar os metadados da organização.



A Meta Tabela da Organização com as restrições apropriadas é mostrada abaixo.


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 de funcionários




Nesta seção, projetaremos a Tabela de Funcionários para armazenar os dados do funcionário. Abaixo está a descrição de todas as colunas da Tabela de Empregados.


ID O ID exclusivo para identificar o funcionário.
ID de usuário O ID do usuário para identificar o usuário associado ao Funcionário.
ID da função O ID de função específico da organização atribuído ao funcionário.
Criado por O ID do usuário para identificar o usuário que adicionou o funcionário.
Atualizado por O ID do usuário para identificar o usuário que atualizou o funcionário.
Código O código usado pela organização para identificar o funcionário.
Estado O status do funcionário pode ser Novo, Aprovado, Ativo, Bloqueado ou Encerrado.
Criado em Ele armazena a data e hora em que o funcionário é criado.
Atualizado em Ele armazena a data e hora em que o funcionário é atualizado.
Começa em Ele armazena a data e hora em que o emprego começa.
Termina em Ele armazena a data e hora em que o emprego termina.
Observações A coluna usada para armazenar as notas específicas do emprego.



Ele usa o status da coluna para rastrear o status do funcionário. O status pode ser Novo, Aprovado, Ativo, Bloqueado ou Encerrado. A Tabela Employee com as restrições apropriadas é mostrada abaixo.


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;


Resumo




Neste tutorial, discutimos o design do banco de dados de um sistema de gerenciamento de funcionários para armazenar as funções, permissões, usuários, organizações e gerenciar funcionários da organização.



Você pode enviar seus comentários para participar da discussão. Você também pode estar interessado em projetar o banco de dados dos aplicativos Blog, Carrinho de compras e Pesquisa e pesquisa. O esquema completo do banco de dados também está disponível no GitHub.