Dans la base actuelle, la table 'indicateurs' comporte une colonne 'indiparametres' qui stocke les paramètres de l'indicateur selon le format suivant :
[nomParametre1]##[valeurs1]#@#[nomParametre2]##[valeurs2]#@#...
[valeursX] peut lui-même contenir plusieurs informations en quantité variable et a la forme :
[élément1]--[valeur1]--[élément2]--[valeur2]--...
Exemple : hlongueurlegendecouche##c--0--m--#@#hnompolice##d--ariali--m--#@#htaillepolicecouche##d--12--m--#@#...
L'exploitation de ce machin compliqué est fait grâce aux fonctions 'implode' et 'explode' de PHP et ça fonctionne.
Comme je normalise la base de données, je cherche un moyen de rationaliser l'enregistrement des paramètres.
J'ai extrait dans une table provisoire, grâce à un programme PHP, les triplets (indiind, parametre, valeurs) ou 'indiind' est le numéro de l'indicateur dans la table 'indicateurs'. Ca me donne :
- 136 indicateurs différents ;
- plus de 176 mille lignes (indiind, parametre, valeurs) ;
- 2107 indicateurs distincts ;
- près de 30 mille (parametre, valeurs) distincts.
Dans le système actuel, les paramètres par défaut proposés par le logiciel sont enregistrés avec chaque indicateur créé. Il y a donc redondance à chaque fois que ces paramètres par défaut ne sont pas modifiés, ce qui explique en partie la différence entre les 176 milliers de lignes de ma table et la trentaine de milliers de couples (parametre, valeurs) différents.
L'idée de base que j'ai eue pour normaliser l'enregistrement des paramètres est le système suivant :
- Une table parametres(ParIndex, ParNom, ParDescription, ParValeurDefaut)
- Une table de jointure avec la table 'indicateur', ParInd(ParIndParametre, ParIndIndicateur, ParIndValeur) qui n'enregistrerait que les paramètres modifiés par l'utilisateur.
Là où je coince un peu, c'est pour la modélisation des valeurs multiples pour un paramètre. Dans l'exemple donné plus haut, le paramètre 'hlongueurlegendecouche' comprend une valeur '0' pour l'élément 'c' et aucune valeur pour l'élément 'm'. Cependant, il pourrait y avoir d'autres éléments ou un seul.
Schématiquement, j'ai en quelque sorte la relation ParInd qui est composée ou pas d'un ou plusieurs éléments valués. Et faire partir une composition d'une relation, c'est pas bon il me semble ?
Résumons...
Pour le moment j'ai :
Indicateurs -1,n----ParInd----0,n- Parametres
qui donne :
- Indicateurs(IndIndex,...)
- Parametres(ParIndex, ...)
- ParInd(ParIndParametre, ParIndIndicateur, ParIndValeur)
Si je dois éclater 'ParIndValeur', je pourrais faire :
- ParInd(ParIndParametre, ParIndIndicateur, ParIndElement, ParIndValeur)
Mais dans ce cas j'aurai plusieurs lignes de ParInd pour un seul couple(Indicateur, Parametre). Est-ce correct ou peut-on faire mieux ?
Partager