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

Langage SQL Discussion :

Repérer des clés primaires dans une vue disponible en lecture/écriture


Sujet :

Langage SQL

  1. #1
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut Repérer des clés primaires dans une vue disponible en lecture/écriture
    Bonjour,

    Dans le cadre du développement d'un petit outil de mapping O/R, j'ai une question un peu générale, dont la réponse m'intéresse pour tous les SGBD courants :

    Partant du principe que j'ai les droits pour inspecter (si besoin) le schéma du SGBD, je voudrais savoir quel genre de code je peux produire pour :

    • déterminer si une vue (requête) est en lecture seule
    • si une requête est disponible en lecture/écriture, déterminer si parmis ses colonnes affichées, il se trouve des clés primaires (complètes) et à quelle table(s) ces clés appartiennent.


    Toute solution m'intéresse, qu'il sagisse de parser le SQl ou récupérer directement des infos de schéma, pourvu que cela soit faisable par du code.

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    En SQL, tout va dépendre des vues que le SGBD mets à ta dispositions.
    Il n'y a pas selon moi de solution magique.

    Je pense que le plus simple serait de confier cette inspection non pas au SGBD mais plutot aux outils que tu utilises pour y accéder. ADO, ADO.NET par exemple

  3. #3
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Bon disons ADO.NET alors.

    J'ai l'impression que je vais devoir parser le SQL des vues...

    Pour détecter les clés et leur tables, il me faut un algo récupérant les colonnes et leur tables (ensuite je compare ça avec les infos de schéma).

    Pour déterminer si une vue est en lecture seule, ça me parait + compliqué. Il faudrait que je détecte des mots clés type comme "GROUP BY" ou que j'analyse les jointures... Ca me parait chaud de faire ça pour plusieurs SGBD.

    Pour le parsing est-ce que c'est faisable au moins en définissant un code suffisament générique pour être réutilisé ?

    Au minimum, (indépendanment des dialectes) quelles sont les règles universelles qui pourraient me permettre de déterminer le statut "lecture seule" ?

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    J'ai l'impression que je vais devoir parser le SQL des vues...
    Là encore, ça va être compliqué, chaque sgbd implémente sa propre version de la norme SQL. De plus l'imbrication de requête avec des alias sur les colonnes, etc peut t'amener au final à une vue qui n'a plus vraiment de rapport avec la table initiale. (par exemple une requête analyse croisée Access)

    Pour déterminer si une vue est en lecture seule
    Tu peux être aussi interdit en écriture tout simplement à cause de tes droits sur le SGBD

    Pour détecter les clés et leur tables
    Honnetement ça serait plus simple à partir de ton modèle ADO.NET non ? Ou bien DAO
    Si cette solution ne te satisfait pas, le dictionnaire de la base est là pour ça. Il sera plus simple d'écrire X requêtes qui vont bien pour chaque SGBD plutot que de taper un parsing impossible

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Bon je tague résolu car sur msn tu m'as suggéré une bonne idée. Récupérer mes infos avec un Datareader.

    Ca devrait le faire. Bien vu.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/08/2014, 14h00
  2. Réponses: 4
    Dernier message: 18/12/2012, 12h56
  3. Utiliser des objets SWING dans une vue RCP
    Par manuga72 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 20/10/2006, 18h26
  4. Les trous dans les clés primaires d'une base de données ?
    Par dymezac dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 27/09/2006, 10h22
  5. Comment avoir 2 clés primaires dans une table
    Par Guigui_ dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/01/2005, 09h29

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