sql >> Database teknologi >  >> RDS >> Mysql

Hvordan hænger disse tabeller sammen?

En ordre ville altid have en kunde, ikke? Så det er ikke en venstre, men indre sammenføjning.

Det, der forbinder dem, er customer_id. Så din SQL er simpelthen:

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;

Enhedsforhold:

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

Denne EF-relation er fra MS SQL Servers eksempeldatabase Northwind. I den eksempeldatabase, ligesom din, er der kunder og ordrer. Kunder og ordretabeller er relateret via CustomerId-felterne i begge tabeller (det er den primære nøgle i kunder og fremmednøgle i ordretabellen). Når du modellerer det som en enhedsrelation, har du ovenstående diagram. Kundeenhed har en "Ordre"-navigationsegenskab (via kunde-id), der peger på en bestemt kundes ordrer. Og ordreenheden har en navigationsegenskab, der peger på dens kunde (igen via CustomerId). Relationen er 1 til 0 eller mange (1 - *), hvilket betyder, at en kunde kan have 0 eller flere ordrer.

Når du laver joinforbindelsen fra kundens side, bruger du en LEFT join "hvis du vil se alle kunder uanset de har ordre(r) eller ej" - 0 eller flere ordre(r). Hvis du kun vil se dem med ordre(r), så bruger du en indre joinforbindelse.

Når du laver joinforbindelsen fra ordres side, så skal en ordre have en kunde, så det kan ikke være en LEFT join. Det er en INDER join.

Du kan kontrollere relationen fra begge sider ved at bruge det forbindende CustomerId-felt.

Du ville ikke have en separat tabel for "OrderId, CustomerId", da det ikke er mange-til-mange-relation (det ville være ren redundans og ville skabe normaliseringsanomalier).

Håber det er mere klart nu.



  1. App Engine og MySQL

  2. MySQL - Hvordan søger man efter eksakt ordmatch ved hjælp af LIKE?

  3. Forbind klienten til MySQL-serveren

  4. Hvordan opretter man PHP to kolonne tabel med værdier fra databasen?