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 Customerpuò essere associato a molti Orders.
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 Orderpossono 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 Customere Order. Ad esempio, se il cliente ha colonne ide name:
id,name
1,Bill Smith
2,Jim Kenshaw
Quindi per Orderassociare a a Customer, molte implementazioni SQL aggiungono alla Ordertabella una colonna che memorizza idgli 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_idcolonna 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 Customernon ha colonne aggiuntive che descrivono la relazione con Order. In effetti, Customerpotrebbe anche avere una relazione uno-a-molti con ShippingAddresse le SalesCalltabelle e tuttavia non avere colonne aggiuntive aggiunte alla Customertabella.
Tuttavia, per descrivere una relazione molti-a-uno, spesso idviene aggiunta una colonna alla tabella "molti" che è una chiave esterna alla tabella "uno" - in questo caso customer_idviene aggiunta una colonna alla Order. All'ordine # 10 associato per $ 12,34 a Bill Smith, assegniamo la customer_idcolonna Bill Smithall'id 1 di.
Tuttavia, è anche possibile che ci sia un'altra tabella che descrive la relazione Customere Order, in modo che non sia necessario aggiungere altri campi alla Ordertabella. Invece di aggiungere un customer_idcampo alla Ordertavola, ci potrebbero essere Customer_Ordertabella che contiene tasti sia per il Customere 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.