Tenho uma dúvida sobre um cenário semelhante ao descrito aqui: SQL: Entidade pertence (muitos para um) a uma de duas entidades diferentes
Digamos que eu entenda a necessidade da Party
tabela e todas as outras referências a ela. Mas estou curioso para saber na PartyType
tabela qual a necessidade da Name
coluna? Quer dizer, é só para manter o varchar “Pessoa” ou “Organização”?
Da mesma forma, na Party
tabela, para que Name
serve a coluna?
E também, qual é a necessidade da PartyType
mesa? Quer dizer, é só ter um lugar para inserir todos os tipos e o mais importante garantir que na hora de inserir, se houver algo errado PartyTypeCd
(não presente na PartyType
tabela) teremos um erro, certo?
Outra questão é: como você inseriria um Organization
ou um Person
? Vendo o esquema proposto, Organization
as Person
tabelas possuem seus próprios ids ( PersonId
e OrganizationId
respectivamente) que fazem referência a ambos PartyId
na Party
tabela. Então, isso significa que devemos inserir primeiro um novo Person
(por exemplo), na Party
tabela? Se for esse o caso, não deveria haver um AUTO INCREMENT
na PartyId
coluna da Party
tabela, para termos certeza de que não obteremos Organização e Pessoa com o mesmo id?
Do jeito que está , PartyId
não pode ser a única chave primária . A chave primária na Party
tabela deve ser combinada entre PartyTypeCd
e PartyId
.
Minha situação é semelhante, de certa forma, à da pergunta vinculada no topo. Apenas para referência, aqui está um pequeno exemplo de esquema.
Basicamente, tenho uma situação em que a Component
(que tem suas próprias colunas, como component
, and price
) pode ser associada a a User_Brand
ou a a System_Brand
( ambos têm suas próprias colunas e campos exclusivos , que excluí da captura de tela... então, mesclando- os em um tabela com uma type
coluna NÃO é uma solução ).
Como você determinou corretamente, usar o método padrão de subtipos é o caminho a seguir.
Bem, sim, e qualquer outro tipo que você possa adicionar no futuro. Se você acha que não precisa dele, não o use, mas por que não incluir mais algumas informações descritivas sobre o que cada PartyTypeCd está por perto.
Este é um caso bem diferente e a resposta vinculada está incompleta a esse respeito. Acho que a intenção era ter
Name
como chave "natural" real que o substitutoPartyId
substitui como PK. Ainda assim, é uma chave alternativa e deve ter uma restrição exclusiva. Você precisa dele pela mesma razão que precisa de uma chave em qualquer outro lugar: um substituto é inútil por si só.Sim.
Sim, é necessário inserir o tipo base Partido e depois o subtipo Pessoa/Organização.
PartyId
é único.PartyId
éPersonId
ouOrganizationId
, mas ainda é único, independentemente de qual. Não há como obter uma Organização e uma Pessoa com o mesmo ID.Há muito mais informações nas respostas vinculadas àquela que você vinculou.