sql >> Databáze >  >> RDS >> Mysql

Jak spolu tyto tabulky souvisí?

Objednávka by vždy měla zákazníka, ne? Není to tedy levé, ale vnitřní spojení.

Co je spojuje, je customer_id. Takže vaše SQL je jednoduše:

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;

Vztah entity:

Objednávka CustomerCustomer_Id 0...N>---+ 1 Customer_Id... ...

Tento vztah EF pochází z ukázkové databáze Northwind MS SQL Server. V této vzorové databázi, stejně jako ve vaší, jsou Zákazníci a Objednávky. Tabulky Customers a Orders jsou propojeny pomocí polí CustomerId v obou tabulkách (je to primární klíč v Customers a cizí klíč v tabulce Orders). Když to modelujete jako vztah Entity, máte výše uvedený diagram. Subjekt zákazníka má navigační vlastnost "Objednávky" (prostřednictvím customerId), která ukazuje na konkrétní objednávky zákazníka. A entita objednávky má navigační vlastnost, která ukazuje na jejího zákazníka (opět přes CustomerId). Vztah je 1 až 0 nebo mnoho (1 - *), což znamená, že zákazník může mít 0 nebo více objednávek.

Když se připojíte ze strany zákazníka, použijete LEVÉ připojení „pokud chcete vidět všechny zákazníky bez ohledu na to, zda mají nebo nemají objednávku“ – 0 nebo více objednávek. Pokud chcete vidět pouze ty, kteří mají objednávky, použijte vnitřní spojení.

Když provedete spojení ze strany objednávek, objednávka musí mít zákazníka, takže to nemůže být LEVÉ spojení. Je to VNITŘNÍ spojení.

Vztah můžete zkontrolovat z obou stran pomocí spojovacího pole CustomerId.

Neměli byste samostatnou tabulku pro "OrderId, CustomerId", protože to není vztah many-to-many (byla by to čistá redundance a vytvořilo by to normalizační anomálie).

Doufám, že je to nyní jasnější.



  1. SQL dotaz na odstranění databáze v MySQL

  2. MYSQLI - WHERE IN pole

  3. Třídění více polí v MySQL

  4. Může SQL Server odeslat webový požadavek?