Qual è la vera differenza tra uno a molti e molti a uno?
Ci sono differenze concettuali tra questi termini che dovrebbero aiutare a visualizzare i dati e anche le differenze nello schema generato che dovrebbero essere pienamente comprese. Soprattutto la differenza è di prospettiva.
In una relazione uno-a-molti, la tabella locale ha una riga che può essere associata a più righe in un'altra tabella. Nell'esempio da SQL for beginners, uno Customer
può essere associato a molti Order
s.
Nella relazione molti-a-uno, la tabella locale può avere molte righe associate a una riga in un'altra tabella. Nel nostro esempio, molti Order
s possono essere associati a uno Customer
. Questa differenza concettuale è importante per la rappresentazione mentale.
Inoltre, lo schema che supporta la relazione viene rappresentato in modo diverso nelle tabelle e Order
. Se il cliente ha colonne id
e name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Poi per un Customer
per essere associate a Order
s, molte implementazioni di SQL aggiungere alla tabella Order
una colonna che memorizza la id
del associata 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 di cui sopra, se guardiamo la colonna customer_id
id, vediamo che Bill Smith
(cliente-id # 1) ha 2 ord associati con 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 capire è che in genere la relazione uno-a-molti in realtà non aggiunge alcuna colonna alla tabella che è "uno". Lo Customer
non ha colonne aggiuntive che descrivono la relazione con Order
. Infatti, lo Customer
potrebbe anche avere una relazione uno-a-molti con le tabelle ShippingAddress
e SalesCall
e tuttavia non sono state aggiunte colonne aggiuntive alla tabella Customer
.
Tuttavia, per una relazione molti-a-uno da descrivere, spesso una colonna id
viene aggiunto ai tanti tavolo che è una chiave esterna a una tabella - in questo caso una colonna customer_id
viene aggiunto Order
. All'ordine associato N. 10 per $ 12,34 a Bill Smith
, assegniamo la colonna customer_id
all'id Bill Smith
1.
Spero che questo aiuti.
Questo è perfetto spiegazione: http://en.wikipedia.org/wiki/Many-to-many_(data_model) – RobertPitt