Le soucis n'est pas d'avoir 30 tables (les BdD c'est fait pour çà) mais c'est d'avoir dans ces tables de nombreuses clefs étrangères qui sont mutuellement exclusives.
Ça me donne une impression de bricolage ...
En fait, en reprenant ma question, j'aurais deux Pb a gérer :
Une hiérarchie d'objets qui ne serait pas figée.
et
Un lien entre des type d'objets qui évolue selon la hierachie.
La solution serait peut être un arbre intervallaire (cf article sur le site) pour gérer la hiérarchie d'objets et la solution de 'Maljuna Kris' pour les liens entre objets.
Ca donnerait alors :
1 2 3 4 5 6 7 8
| CREATE TABLE InfraTelCo.Baie
( IdBaie INT( 6 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
. . .
IdLocal INT( 6 ) UNSIGNED NOT NULL ,
Avec les données spécifiques à l'objet (ici 'Baie')
. . .
PRIMARY KEY ( IdBaie )
) ENGINE = MYISAM ; |
et
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE TABLE InfraTelCo.Local
( IdLocal INT( 6 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
CptDroitLocal INT( 6 ) UNSIGNED DEFAULT '0' NOT NULL,
CptGaucheLocal INT( 6 ) UNSIGNED DEFAULT '0' NOT NULL,
ProfondLocal INT( 6 ) UNSIGNED DEFAULT '1' NOT NULL,
Pour gérer l'arbre intervallaire
. . .
IdObjetLocal INT( 6 ) UNSIGNED NOT NULL ,
TypeObjetLocal ENUM ( 'Site', 'Salle', 'Travée', ...)
Pour connaître quelle table interroger
. . .
PRIMARY KEY ( IdLocal )
) ENGINE = MYISAM ; |
Il me reste un inconvénient : c'est que je ne peut pas avoir toutes les données en un seul SELECT car le choix de la table à interroger depuis la table 'Local' impose un traitement pour construire la requête.
Peut être avec une procédure stockée ? Mais là j'ai jamais fait ...
D'autres idées ???
Partager