Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Muitas associações à esquerda são um cheiro de código?


É uma solução perfeitamente legítima para alguns designs.

Digamos que você tenha uma hierarquia de relações um-para-muitos como Customer - Order - Basket - Item - Price , etc., que podem ser não preenchidos em qualquer nível:um Customer pode não ter Orders , um Order não pode ter Baskets , etc

Nesse caso, você emite algo como:
SELECT  *
FROM    Customer c
LEFT OUTER JOIN
        Order o
ON      o.CustomerID = c.ID
LEFT OUTER JOIN
        Basket b
ON      b.OrderID = c.ID
…

Observe que pode ser ineficiente em alguns casos e pode ser substituído por EXISTS ou NOT EXISTS (se você deseja apenas descobrir se os registros correspondentes existem ou não existem em outras tabelas).

Veja este artigo no meu blog para obter detalhes de desempenho: