sql >> Database >  >> RDS >> Mysql

Hoe verhouden deze tabellen zich tot elkaar?

Een bestelling zou altijd een klant hebben, niet? Het is dus geen left maar inner join.

Wat hen verbindt is de customer_id. Dus uw SQL is eenvoudig:

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;

Entiteitsrelatie:

Bestel KlantKlant_Id 0...N>---+ 1 Klant_Id... ...

Deze EF-relatie komt uit de voorbeelddatabase Northwind van MS SQL Server. In die voorbeelddatabase staan, net als die van u, Klanten en Bestellingen. Klanten- en Ordertabellen zijn gerelateerd via de CustomerId-velden in beide tabellen (het is de primaire sleutel in Customers en de refererende sleutel in de Orders-tabel). Als je dat modelleert als een Entiteitsrelatie dan heb je het bovenstaande diagram. Klantentiteit heeft een navigatie-eigenschap "Bestellingen" (via klant-ID) die verwijst naar de Bestellingen van een bepaalde Klant. En Order-entiteit heeft een navigatie-eigenschap die naar zijn klant verwijst (opnieuw via CustomerId). De relatie is 1 tot 0 of veel (1 - *), wat betekent dat een Klant 0 of meer Bestellingen kan hebben.

Wanneer je de join doet vanaf de kant van de klant, gebruik je een LEFT join "als je alle klanten wilt zien, ongeacht of ze een bestelling hebben of niet" - 0 of meer bestelling(en). Als je alleen die met Order(s) wilt zien, dan gebruik je een inner join.

Als je de join doet vanaf de kant van Bestellingen, dan moet een Bestelling een klant hebben, dus het kan geen LEFT-join zijn. Het is een INNERLIJKE join.

U kunt de relatie van beide kanten controleren met behulp van het veld Connecting CustomerId.

U zou geen aparte tabel hebben voor "OrderId, CustomerId" omdat het geen veel-op-veel-relatie is (het zou pure redundantie zijn en normalisatie-anomalieën veroorzaken).

Ik hoop dat het nu duidelijker is.



  1. Mysql-tabel met samengestelde index maar geen primaire sleutel

  2. MySQL:ongeldig gebruik van groepsfunctie

  3. PostgreSQL - haal de rij op met de maximale waarde voor een kolom

  4. DbUpdateConcurrencyException met Entity Framework 6 met MySql