Qual è la vera differenza tra relazione uno-a-molti e molti-a-uno?
Esistono differenze concettuali tra questi termini che dovrebbero aiutarti a visualizzare i dati e anche possibili differenze nello schema generato che dovrebbero essere pienamente comprese. Per lo più, però, la differenza è di prospettiva.
In una relazione uno-a-molti , la tabella locale ha una riga che può essere associata a molte righe in un'altra tabella. Nell'esempio di SQL per principianti , uno Customer
può essere associato a molti Order
s.
Nella relazione molti-a-uno opposta , la tabella locale può avere molte righe associate a una riga in un'altra tabella. Nel nostro esempio, molti messaggi Order
possono essere associati a uno Customer
. Questa differenza concettuale è importante per la rappresentazione mentale.
Inoltre, lo schema che supporta la relazione può essere rappresentato in modo diverso nelle tabelle Customer
e Order
. Ad esempio, se il cliente ha colonne id
e name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Quindi per Order
associare a a Customer
, molte implementazioni SQL aggiungono alla Order
tabella una colonna che memorizza id
gli associati Customer
(in questo schema customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Nelle righe di dati sopra, se guardiamo la customer_id
colonna id, vediamo che Bill Smith
(customer-id # 1) ha 2 ordini associati a lui: uno per $ 12,34 e uno per $ 7,58. Jim Kenshaw
(customer-id # 2) ha solo 1 ordine per $ 158,01.
Ciò che è importante rendersi conto è che in genere la relazione uno-a-molti in realtà non aggiunge alcuna colonna alla tabella che è "uno". Il Customer
non ha colonne aggiuntive che descrivono la relazione con Order
. In effetti, Customer
potrebbe anche avere una relazione uno-a-molti con ShippingAddress
e le SalesCall
tabelle e tuttavia non avere colonne aggiuntive aggiunte alla Customer
tabella.
Tuttavia, per descrivere una relazione molti-a-uno, spesso id
viene aggiunta una colonna alla tabella "molti" che è una chiave esterna alla tabella "uno" - in questo caso customer_id
viene aggiunta una colonna alla Order
. All'ordine # 10 associato per $ 12,34 a Bill Smith
, assegniamo la customer_id
colonna Bill Smith
all'id 1 di.
Tuttavia, è anche possibile che ci sia un'altra tabella che descrive la relazione Customer
e Order
, in modo che non sia necessario aggiungere altri campi alla Order
tabella. Invece di aggiungere un customer_id
campo alla Order
tavola, ci potrebbero essere Customer_Order
tabella che contiene tasti sia per il Customer
e Order
.
customer_id,order_id
1,10
1,11
2,12
In questo caso, l' uno-a-molti e molti-a-uno sono tutti concettuali poiché non ci sono cambiamenti di schema tra di loro. Quale meccanismo dipende dallo schema e dall'implementazione SQL.
Spero che questo ti aiuti.