Bom dia pessoal. Sou novo em banco de dados e estou tentando entender alguns conceitos:
Uma única entidade (N:N)
Uma empresa trabalha com projetos de forma horizontal, onde a pessoa N em um projeto pode ser a gestora da pessoa X e em outro projeto a pessoa X pode ser a gestora da pessoa N. Isso podendo ser para diversos projetos e pessoas.
1) Criei um cadastro de pessoas da seguinte forma:
CREATE TABLE tb_natural_person(
id_natural_person INT NOT NULL AUTO_INCREMENT,
first_name_natural_person VARCHAR(255) NOT NULL,
last_name_natural_person VARCHAR(255) NOT NULL,
PRIMARY KEY(id_natural_person)
)
2) Para que pudesse uma ter um relacionamento hierárquico de um funcionário para o outro (N:N), criei uma nova tabela onde tanto a coluna “parent_id_natural_person_relation” quanto a coluna “child_id_natural_person_relation” se referenciam (FOREIGN KEY) a coluna “id_natural_person” da primeira tabela.
CREATE TABLE tb_natural_person_relation(
id_natural_person_relation INT NOT NULL AUTO_INCREMENT,
parent_id_natural_person_relation INT NOT NULL,
child_id_natural_person_relation INT NOT NULL,
PRIMARY KEY(id_natural_person_relation),
FOREIGN KEY (parent_id_natural_person_relation)
REFERENCES tb_natural_person(id_natural_person),
FOREIGN KEY (child_id_natural_person_relation)
REFERENCES tb_natural_person(id_natural_person)
)
3) Ao tentar fazer um SELECT via JOIN (INNER JOIN, LEFT JOIN, UNION, etc) percebi que não consigo selecionar os campos “first_name_natural_person” e “last_name_natural_person” relacionados aos campos “parent_id_natural_person_relation” e “child_id_natural_person_relation” (ou pelo menos não sei como).
Pergunta: Tenho que fazer a contrução e relacionamento destas tabelas, onde possa ter quantas “relações hierárquicas” forem necessárias. Está certo a forma que eu estou estruturando acima? Caso sim, como poderia escrever o SELECT de uma forma que apareça em uma linha os campos “first_name_natural_person” e “last_name_natural_person” relacionados aos campos “parent_id_natural_person_relation” e “child_id_natural_person_relation” da outra tabela? Caso esteja errado minha forma de raciocínio, como seria a forma correta?
Muito obrigado e abraços,
Guilherme