Comment représenter la multiplicité (cardinalité) n-n ?

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je me pose une question concernant les multiplicité qu'on trouve dans les diagrammes de classe ou ceux représentant une base de donnée. Concrètement, comment peut-on représenter une relation N-N ?

Par exemple, imaginons la relation "Personne <—> Personne". Une personne est amie avec N personne. Comment cela se passerait en base de données pour connaître l'ensemble des amis de X ?

Dans la table users, je vois mal un champ "friends" contenant une liste d'id séparés par une virgule ou que sais-je.

Je vous remercie d'avance :)

+0 -0
Auteur du sujet

Du coup, on aura 5000 lignes si j'ai 5000 amis ? C'est pas un peu énorme ?

J'imagine qu'on peut optimiser avec une contrainte d'unicité sur les deux champs ensembles (ou quelque chose du genre) pour éviter les

id | id

2 | 3

3 | 2

4 | 3

3 | 4

Édité par Mourad_Akandouch

+0 -0
Staff

Cette réponse a aidé l'auteur du sujet

C'est pas énorme, les SGBD savent parfaitement gérer ça.

Par contre pour que ça fonctionne correctement, il faut que :

  1. Les 2 champs ensemble soient une clé primaire (donc chaque paire est unique, sachant que (A, B) ≠ (B, A)).
  2. Il y a une contrainte de clé étrangère entre chaque colonne et l'ID correspondant dans la table ciblée.

Attention à ton exemple, il ne contient pas de doublon ! Si la relation est « est ami » :

  • (A, B) signifie « A est ami avec B » (mais pas l'inverse)
  • (B, A) signifie « B est ami avec A » (mais pas l'inverse)

La notion d'amitié est un mauvais exemple parce qu'elle est généralement réciproque, ce qui n'est pas le cas d'une relation N..M en général.

Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte