Quelle est la vraie différence entre une relation un-à-plusieurs et plusieurs-à-un?
Il existe des différences conceptuelles entre ces termes qui devraient vous aider à visualiser les données et également des différences possibles dans le schéma généré qui doivent être entièrement comprises. Cependant, la différence réside principalement dans la perspective.
Dans une relation un-à-plusieurs , la table locale a une ligne qui peut être associée à plusieurs lignes dans une autre table. Dans l'exemple de SQL pour les débutants , on Customer
peut être associé à plusieurs Order
s.
Dans la relation plusieurs à un opposée , la table locale peut avoir plusieurs lignes associées à une ligne dans une autre table. Dans notre exemple, plusieurs Order
s peuvent être associés à un Customer
. Cette différence conceptuelle est importante pour la représentation mentale.
De plus, le schéma qui prend en charge la relation peut être représenté différemment dans les tables Customer
et Order
. Par exemple, si le client a des colonnes id
et name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Puis pour que a Order
soit associé à a Customer
, de nombreuses implémentations SQL ajoutent à la Order
table une colonne qui stocke le id
de l'associé Customer
(dans ce schéma customer_id
:
id,date,amount,customer_id
10,20160620,12.34,1
11,20160620,7.58,1
12,20160621,158.01,2
Dans les lignes de données ci-dessus, si nous regardons la customer_id
colonne id, nous voyons que Bill Smith
(customer-id # 1) a 2 commandes qui lui sont associées: une pour 12,34 $ et une pour 7,58 $. Jim Kenshaw
(customer-id # 2) n'a qu'une seule commande pour 158,01 $.
Ce qu'il est important de réaliser, c'est qu'en général, la relation un-à-plusieurs n'ajoute en fait aucune colonne à la table qui est «un». Le Customer
n'a pas de colonnes supplémentaires décrivant la relation avec Order
. En fait , la Customer
force aussi un à plusieurs avec ShippingAddress
et SalesCall
tables et encore ont pas des colonnes supplémentaires ajoutées à la Customer
table.
Cependant, pour décrire une relation plusieurs-à-un, souvent une id
colonne est ajoutée à la table "plusieurs" qui est une clé étrangère à la table "un" - dans ce cas, une customer_id
colonne est ajoutée au Order
. À la commande associée n ° 10 pour 12,34 $ à Bill Smith
, nous attribuons la customer_id
colonne à Bill Smith
's id 1.
Cependant, il est également possible qu'une autre table décrive la relation Customer
et Order
, de sorte qu'aucun champ supplémentaire ne doit être ajouté à la Order
table. Au lieu d'ajouter un customer_id
champ à la Order
table, il peut y avoir une Customer_Order
table contenant des clés à la fois pour Customer
et Order
.
customer_id,order_id
1,10
1,11
2,12
Dans ce cas, le un-à-plusieurs et plusieurs-à-un sont tous conceptuels car il n'y a aucun changement de schéma entre eux. Le mécanisme dépend de votre schéma et de votre implémentation SQL.
J'espère que cela t'aides.