Quelle est la vraie différence entre une relation de un à plusieurs et de plusieurs à un? C'est seulement inversé, en quelque sorte?
Je ne trouve pas de didacticiel "bon et facile à comprendre" sur ce sujet, autre que celui-ci: SQL for Beginners: Part 3 - Database Relationships
Oui, c'est l'inverse. Cela dépend de quel côté de la relation l'entité est présente sur .
Par exemple, si un service peut employer plusieurs employés, le contact entre employés est une relation multiple (un ministère emploie plusieurs employés), tandis que la relation employé à département est multiple (plusieurs employés travaillent dans un seul service) .
Plus d'informations sur les types de relation:
De cette page à propos de Terminologie de base de données
La plupart des relations entre les tables sont un-à-plusieurs.
Exemple:
- Un domaine peut être l'habitat de nombreux lecteurs.
- Un lecteur peut avoir plusieurs abonnements.
- Un journal peut avoir plusieurs abonnements.
Une relation plusieurs à un est la même chose qu'un à plusieurs, mais d'un point de vue différent.
- Beaucoup de lecteurs vivent dans un quartier.
- Plusieurs abonnements peuvent être d'un seul et même lecteur.
- De nombreux abonnements concernent un seul et même journal.
Quelle est la vraie différence entre une relation de un à plusieurs et de plusieurs à un?
Il existe des différences conceptuelles entre ces termes qui devraient vous aider à visualiser les données, ainsi que des différences éventuelles dans le schéma généré qui doivent être entièrement comprises. Surtout, la différence réside dans la perspective.
Dans une relation un-à-plusieurs, la table locale a une ligne qui peut être associée à plusieurs lignes d'une autre table. Dans l'exemple de SQL pour les débutants , une Customer
peut être associée à plusieurs Order
s.
Dans la relation opposée plusieurs-à-un, la table locale peut comporter plusieurs lignes associées à une ligne d'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 les colonnes id
et name
:
id,name
1,Bill Smith
2,Jim Kenshaw
Ensuite, pour associer une Order
à une Customer
, de nombreuses implémentations SQL ajoutent à la table Order
une colonne qui stocke la id
de la Customer
associée (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 colonne customer_id
id, nous voyons que Bill Smith
(id-client n ° 1) est associé à 2 commandes: une pour 12,34 $ et une pour 7,58 $. Jim Kenshaw
(customer-id # 2) a seulement 1 commande pour 158,01 $.
Ce qui est important à réaliser, c’est que la relation un-à-plusieurs n’ajoute aucune colonne à la table. Customer
n'a pas de colonne supplémentaire décrivant la relation avec Order
. En fait, la variable Customer
peut également avoir une relation un-à-plusieurs avec les tables ShippingAddress
et SalesCall
et ne pas avoir de colonnes supplémentaires ajoutées à la table Customer
.
Cependant, pour décrire une relation plusieurs-à-un, une colonne id
est souvent ajoutée à la table "many", qui est une clé étrangère à la table "un" - dans ce cas, une colonne customer_id
est ajoutée à la table. Order
. Pour associer la commande n ° 10 de 12,34 $ à Bill Smith
, nous affectons la colonne customer_id
à Bill Smith
1.
Cependant, il est également possible qu'il existe une autre table décrivant les relations Customer
et Order
, de sorte qu'aucun champ supplémentaire ne doit être ajouté à la table Order
. Au lieu d’ajouter un champ customer_id
à la table Order
, il pourrait y avoir une table Customer_Order
contenant des clés pour les Customer
et Order
.
customer_id,order_id
1,10
1,11
2,12
Dans ce cas, les un-à-plusieurs et plusieurs-à-un sont tous conceptuels puisqu'il n'y a pas de changements de schéma entre eux. Quel mécanisme dépend de votre schéma et de votre implémentation SQL.
J'espère que cela t'aides.
La réponse à votre première question est: les deux sont similaires,
La réponse à votre deuxième question est la suivante: un à plusieurs -> un HOMME (table HOMME) peut avoir plus d'une épouse (table WOMEN) plusieurs à un -> plus d'une femme a épousé un HOMME.
Maintenant, si vous souhaitez associer cette relation à deux tables MAN et à WOMEN, une ligne de table MAN peut avoir de nombreuses relations avec des lignes dans la table WOMEN. J'espère que c'est clair.
Il n'y a pas de différence. C'est juste une question de langue et de préférence quant à la manière dont vous énoncez la relation.
Un-à-plusieurs et plusieurs-à-un sont similaires en multiplicité mais en aspect
Le mappage de Associations entre les classes d'entités et les Relations entre les tables. Il existe deux catégories de relations:
En SQL, il n'y a qu'un seul type de relation, cela s'appelle une référence. (Votre interlocuteur peut faire des choses utiles ou déroutantes [comme dans certaines réponses], mais c'est une autre histoire.)
En termes SQL, Bar reference foo
Pas l'inverse
CREATE TABLE Foo (
Foo CHAR(10) NOT NULL, -- primary key
Name CHAR(30) NOT NULL
CONSTRAINT PK -- constraint name
PRIMARY KEY (Foo) -- pk
)
CREATE TABLE Bar (
Bar CHAR(10) NOT NULL, -- primary key
Foo CHAR(10) NOT NULL, -- foreign key to Foo
Name CHAR(30) NOT NULL
CONSTRAINT PK -- constraint name
PRIMARY KEY (Bar), -- pk
CONSTRAINT Foo_HasMany_Bars -- constraint name
FOREIGN KEY (Foo) -- fk in (this) referencing table
REFERENCES Foo(Foo) -- pk in referenced table
)
Puisque Foo.Foo
est une clé primaire, elle est unique, il n’ya qu’une ligne pour une valeur donnée de Foo
Bar.Foo
est une référence, une clé étrangère et qu'il n'y a pas d'index unique, il peut y avoir beaucoup de lignes pour une valeur donnée de Foo
Foo::Bar
est un-à-plusieurs Bar::Foo
est plusieurs-à-un Bar
, il n’ya qu’une rangée Foo
Quelle est la vraie différence entre un et plusieurs et un à un?
Il n'y a qu'une seule relation, donc il n'y a pas de différence. La perception (d'une "fin" ou de l'autre "fin") ou la lire à l'envers ne change pas la relation.
La cardinalité est déclarée en premier dans le modèle de données, ce qui signifie logique et physique (l'intention), puis dans la mise en œuvre (l'intention réalisée).
_ {cardinalité
Un à zéro-à-plusieurs
En SQL, c'est tout ce qui est requis (ci-dessus).
Un à un à plusieurs
Vous avez besoin d'une Transaction pour appliquer celle de la table de référencement.
Un à zéro pour un
Vous avez besoin de Bar
:
CONSTRAINT AK -- constraint name
UNIQUE (Foo) -- unique column, which makes it an Alternate Key
Un par un
Vous avez besoin d'une Transaction pour appliquer celle de la table de référencement.
Plusieurs à plusieurs
Il n’existe pas une telle chose au niveau physique (rappel, il n’existe qu’un seul type de relation en SQL).
Aux premiers niveaux logiques de l'exercice de modélisation, il est commode de dessiner une telle relation. Avant que le modèle ne soit sur le point d'être mis en œuvre, il était préférable de n'utiliser que les éléments pouvant exister. Une telle relation est résolue en implémentant une table associative.
Plusieurs à un --- Ces trois enfants peuvent avoir un seul parent.
Les deux sont similaires. Cela peut être utilisé appartient au besoin. Si vous voulez trouver des enfants pour un parent en particulier, vous pouvez utiliser One-To-Many. ou bien, vous voulez trouver des parents pour un jumeaux, vous pouvez aller avec plusieurs-à-un. Également....,
Il n'y a pas de différence pratique. Utilisez simplement la relation la plus logique compte tenu de la manière dont vous voyez votre problème, comme illustré par Devendra.