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

Développement SQL Server Discussion :

MetaModel et filtre


Sujet :

Développement SQL Server

  1. #1
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut MetaModel et filtre
    Salut à tous,

    Je viens de mettre en place l’excellent article de SQLPro, sur La technique des métadonnées http://sqlpro.developpez.com/cours/m...n/metadonnees/

    L'article se termine par requête pour faire l'interrogation du model

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT *
    FROM   TR_PROSPECT_PRP PRP
           LEFT OUTER JOIN T_DONNEE_DON DON
                ON PRP.PRP_ID = DON.CRE_LIGNE
    WHERE  DON.TBL_ID = 44            -- lien pour la table TR_PROSPECT_PRP
      AND  DON.CAR_ID = 123           -- lien pour une caractéristique donnée, par exemple 'CHIFFRE D''AFFAIRE'
      AND  CRE.CRE_VALEUR = valeur 1  -- valeur demandée pour la caractéristique sus mentionnée
      AND  DON.CAR_ID = 475
      AND  CRE.CRE_VALEUR = valeur 2
      AND  DON.CAR_ID = 74
      AND  CRE.CRE_VALEUR = valeur 3
      AND  DON.CAR_ID = 7
      AND  CRE.CRE_VALEUR = valeur 4
    Je voudrais essayer de mettre en place cette requête de manière dynamique un peu comme un filtre que l'utilisateur pourrait configuré (à la manière de TFS)

    Nom : Sans titre.jpg
