Bonjour à tous,
Je souhaiterais avoir un conseil pour partir sur le meilleur schéma possible pout ma base MySQL.
J'ai une table user qui contient les différents utilisateurs de ma base. Je dois créer un lien user / user, par exemple pour dire que le user 1 est relié au user 2 par une relation x (frère / soeur, parent, marie / femme, ...).
J'hésite entre créer une table user_relation (ID, TYPE_RELATION, ID_USER1, ID_USER2) dans laquelle je mettrais :
- Soit 1 ligne pour chaque relation :1, 'PARENT', 1, 2
- Soit 2 lignes pour chaque relation : 1, 'PARENT', 1, 2 et 1, 'PARENT', 2, 1
La 2ème solution me permettant de ne pas mettre de clause OR dans ma requête quand je vais rechercher les différentes relation d'un user :
- Requete 1 : SELECT * FROM user_relation WHERE id_user1 = 1 OR id_user2 = 1
- Requête 2 : SELECT * FROM user_relation WHERE id_user1 = 1
Ma table risquant très rapidement de contenir énormément de données, je pensais qu'un OR est relativement couteux dans ma requête.
Cependant, la 2ème solution va doubler le nombre de données en base, et je ne sais pas si c'est tellement mieux.
Une 3 ème solution beaucoup moins propre consisterait à ajouter des champs relation_parent, relation_freresoeur et relation_marifemme dans ma table user, et avoir quelque chose comme :
id_user : 1
nom : 'AAAA'
prenom : 'SSSS'
...
relation_freresoeur : '-1--2-'
...
Ceci me permettant de ne pas avoir des tas de données dans une table a coté. Mais je ne suis pas sur que ce soit terrible.
Avez-vous des conseils ? Quels est la meilleure des 3 solutions selon vous ?
Si vous avez une autre proposition je suis également preneur !
Merci d'avance et bonne journée à tous !
Partager