Quelle est la vraie différence entre une relation un-à-plusieurs et plusieurs-à-un? C'est seulement inversé, en quelque sorte?
Je ne trouve aucun tutoriel `` bon et facile à comprendre '' sur ce sujet autre que celui-ci: SQL pour les débutants: Partie 3 - Relations avec les bases de données
Réponses:
Oui, c'est l'inverse. Cela dépend de quel côté de la relation l'entité est présente.
Par exemple, si un service peut employer pour plusieurs employés, alors, service à employé est une relation un à plusieurs (un service emploie plusieurs employés), tandis que la relation employé à service est plusieurs à un (de nombreux employés travaillent dans un même service).
Plus d'informations sur les types de relations:
Relations de base de données - Documentation IBM DB2
la source
À partir de cette page sur la terminologie des bases de données
la source
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é à plusieursOrder
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 à unCustomer
. 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
etOrder
. Par exemple, si le client a des colonnesid
etname
:Puis pour que a
Order
soit associé à aCustomer
, de nombreuses implémentations SQL ajoutent à laOrder
table une colonne qui stocke leid
de l'associéCustomer
(dans ce schémacustomer_id
:Dans les lignes de données ci-dessus, si nous regardons la
customer_id
colonne id, nous voyons queBill 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 avecOrder
. En fait , laCustomer
force aussi un à plusieurs avecShippingAddress
etSalesCall
tables et encore ont pas des colonnes supplémentaires ajoutées à laCustomer
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, unecustomer_id
colonne est ajoutée auOrder
. À la commande associée n ° 10 pour 12,34 $ àBill Smith
, nous attribuons lacustomer_id
colonne àBill Smith
's id 1.Cependant, il est également possible qu'une autre table décrive la relation
Customer
etOrder
, de sorte qu'aucun champ supplémentaire ne doit être ajouté à laOrder
table. Au lieu d'ajouter uncustomer_id
champ à laOrder
table, il peut y avoir uneCustomer_Order
table contenant des clés à la fois pourCustomer
etOrder
.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.
la source
javax.persistence.OneToMany
différent duManyToOne
. Êtes-vous en train de dire qu'ils le sont ou simplement que cela dépend de la mise en œuvre? Ma réponse est-elle incorrecte?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 définissez la relation.
la source
La réponse à votre première question est: les deux sont similaires,
La réponse à votre deuxième question est: un-à-plusieurs -> un HOMME (table MAN) peut avoir plus d'une femme (table WOMEN) plusieurs-à-un -> plus d'une femme a épousé un HOMME.
Maintenant, si vous voulez relier cette relation avec deux tables MAN et WOMEN, une ligne de table MAN peut avoir plusieurs relations avec des lignes de la table WOMEN. espérons que c'est clair.
la source
Exemple
Deux tables avec une relation
SQL
En SQL, il n'y a qu'un seul type de relation, cela s'appelle une référence. (Votre interface peut faire des choses utiles ou déroutantes [comme dans certaines réponses], mais c'est une autre histoire.)
Références
une clé primaire dans une autre table ( référe ed table)
En termes SQL, Bar fait référence à Foo
Pas l'inverse
Puisqu'il
Foo.Foo
s'agit d'une clé primaire, elle est unique, il n'y a qu'une seule ligne pour une valeur donnée deFoo
Bar.Foo
s'agit d'une référence, d'une clé étrangère et qu'il n'y a pas d'index unique dessus, il peut y avoir plusieurs lignes pour une valeur donnée deFoo
Foo::Bar
est un-à-plusieursBar::Foo
c'est plusieurs-à-unBar
ligne, il n'y a qu'une seuleFoo
ligne référencéeIl n'y a qu'une seule relation, donc il n'y a pas de différence. La perception (d'une «extrémité» ou l'autre «extrémité») ou la lecture à l'envers, ne change pas la relation.
Cardinalité
La cardinalité est déclarée d'abord dans le modèle de données, ce qui signifie logique et physique (l'intention), puis dans l'implémentation (l'intention réalisée).
Cardinalité
Un à zéro à plusieurs
En SQL, c'est tout ce qui est requis.
Un à un-à-plusieurs
Vous avez besoin d'une transaction pour appliquer celle du tableau de référencement.
Un à zéro à un dont
vous avez besoin dans
Bar
:Un à un
Vous avez besoin d'une transaction pour appliquer celle du tableau de référencement.
Beaucoup à plusieurs
Il n'y a rien de tel au niveau physique (rappelons qu'il n'y a qu'un seul type de relation en SQL).
Aux premiers niveaux logiques pendant l'exercice de modélisation, il est pratique de dessiner une telle relation. Avant que le modèle ne se rapproche de la mise en œuvre, il vaut mieux l'élever à n'utiliser que des éléments qui peuvent exister. Une telle relation est résolue en implémentant une table associative.
Plusieurs à plusieurs résolus
la source
Un-à-plusieurs et plusieurs-à-un sont similaires en multiplicité mais pas en aspect (c'est-à-dire en directionnalité).
Le mappage des associations entre les classes d'entités et les relations entre les tables. Il existe deux catégories de relations:
la source
Il n'y a pas de différence pratique. Utilisez simplement la relation qui a le plus de sens étant donné la façon dont vous voyez votre problème comme l'a illustré Devendra.
la source
--- Plusieurs à un --- Ces 3 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 choisir One-To-Many. ou bien, vous voulez trouver des parents pour des jumeaux, vous pouvez choisir Many-To-One. Également....,
la source
one-to-many a la classe parent contient n nombre d'enfants donc c'est un mappage de collection.
plusieurs-à-un a n nombre d'enfants contient un parent donc c'est un mappage d'objet
la source