web-dev-qa-db-fra.com

Différence entre les relations un à plusieurs et plusieurs à un

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

103
Zhaf

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:

Relations de base de données - Documentation IBM DB2

92
Devendra D. Chavan

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.
28
nathan gonzalez

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 Orders.

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 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 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.

15
Gray

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.

5
pal

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.

4
nvogel

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:

  1. Multiplicité (terme ER: cardinalité)
    • Relations individuelles: Exemple mari et femme
    • Relations un à plusieurs: Exemple Mère et enfants 
    • Relations entre plusieurs: exemple d'élève et de sujet
  2. Directionalité : N'affecte pas la cartographie mais fait la différence sur la façon dont nous pouvons accéder aux données
    • Relations unidirectionnelles: champ ou propriété de relation faisant référence à l'autre entité.
    • Relations bidirectionnelles: chaque entité a un champ ou une propriété de relation qui fait référence à l'autre entité.
2
Premraj

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 interlocuteur peut faire des choses utiles ou déroutantes [comme dans certaines réponses], mais c'est une autre histoire.) 

  • Une clé étrangère dans une table (la table référencing)
    Références
    a Primary Key dans une autre table (la table referenced
  • 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 

  • Puisque 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 
  • Donc, la relation Foo::Bar est un-à-plusieurs 
  • Maintenant, vous pouvez percevoir _ (regarder) la relation dans l'autre sens, Bar::Foo est plusieurs-à-un
    • Mais ne laissez pas cela vous confondre: pour une rangée Bar, il n’ya qu’une rangée Foo
  • En SQL, c'est tout ce que nous avons. C'est tout ce qui est nécessaire. 

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.

Cardinalité

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-à-plusieurs résolus

0
PerformanceDBA
  • Un à plusieurs --- Un parent peut avoir deux enfants ou plus. 
  • 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....,

0
Samuel H

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.

0
Tom Bell