Dilème sur la structure d'une base de donnée

Fermé
marcmendez Messages postés 17 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 18 août 2009 - 9 mai 2008 à 18:16
marcmendez Messages postés 17 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 18 août 2009 - 9 mai 2008 à 20:43
Bonjour,

Voila l'exemple :

Une table A avec une clef primaire constituée d'une seule colonne : a_id
Une table B, avec un clef primaire constituée d'une seule colonne : b_id

J'ai une relation n-n entre ces deux tables : j'ai donc une table intermédiaire dont la clef primaire est constituée des 2 clefs étrangères vers A et B.

L'exemple est simple, mais il se complique lorsque la table intermédiaire est aussi utilisée dans une autre table et ainsi de suite...
Moralité : je me retrouve avec des clefs primaire composées à tiroir !

Est-il "acceptable" de concevoir sur ma table intermédiaire :

- un index unique constitué des deux clefs étrangères vers A et B
- une clef primaire d'une seule colonne (auto incrémentée) que je référencerai donc lorsque j'utiliserai cette table dans d'autres tables.

J'hésite entre les deux choix :
- le premier me permet de retrouver directement les informations des tables A ou B, puisque la clef composée les contient. Par contre, vu la structure de mes données, je vais me retrouver avec des clefs primaires à 4 voire 5 composantes !
- le deuxième est plus simple, mais dès que je dois retrouver un info dans les tables, il faut que je "remonte" la pelote de laine pour retrouver les clefs primaires....


Args, je craque !

1 réponse

macgawel Messages postés 664 Date d'inscription mercredi 7 mai 2008 Statut Membre Dernière intervention 1 novembre 2008 89
9 mai 2008 à 19:13
Bonjour.

- Si tu as beaucoup de relations N-N dans ton schéma, c'est peut-être parce qu'il faut le revoir.
Avant de te lancer dans des "bidouillages", ça pourrait être une bonne idée de réfléchir à ton modèle.

Sur l'acceptabilité, tout dépend de ce que tu fais...
Ce n'est pas acceptable si tu veux rester dans les clous (BDD normalisée).
En pratique (entre autres pour des raisons de performances) on "dénormalise" souvent un minimum.
Et ça dépend aussi de la taille et de l'utilisation de ta BDD (si c'est une petite base à usage local, on n'a pas les mêmes contraintes que pour une base professionnelle)

donc ton idée de rajouter une clé dans ta table de liaison peut être intéressante, sous réserve.
0
marcmendez Messages postés 17 Date d'inscription mardi 25 décembre 2007 Statut Membre Dernière intervention 18 août 2009
9 mai 2008 à 20:43
C'est "peut-être" parce que je suis "justement" en train, non pas de reprendre, mais de concevoir la base que je me pose la question..... ;)

Afin d'éviter les erreurs de conception de la version précédente réalisée "à l'arrache" par qq'un d'autre, je suis en train de commencer à réfléchir à l'analyse (qui n'a jamais été faite et en tout cas, pas ou peu validée...) , bref, tout ce qu'il ne faut pas faire... mais la personne a de très grosses circonstances atténuantes, et je ne lui en ferai pas les reproches.
Mais c'est une autre histoire.

Pour précision, ce n'est pas que j'ai beaucoup de relation N-N, mais il se trouve que le "coeur" de la structure est basée sur une table intermédiaire... Donc je vais partir déjà avec une clef primaire de 2 colonnes. Et je crains, ce qui serait normal ou en tout cas illusoire de penser le contraire, qu'il y ait d'autres tables intermédiaires qui viennent "récupérer" cette clef en plus, donc augmenter le nombre de colonnes.

L'application est locale (MySql + PHP). La version actuelle de la base doit contenir moins de 100 tables pour 15 à 30 utilisateurs. Mais elle est très incomplète et je pense que je n'aurai pas à pousser beaucoup pour exploser cette limite.

Quant à la dénormalisation, je n'en serai pas à ma première !

Les 2 propositions que j'ai faite ont autant d'avantage que d'inconvénient, pour l'instant, à mes yeux. Je cherche simplement à voir si l'un ou l'autre pourrait, après examen d'autres personnes, la chance de remporter le "coquetier" !
Moi, j'ai le nez dans mon MCD depuis un peu trop longtemps, et cet aspect n'est qu'un partie de l'iceberg. Pourtant, c'est une partie importante sur lequelle reposera toute l'application et je n'aimerais pas partir avec des roues... carrées !
0