Relação ternária: qual é a diferença entre ter uma tabela e ter várias tabelas?

8

Considere o seguinte relacionamento ternário: relação ternária

Suponha que todas as entidades tenham apenas dois atributos (PK e Nome).


Aqui estão as tabelas derivadas (5 tabelas):

Sector
-------------------------
ID_Sector    SectorName
-------------------------

Product
-------------------------
ID_Product    ProductName
-------------------------

Company
--------------------------------------
ID_Company    ID_Sector    CompanyName
--------------------------------------

Relationship 1 (R1)
-------------------------
ID_Sector    ID_Product
-------------------------

Relationship 2 (R2)
-------------------------
ID_Company    ID_Product
-------------------------

Questão:

É uma boa solução para esse relacionamento ternário? Qual é a diferença entre ter 2 tabelas (R1 e R2) em vez da seguinte tabela única:

Ternary table
-------------------------------------
ID_Sector    ID_Company    ID_Product    
-------------------------------------

Para mim, parece que ter 2 tabelas separadas para cada relacionamento (R1 e R2) é uma solução melhor quando comparado a ter uma única tabela, mas não sei se isso é realmente verdade ou se é uma boa prática.

sentir-se
fonte

Respostas:

6

As duas soluções modelam regras diferentes. Com a tabela ternária, você está dizendo que uma empresa pode ter apenas determinados produtos em um setor específico. Em um setor diferente, haverá um conjunto diferente de produtos, embora os dois conjuntos possam se sobrepor, é claro.

Com as tabelas binárias, você está afirmando que o setor não tem influência sobre quais produtos a empresa se relaciona. Da mesma forma, a empresa não tem influência sobre quais produtos estão em qual setor.

A escolha entre essas alternativas será determinada pelas regras de negócios. Não pode ser respondido por uma discussão acadêmica abstrata. Eu achei melhor nomear o relacionamento entre as entidades. Dizer que a empresa está relacionada ao produto, digamos, é interessante; dizer por que a empresa está relacionada ao produto é ainda melhor. "Empresa compra produto" é uma informação diferente de "empresa produz produto" ou "empresa não possui autorização de segurança para usar o produto". Ao fazer isso, frequentemente descubro novos relacionamentos, atributos e tipos de entidade. Você pode acabar precisando das tabelas binárias e ternárias!

Editar : Para as regras

  1. uma empresa produz muitos produtos / cada produto é produzido por exatamente uma empresa
  2. uma empresa relatada em exatamente um setor / cada setor reporta muitas empresas
  3. a Um produto é vendido em exatamente um setor / cada setor tem muitos produtos disponíveis.

Eu teria esses tipos de entidade

Setor - SectorID

CompanyID - CompanyID, SectorID

Product - ProductID, CompanyID

Se alguma das suas regras for muitos para muitos, você precisará das tabelas de associação binária.

Como um aparte, os nomes de relacionamento "has", "pertencem a" e "é um" geralmente ocultam mais do que iluminam. Se você encontrar seus BAs usando estes, peça a eles para pensarem melhor.

Michael Green
fonte
Vamos supor que as regras de negócios sejam: 1) Empresas produzem produtos; 2) Empresas pertencem a um setor (exemplos de setor: máquinas, alimentos, software); 3) Os produtos pertencem a setores. Tentei ser conciso e paguei o preço de ocultar informações importantes. Obrigado!
feelthhis
Meu comentário levanta outra questão: quais regras de negócios o modelo ERD acima? Existe uma maneira de tornar o ERD muito preciso em relação às regras de negócios? A tabela ternária representa com precisão o ERD acima? Nesse caso, o ERD acima é o modelo errado em relação às 3 regras de negócios declaradas, certo?
feelthhis
Quais regras de negócios o modelo ERD acima: a tabela ternária significaria que existe algo que possui ProductID, SectorID e CustomerID como a chave necessária e suficiente. Algo como "GE (empresa) financia (Produto) 90% (atributo) de todos os motores aeronáuticos (setor)", enquanto "Goldman financia 5% de motores aeronáuticos" e "GE financia 3% de moinhos de vento".
Michael Green
@feelthhis - "Existe uma maneira de tornar o ERD muito preciso em relação às regras de negócios": sim! É isso que os ERDs fazem. Vou editar minha resposta. "A tabela ternária representa com precisão o ERD acima": acho que você quer dizer "regras acima". Não. Um produto é fabricado por exatamente uma empresa. Uma empresa pertence a exatamente um setor. Conhecendo o ProductID, é possível identificar exclusivamente o cliente e o setor, e esses IDss seriam redundantes na tabela ternária. Portanto, não é normalizado de acordo com suas três regras. "Se sim ..": eu concordo.
Michael Green
Ternary Table: a company may...Usando a notação (IDSector, IDCompany, IDProduct), significa que as tuplas (1, 1, 1) e (1, 1, 2) são permitidas ("c1" produz "p1" e "p2" em "s1" ); e que as tuplas (1, 1, 1) e (2, 1, 2) não são permitidas ("c1" produz "p1" em "s1" e produz "p2" em "s2")? Por quê? A tabela ternária não deve permitir nenhuma tupla possível (IDSector, IDCompany, IDProduct)? Binary Tables: sector has...; company has...Eu acho que a tabela ternária era equivalente aos binários, se a tabela ternária permitir qualquer tupla (IDSector, IDCompany, IDProduct).
feelthhis