Eu tenho um cenário onde tenho duas tabelas person_natural
e person_legal
.
Caso 1:
Tenho funcionários, agricultores, clientes e fornecedores. Devo ter um enum em cada tabela ( person_natural
ou person_legal
) indicando o tipo de pessoa (por exemplo, em person_natural
eu teria uma coluna chamada type
para dizer se é funcionário, agricultor ou cliente) ou devo criar uma tabela para cada tipo de pessoa? pessoa e vinculá-la à tabela principal usando um FK?
Pergunto isso porque funcionários e clientes possuem colunas adicionais, por exemplo, funcionário tem salário e cliente tem limite de crédito. Se eu colocar essas colunas na tabela principal, a coluna sempre será NULL para determinado tipo de pessoa.
Exemplo:
person_natural
employee -> FK person_natural
farmer -> FK person_natural
customer -> FK person_natural
ou
person_natural -> type_person (employee, farmer, customer)
Caso 2:
Tenho uma tabela para anexos e uma tabela para endereços. Se eu tiver as tabelas person_natural
e person_legal
, normalmente teria que criar uma tabela de junção para cada uma:
person_natural
person_natural_attachment
person_natural_address
person_legal
person_legal_attachment
person_legal_address
Nesse caso, é correto (especialmente após a normalização do banco de dados) criar uma tabela chamada person
e deixar o FK ativado person_natural
e person_legal
somente para não ter que criar tabelas de junção adicionais?
person
person_natural -> FK person
person_legal -> FK person
person_attachment
person_address
Nesse caso, se eu tivesse um person_natural
, poderia acessar facilmente os anexos juntando o person
e depois as person_attachment
tabelas.
Quais são as práticas recomendadas para esses dois cenários? Estou aberto a quaisquer sugestões ou recomendações. Obrigado pelo seu tempo.