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écisions SGBD Discussion :

Stocker une requête SQL dans une table


Sujet :

Décisions SGBD

  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut Stocker une requête SQL dans une table
    Bonjour,

    Je voudrais savoir s'il est risqué de stocker des requêtes SQL dans une table ? Si oui, pourquoi (si possible) ?

    Merci d'avance,

    Marc

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 228
    Billets dans le blog
    25
    Par défaut
    Disons que c'est exactement ce que fait le sgbdr lui-même pour ses objets compilés...

    La question, c'est plutôt pourquoi ? Si c'est pour de la réutilisation, autant faire de la procédure stockée ou des vues.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut
    C'est pour une application PHP/MySQL.

    Pour l'utilisation : c'est assez compliqué (je pense), mais je vais essayer de simplifier la situation.

    Disont que j'ai une table d'utilisateurs, répartis dans plusieurs groupes. Chaque utilisateur a un poste (exemples : chef du "groupe père", chef du groupe, chef second, technicien, comptable, simple membre du groupe...). J'ai une table avec les différents postes répertoriés.
    Des groupes peuvent etre "chef" d'autres groupes (j'ai donc un champ "groupe père" dans ma table groupe). J'ai une autre table avec différents "chemins" que les informations doivent suivre. Cette table a 3 champs : "type" du chemin, numéro de l'étape, poste (de la personne à laquelle on doit transmettre l'information).
    Voilà le minimum pour comprendre je pense.

    Voici maintenant un exemple pour illustrer ce que je veux faire :
    Un membre à une information, il veut la faire circuler. Suivant le "type" d'information (qu'il aura choisit), l'information ne va passer par les mêmes personnes dans le groupe. On a donc une information, un type d'information, et pour savoir à qui on doit transmettre cette information, on accède à la table "chemins". A partir de l'information, de l'étape en cours (que l'on peut trouver à partir de l'information), et du type d'information, je peux le "poste" de la persone à contacter. Mon probème est : trouver l'utilisateur qui correspond à ce poste dans le groupe.
    Ce que je ne veux pas faire : coder en "dur" un truc du genre "switch(poste){case "chef" : .... case "technicien"...}". Je pensais donc rajouter un champ "requete" à ma table "postes" dans laquelle je stockerai la requête pour trouver l'utilisateur. Au moment de trouver l'information pour trouver l'utilisateur à qui l'information doit être transmise, je chargerais la requête correspondant au "poste" de de l'étape ma table "chemins" et l'éxécuterai, pour trouver l'utilisateur.

    Si certains points ne sont pas clair, dites-le moi, j'essayerai de mieux les expliquer.

    Merci d'avance.

  4. #4
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut
    Salut,

    Je crois que le gros block fait peur à des gens... Pas de réponses ???

    Ce que je veux savoir :
    Est-il dangereux de stocker dans le champ d'une table, un truc du genre :
    "SELECT id_usr FROM user WHERE gr_user='".$gr."';"

    Merci pour vos réponses.

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Par défaut Exemple
    Un bon exemple valant toujours mieux qu'un long discours, je te suggère de nous donner plutôt un exemple de
    • la définition de tes tables en entrée,
    • un échantillon des données qu'elles contiennent,
    • les colonnes a rapprocher entre les tables en entrée
    • la définition de la table en sortie
    • le résultat que tu veux obtenir dans cette table


    Egalement, expliquer ce qu'il y aurait de dangereux là-dedans...

  6. #6
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut
    Salut,

    Merci d'avoir répondu.
    Alors, j'essaye de gérer un workflow.

    Quelques tables et exemples de contenu.
    J'ai enlevé les tables de droits, contenu des demandes d'investissements, validation et demandes d'informations complémentaires qui ne nous interressent pas dans ce cas.

    groupes :
    - id_gr (PK)
    - id_resp
    - id_gr_pere
    Exemples :
    100 S1 NULL
    101 R1 100
    102 R2 100
    150 I1 NULL
    170 D1 NULL

    utilisateurs :
    - id_user (PK)
    - id_gr (FK[groupes] PK)
    - id_cat (FK[categories])
    Exemples :
    S1 100 SUP
    R1 101 RESP
    I1 150 INFO
    I2 150 INFO
    D1 170 DIR
    U10 101 USR
    U11 101 USR
    U20 102 USR
    U21 102 USR

    categories :
    - id_cat (PK)
    Exemples :
    RESP
    INFO
    DIR
    USR

    demandes_invest :
    - id_dde_inv (PK)
    - id_user (FK[utilisateurs])
    - id_gr (FK[utilisateurs])
    - id_nature (FK[natures])
    - etape_en_cours
    Exemples :
    001 U1 101 INF 1

    natures :
    - id_nature (PK)
    Exemples :
    INF
    MAT

    workflow :
    - id_nature (FK[natures] PK)
    - id_etape (PK)
    - id_cat (FK[categories])
    Exemples :
    INF 1 RESP
    INF 2 SUP
    INF 3 INFO
    INF 4 DIR
    MAT 1 RESP
    MAT 2 SUP
    MAT 3 DIR

    Alors :

    Nous avons différents groupes, certains groupes on un groupe au dessus d'eux.

    Nous avons des utilisateurs qui appartiennent à différentes catégories (RESP pour responsable d'un groupe, SUP pour responsable d'un groupe qui "domine" d'autres groupes, INFO pour un informaticien, USR pour les utilisateurs, DIR pour la direction...). Les utilisateurs sont ratachés à un groupe. id_gr est clé primaire, car il y a quelques rares doublons dans les id_user...
    Suivant la catégorie de l'utilisateur, il n'a pas les mêmes droits (table non représentée).

    Un utilisateur peut émettre une demande d'investissement. Cette demande d'investissement est donc rattachée à cet utilisateur. Les demandes d'investissement ont une nature (ici INF pour informatique, et MAT pour du matériel).

    Suivant la nature de la DI (demande d'investissement), le cheminement n'est pas le même :
    Pour des DI INF : la DI va passer par le RESP, puis SUP, puis INFO, puis DIR.
    Pour des DI MAT : la DI va passer par le RESP, puis SUP et DIR.



    Mon problème est de trouver une requête qui me dira que pour la DI 001 (crée par U1 dans le groupe 101, de nature INF et en est à l'étape 1 ) :
    - devra aller chez R1 (qui est le RESP de 101)
    Ca c'est simple, mais le problème, c'est que cette même requête devrait me dire que pour l'étape 2 elle doit allez chez S1 (qui est le SUP de 101), pour l'étape 3 I1 ou I2 (qui sont les informaticiens : INFO), et D1 (qui est la direction : DIR).

    Il est possible de changer mon modèle de données.



    Pour expliquer ce qu'il y a de dangeureux la dedans : je n'en sais rien, c'est ce que je demande ! Je demande si ce serais une "faille" de stocker une requête dans une table.


    Si je ne suis pas clair, dites le moi.

    Merci.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 021
    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 : 22 021
    Billets dans le blog
    6
    Par défaut
    Je demande si ce serais une "faille" de stocker une requête dans une table.
    Ce n'est pas de cette manière là qu'il faut raisonner.

    Si l'on peut faire cela uniquement par la modélisation, alors ce sera toujours mieux.

    Si le modèle est difficile à monter (par exemple schéma ayant des changements très fréquents) alors stocker des requêtes dans des tables contitut un pis aller acceptable.

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

  8. #8
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 13
    Par défaut
    Ok,
    merci.

    ++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/12/2011, 11h07
  2. erreur dans une requête sql dans une fonction php
    Par frboyer dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2009, 14h37
  3. Comment stocker une requête sql dans une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/10/2006, 11h01

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