cartaz pela primeira vez aqui e feliz 2023!
Ao falar sobre diferentes tipos de relacionamentos de entidades, costumo pensar nos três seguintes:
- um a um
- um-para-muitos / muitos-para-um
- muitos para muitos
No entanto, sei que a notação pé de galinha dividiu o um-para-muitos em dois tipos:
ou seja, o
- "CLIENTE faz PEDIDO" pode ter zero ou muitos, mas
- "ORDER contém LINE-ITEM" deve ter um para muitos
Eu sei que é mais preciso, mas nunca pensei mais nas implicações para o nÃvel DDL e DML. Então,
Qual é o impacto desses dois tipos de relações um-para-muitos no nÃvel DDL e DML, por favor? Por exemplo,
se eu disser ou não se separar, quais são as diferenças quando se trata de definir as relações em DDL; e as restrições ao fazer DML. O que eu ganharia ou estaria perdendo?
Não há uma maneira natural e de primeira classe de modelar um 1 para (um ou muitos) em um RDBMS.
Você poderia modelar isso adicionando uma chave estrangeira em SalesOrder apontando para algum LineItem, mas na prática isso raramente é feito.
Você modela todos os 1-1, 1-muitos, 1-zero ou um e 1-um para muitos usando uma chave estrangeira.
Há uma diferença importante que afeta DDL entre esses relacionamentos, mas não é capturada na notação que você está usando. O relacionamento entre Pedido e cliente é um relacionamento fraco, porque você pode ter um pedido sem cliente, e Pedido e Cliente são ambos "entidades fortes". A relação entre Order e LineItem é forte, pois você não pode ter um LineItem sem um pedido, e LineItem é uma "entidade fraca".
O impacto no DDL é que relacionamentos fortes de tipo de contenção são modelados canonicamente pela chave estrangeira de muitos lados sendo um subconjunto de sua chave e usando exclusões em cascata.
No SQL Server, eu modelaria isso como