Estou trabalhando na criação de um aplicativo de negócios para minha empresa e lutando para escolher o design de banco de dados mais apropriado para uma situação específica. Digamos que eu tenho as seguintes entidades:
Aprovação
- Eu iria
- Status
- ...
ApprovalComment
- Eu iria
- ApprovalId
- Comente
Ordem
- Eu iria
- ...
Fatura
- Eu iria
- ...
Obviamente, pode haver vários tipos de aprovações e vários objetos que exigem aprovações. Qual seria a opção mais apropriada para a criação das tabelas:
OPÇÃO 1
Tenha uma tabela de aprovações com chaves estrangeiras nulas:
Aprovações
- Id PK
- Status
- OrderId FK NULL
- InvoiceId FK NULL
AprovaçãoComentários
- Id PK
- ApprovalId FK
- Comente
Nesse caso, eu teria que adicionar uma coluna para cada objeto que precisa de aprovação
OPÇÃO 2
Tenha uma tabela pai de aprovações com campos comuns e uma tabela filha para cada objeto que precisa de aprovação:
Aprovações
- Id PK
- Status
AprovaçãoComentários
- Id PK
- ApprovalId FK
- Comente
OrderApprovals
- ApprovalId PK FK
- OrderId FK
Aprovações da fatura
- ApprovalId PK FK
- InvoiceId FK
OPÇÃO 3
Tenha uma tabela de aprovações para cada objeto:
OrderApprovals
- Id PK
- OrderId FK
- Status
OrderApprovalComments
- Id PK
- OrderApprovalId FK
- Comente
Aprovações da fatura
- Id PK
- InvoiceId FK
- Status
InvoiceApprovalComments
- Id PK
- InvoiceApprovalId FK
- Comente
Sei que todas essas são soluções válidas, mas não consigo decidir qual seria a melhor para adicionar diferentes tipos de aprovações no futuro. Alguma ideia?