IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Relation n To n - Table liaison


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Points : 47
    Points
    47
    Par défaut Relation n To n - Table liaison
    Bonjour,
    J'aurais aimé avoir des éclaircissement sur certains points ...
    J'ai 2 tables, une table A et une table B.
    Entre ces 2 tables j'ai une table de liaison (table AB) qui représente la relation n to n.

    J'ai donc 2 choix pour modéliser cette table.
    1er choix : Faire une table AB avec comme clé primaire une composition des 2 clés ! PK_AB (IdA, IdB)
    2éme choix : Faire une table "classique" IdAB PK, IdA Fk, IdB FK.

    Ma question est comment puis je gérer des quantités dans cette table de relation.
    Est il possible dans mon premier cas d'avoir 2 fois les mêmes valeurs pour IdA et IdB ?
    Je ne crois pas car la clé primaire par définition est unique ! ou existe t il un moyen d'outre passer cette règle ?

    et donc dans mon 2eme cas vaut il mieux gérer une colonne quantité ? ou alors répéter les relations ?

    Merci de votre aide !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par weebo Voir le message
    Bonjour,
    J'aurais aimé avoir des éclaircissement sur certains points ...
    J'ai 2 tables, une table A et une table B.
    Entre ces 2 tables j'ai une table de liaison (table AB) qui représente la relation n to n.

    J'ai donc 2 choix pour modéliser cette table.
    1er choix : Faire une table AB avec comme clé primaire une composition des 2 clés ! PK_AB (IdA, IdB)
    2éme choix : Faire une table "classique" IdAB PK, IdA Fk, IdB FK.

    Ma question est comment puis je gérer des quantités dans cette table de relation.
    Est il possible dans mon premier cas d'avoir 2 fois les mêmes valeurs pour IdA et IdB ?
    Je ne crois pas car la clé primaire par définition est unique ! ou existe t il un moyen d'outre passer cette règle ?
    Non, car par définition une table de jointure découle du passage du modèle conceptuel au modèle physique.

    et donc dans mon 2eme cas vaut il mieux gérer une colonne quantité ? ou alors répéter les relations ?
    Votre question n'a pas de sens, car si c'est une table de jointure elle découle du MCD et il est donc impossible d'avoir des "doublons". Sinon, ce n'est pas une table de jointure, c'est une table comme les autres.
    En revanche, une 3e solution que vous n'avez pas évoqué et qui respecte les deux conditions est que votre table de jointure peut elle-meme avoir des attributs propre, et pourquoi pas la quantité de liens !

    Par exemple, si vous voules avoir deux fois le lien 33, 25, dans votre solution, cela fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IdA  IdB
    ---- ----
    33   25
    33   25
    Or comme vous le savez sans doute une table sans clef (donc avec des doublons), cela ne devrait JAMAIS exister.

    La solution dans ce cas est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IdA  IdB  Quantité
    ---- ---- ---------
    33   25   2
    Dans ce cas vous n'avez aucune redondance et votre MCD est correct

    A +

  3. #3
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 87
    Points : 47
    Points
    47
    Par défaut
    Oui effectivement il existe ce cas la également. On conserve ainsi la clé primaire composée !
    Mais dans mon cas que j'ai oublié de préciser, j'utilise un ORM qui ne sait pas bien gérer les clés primaire lorsqu'elles sont composées et lorsque la table de liaison possède des colonnes supplémentaire. Du coup lorsque ma table de jointure possède une propriété de quantité par exemple, je suis obligé d'ajouter une clé primaire autoincrémentée !
    Je sais c'est la lose !

  4. #4
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Dans ce cas n'oubliez pas de mettre un index unique sur (IdA,IdB) pour vous assurer de ne pas avoir de doublons.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/02/2006, 19h44
  2. Réponses: 2
    Dernier message: 11/01/2006, 11h54
  3. Relation et mise à jour table
    Par Zbbfrom39 dans le forum Access
    Réponses: 2
    Dernier message: 04/11/2005, 07h22
  4. [novice] relation fk entre deux tables
    Par localhost dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/10/2005, 06h33
  5. relation double entre deux tables
    Par thibautche dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/05/2005, 11h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo