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 Customerpeut être associé à plusieurs Orders.
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 Orders 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 Customeret Order. Par exemple, si le client a des colonnes idet name:
id,name
1,Bill Smith
2,Jim Kenshaw
Puis pour que a Ordersoit associé à a Customer, de nombreuses implémentations SQL ajoutent à la Ordertable une colonne qui stocke le idde 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_idcolonne 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 Customern'a pas de colonnes supplémentaires décrivant la relation avec Order. En fait , la Customerforce aussi un à plusieurs avec ShippingAddresset SalesCalltables et encore ont pas des colonnes supplémentaires ajoutées à la Customertable.
Cependant, pour décrire une relation plusieurs-à-un, souvent une idcolonne est ajoutée à la table "plusieurs" qui est une clé étrangère à la table "un" - dans ce cas, une customer_idcolonne est ajoutée au Order. À la commande associée n ° 10 pour 12,34 $ à Bill Smith, nous attribuons la customer_idcolonne à Bill Smith's id 1.
Cependant, il est également possible qu'une autre table décrive la relation Customeret Order, de sorte qu'aucun champ supplémentaire ne doit être ajouté à la Ordertable. Au lieu d'ajouter un customer_idchamp à la Ordertable, il peut y avoir une Customer_Ordertable contenant des clés à la fois pour Customeret 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.