Sou relativamente novo em design de banco de dados e queria saber as desvantagens de uma decisão específica que tomei no design de um banco de dados para um projeto. Não acho que isso afetará a resposta, mas estou usando o SQL Server 2008 R2.
Projeto:
Temos coisas chamadas Bids
que contêm Materials.
Materiais que podem ser agrupados, então planejo ter uma MaterialGroup
tabela. No entanto, os Materiais não precisam estar separados de um grupo (eles podem estar, unassigned
se você quiser). Então, em vez de fazer uma tabela de links ou tornar a chave estrangeira anulável, decidi fazer o primeiro grupo no banco de dados chamado unassigned
e, em vez de permitir que os materiais não sejam agrupados, pretendo colocá-los neste grupo se não for dado um grupo.
Pergunta: Existe alguma outra desvantagem em esperar que a primeira linha da tabela MaterialGroup
seja unassigned
(além do caso de alguém não conseguir inseri-la lá)? Do ponto de vista prático e teórico, devo mudar para uma tabela de links (ou outra alternativa)?
Ter um grupo que não é um grupo pode levar a problemas de relatórios no futuro. Por exemplo, se você quiser saber o número médio de materiais por grupo, os resultados podem ser facilmente distorcidos pelo número excessivamente grande de
unassigned
membros do grupo.Eu me inclinaria a ter uma tabela de referência cruzada vinculada
Groups
a arquivosMaterials
. Portanto, uma tabela chamadaMaterialsGroupsXRef
que contémGroupID
eMaterialID
; qualquer umMaterial
que seja membro de aGroup
tem uma linha nessa tabela.Qualquer
Materials
um que não seja membro de aGroup
não aparecerá naMaterialsGroupsXRef
tabela. Isso permite que você identifique facilmenteMaterials
que não possui um grupo. Da mesma forma, você pode se identificar facilmenteGroups
com nenhum arquivoMaterials
.