Imagine que eu tenho uma tabela events
, da qual outdoor_events
e indoor_events
herdamos. Eu tenho activities
então outdoor_activities
e indoor_activities
. Suponha que faça sentido que ambientes externos e internos sejam estruturas totalmente diferentes, embora eu esteja interessado em formas alternativas de modelá-las além dessa herança.
Se eu quiser preservar a propriedade de que todas as atividades estão vinculadas a um evento, o método mais direto parece ser usar uma chave estrangeira activities
em events
.
Se eu quiser restringir atividades ao ar livre para eventos ao ar livre, e o mesmo para ambientes internos, faz mais sentido colocar uma chave estrangeira em cada um dos filhos. No entanto, o fato de que toda atividade deve ser correlacionada com um evento é deixado para os filhos da tabela implementá-lo.
Eu poderia fazer as duas coisas, mas isso em sua forma mais simples não é uma opção aceitável para mim porque não é normalizado e qual chave usar é ambígua – e se forem diferentes?
Para mim, a segunda opção faz mais sentido, porque soa mais forte e satisfará ambas as condições com uma implementação adequada.
O que posso fazer para garantir que essas duas propriedades sejam satisfeitas? Ou essa estrutura é falha em princípio?
Observação: não acredito que isso seja uma duplicata de Usando a mesma tabela para entidades... porque essa pergunta não aborda o emparelhamento de tabelas herdadas semelhantes.