Sou novo em design de banco de dados e projetei um banco de dados que parece bom para o aplicativo, mas parece ter uma grande bandeira vermelha para mim.
Eu tenho uma tabela mestre que é unida a outra tabela, mas a tabela que é unida é baseada em alguns dados em outra coluna.
Meu aplicativo, por sua vez, executará consultas como:
SELECT f.dataA, m.data1, m.data2
FROM Master_Table m
INNER JOIN Foo f ON f.id = m.TableKey
WHERE TableName = 'Foo'
e
SELECT fb.dataA, fb.dataB, m.data1, m.data2
FROM Master_Table m
INNER JOIN Foobar fb ON fb.id = m.TableKey
WHERE TableName = 'Foobar'
Isso funciona como desejado, mas não gosto do fato de que meu Master_Table.TableKey
provavelmente deve ser mantido em uma restrição de chave estrangeira, mas isso é impossível com esse design (ou pelo menos acho que sim).
A coluna deve TableKey
ser dividida em um FooKey
e ? Isso também parece estranho porque eu garanto isso e será null where = "Foo".BarKey
FoobarKey
BarKey
FoobarKey
TableName
Ou há uma maneira completamente diferente de abordar isso?
EDIT: Curiosamente, este recente post meta.dba parece tocar nessa ideia sobre herança, mas não tenho muita certeza de qual é a melhor abordagem ainda.