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`);
dep_departments
id_department
department
dep_positions
dep_collaborators
id_position
dep_curriculum
id_collaborator
PRIMARY KEY
id_*
fk_position
fk_collaborator
fk_department
id_curriculum
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.
Aqui estão algumas observações e críticas construtivas para o código SQL fornecido:
NOT NULL
description
NULL
curriculum
formation
VARCHAR(255)
TEXT
MEDIUMTEXT
LONGTEXT
ON DELETE
ON UPDATE
ON DELETE CASCADE
ON DELETE SET NULL
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;
DEFAULT NULL
Exemplo:
`id_position` int(11)
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.
CREATE INDEX idx_collaborator ON dep_collaborators(collaborator); CREATE INDEX idx_department ON dep_departments(department);
DECIMAL
salary
DECIMAL(10,2)
DECIMAL(12,2)
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"
position
collaborator
||--o{
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.