Hey,
Je bosse actuellement sur un petit projet et réalise donc quelques diagrammes pour la conception de la base de données, mais je bloque un peu sur un morceau en particulier.
Pour simplifier puisque c'est seulement un morceau de la base (légende : les tables sont entre _Underscores_, et les idées transmises par certaines relations 'entre single quotes'.)
- Un _Utilisateur_ a un 'avis' sur un _Element_.
- Cet 'avis' est un choix parmi une liste d'_Avis_, chacun ayant un certain nombre d'infos fixes complémentaires (d'où la nécessité d'une table _Avis_).
- Ayant besoin de la date à laquelle 'l'avis' a été mis pour une analyse temporelle, j'utilise une table _aPourAvis_ avec un champ date (entre autres).
On a donc, de ce côté là de la base, une triple relation _Utilisateur_, _Element_ et _Avis_, reliée par la table _aPourAvis_.
Cardinalités : Un _Utilisateur_ peut avoir (0,N) relations d'avis. Un _Avis_ peut correspondre à (0,N) relations, et un élément peut être jugé par (0,N) relations. Une relation _aPourAvis_ a une cardinalité de (1,1) envers les 3 autres tables.
Maintenant, de l'autre côté de la base, j'utilise une structure similaire mais beaucoup plus simple : un _Evenement_ est jugé par un _Avis_ (donc relation directe entre les deux _Evenement_ (0,1) <--> (0,N) _Avis_). Un _Avis_ est totalement identique à celui de la partie précédente ; mais, et c'est là que mon problème arrive, les "titres" des avis sont différents pour cette relation. J'ai les mêmes équivalences : l'élément 1 a, dans les deux cas, tous ses champs identiques (je me sers de valeurs stockées dans les _Avis_ pour faire des graphes), seul son champ "titre" est différent (par exemple, un _Avis_ positif de niveau 1 signifiera "Gentil" dans la première relation et "Utile" dans la seconde, puisqu'on ne traite pas de mêmes types d'éléments (c'est un exemple)).
Du coup, il est stupide de faire deux tables équivalentes à la table _Avis_ pour ces deux relations. Mais, du coup, je suis bloqué par ce problème de noms stockés dans la table. Je ne peux pas les délocaliser de la table pour les utiliser 'en dur' dans mes vues, puisque je vais avoir besoin de les réutiliser très souvent ; il faut donc que ces noms soient stockés dans le modèle.
Existe-t-il un patron de conception qui permet de résoudre typiquement cette situation ?
Désolé si la solution paraît simplissime, mais je bosse sur cette base gargantuesque depuis trop longtemps pour avoir du recul pour des solutions simples, je crois
Merci.