IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Optimisations SGBD Discussion :

Paramètres à valeurs multiples


Sujet :

Optimisations SGBD

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Paramètres à valeurs multiples
    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 ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Mon problème ne semble pas vous inspirer...

    Petit complément :
    sur les 136 paramètres différents, 76 ont un seul élément valorisé et donc 60 sont en fait des tableaux de valeurs.

    J'ai aussi détecté des cas de paramètres qui ne sont présents qu'avec une seule valeur pour tous les indicateurs qui sont concernés. Ceux-ci correspondent par exemple au choix de l'utilisateur de cocher une case sur l'interface du logiciel, ce qui influe sur la représentation et/ou le traitement de l'indicateur. J'ai par exemple le parametre "hecritvaleur" qui concerne 9 indicateurs et qui est systématiquement à la valeur "on". Logiquement, ce type d'indicateur pourrait être une colonne de ma table, de type binaire avec valeur par défaut 0. Mais ajouter des colonnes à la table va à force l'alourdir, donc les traitements qui vont avec. De plus, certains paramètres ne concernent que peu d'indicateurs, comme on le voit dans l'exemple ci-dessus (9 indicateurs sur 2107).

    Bref, j'hésite toujours entre :
    - Laisser mon modèle tel quel et garder partiellement le système existant avec la fonction explode pour tous les paramètres multi-valeurs ;
    - Normaliser un peu plus, mais je ne sais toujours pas comment.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Suite de mes aventures...
    Depuis le précédent message datant du mois d'avril, j'ai provisoirement adopté le schéma suivant :
    Indicateurs -0,n----Paramétrer----0,n- Parametres

    Ce qui donne :
    Indicateurs(IndIndex, ...)
    Parametres(ParIndex, ParNom, ParDescription, ParValeurDéfaut)
    ParInd(ParIndIndicateur, ParIndParametre, ParIndValeur)

    Et j'ai importé les valeurs brutes dans ParInd, ce qui veut dire que certaines 'ParIndValeurs' sont en fait des tableaux de valeurs dont voici un exemple : 'm--on--c--on--d--on'

    Dans l'état actuel, PArInd contient 169200 lignes.

    Si je relance le sujet aujourd'hui, c'est que depuis avril je suis passé à l'adaptation des programmes PHP à ma nouvelle base de données et que j'approche à grand pas du moment où je vais être confronté à ces fameux indicateurs.

    J'ai posé la question à mon professeur tuteur pour le mémoire d'ingénieur que je prépare. Il se trouve que c'était mon prof de base de données durant le cursus CNAM.

    Il m'a répondu que je pouvais laisser le schéma comme ça si l'utilisation n'est pas fréquente car les enjeux en matière de gains de performance sur l'application ne se situent pas à ce niveau là.

    Qu'en pensez-vous ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 759
    Points : 52 540
    Points
    52 540
    Billets dans le blog
    5
    Par défaut
    Solution de facilité : modélisation par méta données.
    Solution générale : modéliser le tout.

    Pour 1) lire l'article que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/m...n/metadonnees/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Merci pour la réponse.
    J'avais déjà vu cet article... après avoir fait mon modèle de données !
    J'avais trouvé l'approche intéressante et peut-être applicable à une partie de mes bases de données, mais quand même assez déroutante et quelque peu extrémiste, ceci dit sans vouloir vous offenser.

    Je verrai le moment venu si c'est utile pour le cas qui me préoccupe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [2.2.0] Paramètre à valeurs multiples ?
    Par lazarel dans le forum BIRT
    Réponses: 25
    Dernier message: 26/06/2008, 10h39
  2. [SQL2K5] Procédure stockée avec paramètre à valeurs multiple
    Par Jinroh77 dans le forum Développement
    Réponses: 1
    Dernier message: 16/05/2008, 17h31
  3. Encodage URL dynamique avec des paramètres à valeurs multiples
    Par lazarel dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 12/03/2008, 16h35
  4. [8.5] Imprimer un paramètre à valeurs multiples
    Par s_guiraud_fr dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 30/05/2007, 17h08
  5. [CR8] Champs de paramètres à valeurs multiples
    Par Nout dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/02/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo