Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como essas tabelas estão relacionadas?


Um pedido sempre teria um cliente, não? Portanto, não é uma junção esquerda, mas interna.

O que os liga é o customer_id. Então seu SQL é simplesmente:
select o.order_number, o.customer_ID, o.address, 
    c.first_name, c.last_name
from orders o
inner join customer c on o.customer_ID = c.customer_ID;

Relacionamento de entidade:

Ordem CustomerCustomer_Id 0...N>---+ 1 Customer_Id... ...



Essa relação EF é do banco de dados de exemplo Northwind do MS SQL Server. Nesse banco de dados de exemplo, assim como o seu, existem Clientes e Pedidos. As tabelas Customers e Orders são relacionadas por meio dos campos CustomerId em ambas as tabelas (é a chave primária em Customers e a chave estrangeira na tabela Orders). Quando você modela isso como uma relação de Entidade, você tem o diagrama acima. A entidade do cliente tem uma propriedade de navegação "Pedidos" (via customerId) que aponta para os Pedidos de um determinado cliente. E a entidade Order tem uma propriedade de navegação que aponta para seu Customer (novamente via CustomerId). A relação é de 1 para 0 ou muitos (1 - *), o que significa que um Cliente pode ter 0 ou mais Pedidos.

Quando você faz a junção do lado do Cliente, você usa uma junção ESQUERDA "se você quiser ver todos os Clientes, independentemente de terem ou não Pedido(s)" - 0 ou mais Pedido(s). Se você quiser ver apenas aqueles com Pedido(s), use uma junção interna.

Quando você faz a junção do lado dos Pedidos, um Pedido deve ter um Cliente para que não possa ser uma junção ESQUERDA. É uma junção INTERNA.

Você pode verificar a relação de ambos os lados usando o campo CustomerId de conexão.

Você não teria uma tabela separada para "OrderId, CustomerId", pois não é uma relação muitos para muitos (seria redundância pura e criaria anomalias de normalização).

Espero que esteja mais claro agora.