Projeto

Diagrama ER da Estrutura de Gestão Organizacional

Diagrama ER da Estrutura de Gestão Organizacional

Fabrício de Medeiros

Conjunto de instruções SQL para criar um banco de dados para gerenciar departamentos, cargos, colaboradores e currículos em uma estrutura organizacional.

CREATE TABLE `dep_departments` (
  `id_department` int(11) NOT NULL,
  `department` varchar(100) NOT NULL,
  `description` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `dep_positions` (
  `id_position` int(11) NOT NULL,
  `position` varchar(100) NOT NULL,
  `id_department` int(11) NOT NULL,
  `salary` decimal(10,2) NOT NULL,
  `description` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `dep_collaborators` (
  `id_collaborator` int(11) NOT NULL,
  `collaborator` varchar(100) NOT NULL,
  `id_position` int(11) DEFAULT NULL,
  `formation` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `dep_curriculum` (
  `id_curriculum` int(11) NOT NULL,
  `curriculum` text,
  `id_collaborator` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `dep_collaborators`
  ADD PRIMARY KEY (`id_collaborator`),
  ADD KEY `fk_position` (`id_position`);

ALTER TABLE `dep_curriculum`
  ADD PRIMARY KEY (`id_curriculum`),
  ADD KEY `fk_collaborator` (`id_collaborator`);

ALTER TABLE `dep_departments`
  ADD PRIMARY KEY (`id_department`);

ALTER TABLE `dep_positions`
  ADD PRIMARY KEY (`id_position`),
  ADD KEY `fk_department` (`id_department`);


ALTER TABLE `dep_collaborators`
  MODIFY `id_collaborator` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `dep_curriculum`
  MODIFY `id_curriculum` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `dep_departments`
  MODIFY `id_department` int(11) NOT NULL AUTO_INCREMENT;

ALTER TABLE `dep_positions`
  MODIFY `id_position` int(11) NOT NULL AUTO_INCREMENT;


ALTER TABLE `dep_collaborators`
  ADD CONSTRAINT `fk_position` FOREIGN KEY (`id_position`) REFERENCES `dep_positions` (`id_position`);

ALTER TABLE `dep_curriculum`
  ADD CONSTRAINT `fk_collaborator` FOREIGN KEY (`id_collaborator`) REFERENCES `dep_collaborators` (`id_collaborator`);

ALTER TABLE `dep_positions`
  ADD CONSTRAINT `fk_department` FOREIGN KEY (`id_department`) REFERENCES `dep_departments` (`id_department`);

Tabelas criadas:

  1. dep_departments: Armazena os departamentos, com um id_department e um nome (department).
  2. dep_positions: Armazena os cargos, relacionando cada um com um departamento (id_department), além de possuir um campo de salário e uma descrição.
  3. dep_collaborators: Armazena os colaboradores, com a possibilidade de relacioná-los a um cargo (id_position) e armazenar sua formação.
  4. dep_curriculum: Armazena os currículos de colaboradores, relacionados por id_collaborator.

Chaves primárias e estrangeiras:

Auto-incremento:

Essa estrutura permite gerenciar a relação entre departamentos, cargos, colaboradores e seus respectivos currículos, garantindo que os dados estejam conectados corretamente por meio de chaves estrangeiras.

Sugestões

Aqui estão algumas observações e críticas construtivas para o código SQL fornecido:

1. Uso de NOT NULL em colunas descritivas:

2. Colunas de curriculum e formation:

3. Chaves estrangeiras e ON DELETE/ON UPDATE:

Exemplo para a tabela dep_collaborators:

ALTER TABLE `dep_collaborators`
  ADD CONSTRAINT `fk_position` FOREIGN KEY (`id_position`) REFERENCES `dep_positions` (`id_position`) ON DELETE SET NULL ON UPDATE CASCADE;

4. Uso de DEFAULT NULL implícito:

Exemplo:

`id_position` int(11)

5. Falta de índices em campos de busca frequente:

Seria interessante criar índices adicionais em colunas que provavelmente serão usadas em consultas frequentes, como collaborator em dep_collaborators e department em dep_departments. Isso melhora a performance em grandes volumes de dados.

Exemplo:
CREATE INDEX idx_collaborator ON dep_collaborators(collaborator);
CREATE INDEX idx_department ON dep_departments(department);

6. Largura de DECIMAL para salário:

7. Normalização e dependência funcional:

Abaixo está o diagrama ER (Entidade-Relacionamento) com base no esquema SQL. Este diagrama ilustra as entidades (dep_departments, dep_positions, dep_collaborators, dep_curriculum), seus atributos, chaves primárias (PK), chaves estrangeiras (FK) e os relacionamentos entre elas.

erDiagram
    dep_departments {
        int id_department PK "Chave Primária"
        varchar department "Nome do Departamento"
        varchar description "Descrição"
    }

    dep_positions {
        int id_position PK "Chave Primária"
        varchar position "Nome do Cargo"
        int id_department FK "Chave Estrangeira para dep_departments"
        decimal salary "Salário"
        varchar description "Descrição"
    }

    dep_collaborators {
        int id_collaborator PK "Chave Primária"
        varchar collaborator "Nome do Colaborador"
        int id_position FK "Chave Estrangeira para dep_positions"
        varchar formation "Formação"
    }

    dep_curriculum {
        int id_curriculum PK "Chave Primária"
        text curriculum "Currículo"
        int id_collaborator FK "Chave Estrangeira para dep_collaborators"
    }

    %% Relacionamentos
    dep_departments ||--o{ dep_positions : "possui"
    dep_positions ||--o{ dep_collaborators : "ocupa"
    dep_collaborators ||--o{ dep_curriculum : "possui"

Explicação do Diagrama

Entidades e Atributos:

  1. dep_departments:
  2. dep_positions:
  3. dep_collaborators:
  4. dep_curriculum:

Relacionamentos:

  1. dep_departments "possui" dep_positions:
  2. dep_positions "ocupa" dep_collaborators:
  3. dep_collaborators "possui" dep_curriculum:

Considerações Finais

Este diagrama ER proporciona uma visão clara da estrutura do banco de dados, facilitando a compreensão das relações entre departamentos, cargos, colaboradores e currículos. Ele é especialmente útil para desenvolvedores, analistas de dados e qualquer pessoa envolvida no design ou manutenção do sistema.

Editar Voltar