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