Affichages : 132
Taille : 34,9 Ko

    Comment me conseilleriez vous de faire ?

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Il faut travailler avec du SQL dynamique.
    En gros construisez les jointures et la clause WHERE en fonction des cases cochées.

    NOTA : aujourd'hui je récrirais cet article en utilisant du XML et non plus des tables de méta données. En effet, avec un SGBDR comme SQL Server dont le XML est "miseajourable" et indexable, cela devient facile de faire un méta modèle super light ! (et en plus performant...)

    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/ * * * * *

  3. #3
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Si c'est l'auteur qui répond c'est encore mieux
    Merci pour l'information !

    La seule modification que j'ai apporté à votre modèle est de passer en CRE_VALEUR en sql_variant , comme vous l'aviez conseillé dans un autre post.

    Par la même occasion, si j'utilise du SQL dynamique, je suppose que le plus simple est de caster le type de la valeur en construisant la requête ?

    Concernant le fichier XML , je ne pense pas l'utiliser (peut être à tord) vu que ma table DONNEES fait à l'heure actuelle 2 Go

  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 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par rvzip64 Voir le message
    La seule modification que j'ai apporté à votre modèle est de passer en CRE_VALEUR en sql_variant , comme vous l'aviez conseillé dans un autre post.
    Il y a des avantages et des inconvénients...

    Par la même occasion, si j'utilise du SQL dynamique, je suppose que le plus simple est de caster le type de la valeur en construisant la requête ?
    C'est préférable.

    Concernant le fichier XML , je ne pense pas l'utiliser (peut être à tord) vu que ma table DONNEES fait à l'heure actuelle 2 Go
    Tort (de tortueux) et non pas tord (de tordre). Mais peut être êtes vous tordu ? !!!
    Et alors ? Avez-vous essayé ?
    Pour ma part aujourd'hui je n'utilise plus que le XML dans ce genre de cas (plus efficace).

    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
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Tort (de tortueux) et non pas tord (de tordre). Mais peut être êtes vous tordu ? !!!


    Et alors ? Avez-vous essayé ?
    Pour ma part aujourd'hui je n'utilise plus que le XML dans ce genre de cas (plus efficace).
    Absolument pas !
    Par simple curiosité, quel est la taille de votre plus gros fichier XML ?

  6. #6
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Par le plus grand des hasards, y a pas déjà des librairies qui permettent de faire ça ?

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Je pense qu'il y a méprise.

    A mon avis, ne parle pas d'un fichier XML pour contenir vos données, mais bien d'une colonne de type XML contenant les propriétés supplémentaires.

    Pas besoin de librairies, vous pouvez manipuler le contenu de ces colonnes directement dans vos requêtes.

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Jetez un coup d’œil la dessus :
    http://blog.developpez.com/sqlpro/p1...vec-sql-server
    Il va falloir que j'écrive un article sur ce sujet !

    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/ * * * * *

  9. #9
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Ah oui en effet, ça risque de changer pas mal de chose.
    Je vais regarder ça

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 736
    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 736
    Points : 52 447
    Points
    52 447
    Billets dans le blog
    5
    Par défaut
    Voici un exemple complet, qui peut servir de point de départ :

    1 - La table avec une colonne de méta données XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE T_PERSONNE_PRS
    (PRS_ID           INT IDENTITY PRIMARY KEY,
     PRS_NOM          CHAR(32) NOT NULL,
     PRS_PRENOM_USUEL VARCHAR(25) NOT NULL,
     PRS_DATA         XML);
    GO
    2 - les données du test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    INSERT INTO T_PERSONNE_PRS
    VALUES
    ('DUPONT', 'Marc',
    N'
    <data>
       <date_de_naissance datatype="date">2001-01-12</date_de_naissance>
       <sexe datatype="char(5)">homme</sexe>
       <date_de_deces datatype="date">2014-07-18</date_de_deces>
    </data>'),
    ('MARTIN', 'Élise',
    N'
    <data>
       <date_de_naissance datatype="date">1988-06-07</date_de_naissance>
       <sexe datatype="char(5)">femme</sexe>
       <telephone_fixe datatype="varchar(20)">0622441189</telephone_fixe>
    </data>');
    GO
    Deux personnes sont insérées avec des métadonnées différentes.

    3 - La requête magique, qui extrait toutes les méta données d'un seul coup avec affichage du type !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT X.PRS_ID, PRS_NOM, PRS_PRENOM_USUEL,  
           Txml.XMLdata.value('fn:local-name(.)', 'NVARCHAR(256)') AS BALISE,
           Txml.XMLdata.value('.', 'NVARCHAR(256)') AS VALEUR,
           Txml.XMLdata.value('@datatype', 'NVARCHAR(256)') AS TYPE
    FROM   T_PERSONNE_PRS AS X
           OUTER APPLY X.PRS_DATA.nodes('data/*') AS Txml(XMLdata);
    Resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PRS_ID   PRS_NOM    PRS_PRENOM_USUEL  BALISE              VALEUR          TYPE
    -------- ---------- ----------------- ------------------- --------------- ----------
    3        DUPONT     Marc              date_de_naissance   2001-01-12      date
    3        DUPONT     Marc              sexe                homme           char(5)
    3        DUPONT     Marc              date_de_deces       2014-07-18      date
    4        MARTIN     Élise             date_de_naissance   1988-06-07      date
    4        MARTIN     Élise             sexe                femme           char(5)
    4        MARTIN     Élise             telephone_fixe      0622441189      varchar(20)
    Il ne vous reste plus qu'à :
    1) indexer le XML
    2) faire de la requête finale une vue
    3) implémenter la méthode modify sur le XML si vous voulez le modifier (ajout ou suppression d'un noeud, ou modification de la valeur dans un noeud existant).

    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/ * * * * *

Discussions similaires

  1. Algorithme d'un filtre ?
    Par Vince78 dans le forum Algorithmes et structures de données
    Réponses: 17
    Dernier message: 04/09/2002, 16h54
  2. recherche filtre flou gaussien
    Par gimlithedwarf dans le forum Langage
    Réponses: 4
    Dernier message: 01/08/2002, 23h32
  3. TADOTable et filtre
    Par GaL dans le forum C++Builder
    Réponses: 16
    Dernier message: 02/07/2002, 17h52
  4. Filtre passe Bande
    Par Mau dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 28/06/2002, 18h03
  5. Probleme de filtre dans bdd
    Par scorpiwolf dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2002, 11h43

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