Bonjour,
Je suis actuellement en train de développer un logiciel Client VoIP.
Le principe sera simple, un peu comme Skype : Un utilisateur pourra avoir d'autres utilisateurs en contacts pour parler avec.
J'aurais besoin d'aide pour savoir quelle serait la bonne conception de tables dans ma base de données.
J'ai comme idée de faire une première table "Utilisateur" qui contiendra un id_utilisateur, un pseudo, un statut, etc..
Là où je coince c'est concernant la deuxième table. Plusieurs choix sont possible mais je n'arrive pas à savoir lequel serait le mieux ou s’il existe une meilleure solution que je n'ai pas encore trouvée.
Je voudrais créer une table Contact pour mettre en relation deux utilisateurs.
Du coup, je pense avoir deux options,
La première :
- une clé primaire id, une clé étrangère qui sera l'id_utilisateur de l'utilisateur qui demande l'ajout en contact, une clé étrangère qui sera l'id_utilisateur de la personne invité en contact, un booléen is_accepted pour savoir si l'invitation a était acceptée.
La deuxième :
- une clé étrangère qui sera l'id_utilisateur de l'utilisateur qui demande l'ajout en contact, une clé étrangère qui sera l'id_utilisateur de la personne invité en contact (ces deux clés seront alors mises en clé primaire de la table), un booléen is_accepted pour savoir si l'invitation a était acceptée.
Dans le premier cas, le fait d'avoir un id en clé primaire pour la ligne, je pourrais me retrouver avec des doublons.
Par exemple : dans le cas où l'id_utilisateur 5 est en contact avec l'id_utilisateur 4 et un peu plus loin dans la base de données l'id_utilisateur 4 sera en contact avec l'id_utilisateur 5.
Pour contrer ce problème j'ai pensé à la deuxième solution, qui est de mettre les deux clés étrangères en clé primaire. Mais, je ne suis pas sure que ça corrigera le problème.
Est-ce que le fait de mettre les deux clé étrangère en clé primaire évitera le doublon ?
Si la réponse est non, existe-il une solution au niveau conception des tables de la base de données ?
J'espère avoir été claire dans mes explications et mes questions.
Merci pour votre temps
Partager