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 :

Quelle(s) technique(s) pour l'écriture de requêtes SQL en fonction du SGBD ?


Sujet :

Décisions SGBD

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut Quelle(s) technique(s) pour l'écriture de requêtes SQL en fonction du SGBD ?
    Bonsoir,

    Je suis en cours d'étude d'une architecture pour une application J2EE. Au niveau de la couche de bonnées, je désire que l'appli soit indépendante du SGBD cible. En gros, que le SGBD soit Mysql, MSSQL, Oracle, DB2, ou autre mes requêtes devraient fonctionner à tous les coups. D'où la question : Quelle(s) technique(s) pour l'écriture de requêtes SQL en fonction du SGBD ?

    Faut-il faire une requête pour chaque SGBD à prendre en compte et ensuite sélectionner la bonne en fonction du paramétrage de l'appli ?

    Toute idée est la bienvenue.

    Merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 392
    Points
    28 392
    Par défaut
    C'est ça ou n'utiliser QUE les instructions et fonctions communes à TOUS les SGBD que tu dois pouvoir adresser.
    Dans les outils de reporting, par exemple, il est courant d'utiliser un glossaire des fonctions propres à chaque SGBD et de préparer la requête en fonction des particularités de chacun.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 037
    Points
    53 037
    Billets dans le blog
    6
    Par défaut
    non, AL24, c'est absolument pas le bonne technique. Je suis en train d'écrire un article qui montre que même un simple SELECT sans clause WHERE et sans transformation, ne peut s'écrire de la même manière sur touts les SGBDR.

    le seul moyen est de ne faire que des procédures stockées et de masquer la complexité des requêtes de chaque SGBDR dedans.

    A +

  4. #4
    Membre éprouvé Avatar de Jester
    Inscrit en
    Septembre 2003
    Messages
    813
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 813
    Points : 1 057
    Points
    1 057
    Par défaut
    Il faut faire un DAO qui fait abstraction du stockage effectif des données. Ensuite vous pouvez commencer à faire un DAO SQL quasi normatif (i.e. qui marchera un peu sur tous les SGBD que vous considérez) et ensuite un ou plusieurs DAO spécifiques utilisant des optimisations, possiblement, faire un DAO qui utilise des procédures stockées (qui serait aussi donc presque indépendant du SGBD).

    Par contre pour de la dev utiliser un DAO qui ne fait que du SQL simple permet de mieux identifier les problèmes et d'aller plus vite je trouve. Mais ça dépend de votre contexte.

  5. #5
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Merci pour vos réactions.

    Les procédures stockées me semblent une bonne idée. Mais y aurait-il un ou des inconvénients ? Par exemple, est-ce une bonne démarche, du point de vue développement, je ramener tous les traitements côtés SGBD ? En plus, que faut-il alors faire avec les SGBD ne supportant pas les procédures stockées ?

    Merci.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 037
    Points
    53 037
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par hisoft Voir le message
    Merci pour vos réactions.

    Les procédures stockées me semblent une bonne idée. Mais y aurait-il un ou des inconvénients ? Par exemple, est-ce une bonne démarche, du point de vue développement, je ramener tous les traitements côtés SGBD ? En plus, que faut-il alors faire avec les SGBD ne supportant pas les procédures stockées ?

    Merci.
    Est-ce une bonne démarche ?

    de plus les SGBDR sont bien plus pérenne que n'importe quel code... Java devait être enfin le langage universel... Que dire alors de tous ceux venus après : Php, perl, python, C#...

    Pour les SGBDR ne supportant pas les proc stock : ils sont condamnés a mort et ne peuvent supporter de charge. Par exemple Access ! Donc inutile de songer à un quelconque investissement pérenne de ce côté !

    A +

  7. #7
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    J'ai visité les liens et je vois que tu es défenseur des SGBDR. J'espère que ce n'est pas pour ça uniquement que tu me conseilles les procédures stockées . Sinon, je ne suis pas assez armé pour faire part de la discussion mais je trouve quand même que certains SGBDR s'inspirent de nouvelles fonctionnalités et spécifications (amélioration/gestion des pools de connexion, des transations, etc ...) issues du monde des frameworks pour palier certaines lacunes ou insuffisances. Pour moi, ils s'auto-complètent !

    J'espère par ailleurs lire la réaction d'un spécialiste Objet, qui lui aussi pourrait étaler ses points de vue.

    Je suis tout de même d'accord avec toi lorsque tu dis que les développeurs ne profitent pas pleinement des capacités des SGBDR les poussant souvent à se casser la tête côté métier, va savoir pourquoi ...

    A+

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Autre piste : beaucoup d'outils de mapping objet-relationnel sont multi-SGBD. Ils gèrent de manière transparente un certain nombre de spécificités des bases avec lesquelles ils dialoguent.

    Si l'ORM est une option pour toi, ça peut te simplifier la vie.

  9. #9
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Maximilian Voir le message
    Autre piste : beaucoup d'outils de mapping objet-relationnel sont multi-SGBD. Ils gèrent de manière transparente un certain nombre de spécificités des bases avec lesquelles ils dialoguent.

    Si l'ORM est une option pour toi, ça peut te simplifier la vie.
    Mon soucis principal se situe au niveau de la compatibilité des requêtes : si ce n'est que savoir si c'est un if (...,...,...) qu'il faut ou un CASE ... WHEN ... THEN ..., ou des trucs simples du genre, ça pourrait se gérer mais quand je pense aux fonctions (de dates, de chaines de caractères, de nombres, etc ...) qui existent ça et là et implémentées de diverses façons d'un SGBD à l'autre, je me demande quel(s) ORM gére(ent) cela ?

    A+

  10. #10
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par hisoft Voir le message
    Mon soucis principal se situe au niveau de la compatibilité des requêtes : si ce n'est que savoir si c'est un if (...,...,...) qu'il faut ou un CASE ... WHEN ... THEN ..., ou des trucs simples du genre, ça pourrait se gérer mais quand je pense aux fonctions (de dates, de chaines de caractères, de nombres, etc ...) qui existent ça et là et implémentées de diverses façons d'un SGBD à l'autre, je me demande quel(s) ORM gére(ent) cela ?
    Au contraire, je pense que les fonctions de dates et chaines de caractères sont mieux supportées que des choses comme les branchements conditionnels

    Un exemple avec Hibernate et HQL :

    http://docs.jboss.org/hibernate/core...ql-expressions

    Après c'est sûr que les expressions les plus complexes (requêtes récursives, fonctions OLAP...) ont peu de chances d'être gérées en agnostique.

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 874
    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 874
    Points : 53 037
    Points
    53 037
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Maximilian
    J'ai visité les liens et je vois que tu es défenseur des SGBDR. J'espère que ce n'est pas pour ça uniquement que tu me conseilles les procédures stockées . Sinon, je ne suis pas assez armé pour faire part de la discussion mais je trouve quand même que certains SGBDR s'inspirent de nouvelles fonctionnalités et spécifications (amélioration/gestion des pools de connexion, des transations, etc ...) issues du monde des frameworks pour palier certaines lacunes ou insuffisances. Pour moi, ils s'auto-complètent !
    Sauf que c'est exactement l'inverse. Les SGBDR existent maintenant depuis 30 ans, et ce sont les framework et les ORM ainsi que les serveurs objet (arrivé dans les années 90/2000) qui se sont inspirés de ce que font les SGBDR pour faire leur sauce en moins bien et moins performant.
    L'exemple typique est hibernate que les jeune développeur considèrent comme le graal absolu alors qu'ils n'ont absolument aucune culture SGBDR et qui provoque les pires maux comme je l'ai montré dans mes papiers.
    les problème provoqué par les ORM sont récurrents et conduisent à des performances catastrophiques !

    A +

  12. #12
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Maximilian Voir le message
    Au contraire, je pense que les fonctions de dates et chaines de caractères sont mieux supportées que des choses comme les branchements conditionnels

    Un exemple avec Hibernate et HQL :

    http://docs.jboss.org/hibernate/core...ql-expressions

    Après c'est sûr que les expressions les plus complexes (requêtes récursives, fonctions OLAP...) ont peu de chances d'être gérées en agnostique.
    Je pense que tu m'as mal compris ! Je ne dis pas que les ORM ne gérent pas de fonctions de traitement (nombres, chaines, date, etc ...) mais plutôt que ces fonctions sont limitées !
    Autrement dit, est-il sûr de pouvoir toujours trouver (dans le cadre des fonctions par exemple) l'équivalent de telle ou telle fonction d'un SGBDR au sein de Hibernate ? J'imagine que non !

    A+

  13. #13
    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 : 61
    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 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par hisoft Voir le message
    Je suis en cours d'étude d'une architecture pour une application J2EE. Au niveau de la couche de bonnées, je désire que l'appli soit indépendante du SGBD cible.
    Pourquoi ce désir d'universalité ?

    Si ton appli peut avoir une importance stratégique ou critique pour les entreprises qui l'adoperont, celles-ci voudront sans doute qu'elle s'appuie sur un SGBDR robuste et ne feront pas la fine bouche si tu leur dis que ton appli ne fonctionne que sur un SGBDR payant tel Oracle ou MS SQL Server. Elles n'hésiteront pas non plus à investir dans un nouveau serveur pour héberger ton appli miracle qu'ils attendaient depuis longtemps et leur fera gagner des parts de marché ou de la productivité.

    Si ton appli est moins importante (ne vois rien de péjoratif dans cete expression), fais-là tourner sur un SGBD gratuit ou deux (MySQL et/ou Postgresql, avec la restriction que MySQL n'est aps forcément gratuit) et cette "obligation" ne posera de problème à mon avis qu'à très peu d'entreprises ou d'organismes qui ont probablement déjà une appli php/mysql ou autre qui traîne dans un coin.

    Si tu tiens absolument à l'universalité, comme il a été expliqué dans les précédents messages, c'est très difficile !
    Utilise au maximum une syntaxe SQL normalisée. Mais le diable étant dans les détails, tu tomberas probablement sur des cas insolubles. Il sera alors temps de créer les fichiers de variables spécifiques aux différents SGBD que tu souhaites utiliser.

    Bon courage !

  14. #14
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Pourquoi ce désir d'universalité ?

    Si ton appli peut avoir une importance stratégique ou critique pour les entreprises qui l'adopteront, celles-ci voudront sans doute qu'elle s'appuie sur un SGBDR robuste et ne feront pas la fine bouche si tu leur dis que ton appli ne fonctionne que sur un SGBDR payant tel Oracle ou MS SQL Server. Elles n'hésiteront pas non plus à investir dans un nouveau serveur pour héberger ton appli miracle qu'ils attendaient depuis longtemps et leur fera gagner des parts de marché ou de la productivité.

    Si ton appli est moins importante (ne vois rien de péjoratif dans cete expression), fais-là tourner sur un SGBD gratuit ou deux (MySQL et/ou Postgresql, avec la restriction que MySQL n'est aps forcément gratuit) et cette "obligation" ne posera de problème à mon avis qu'à très peu d'entreprises ou d'organismes qui ont probablement déjà une appli php/mysql ou autre qui traîne dans un coin.
    En effet, l'application est destinée à des clients potentiellement importants. En plus, un des pré-requis de l'appli est qu'il n'y ait pas d'handicap par rapport aux SGBDR. Il n'est pas du tout question de rester à négocier avec un client le type de SGBDR à utiliser ou d'être limité dans son offre. Puisque certains peuvent être partenaires de telle ou telle firme (Oracle, Microsoft, etc ...) et par conséquent seront le plus souvent contraints de passer par le SGBDR de leur partenaire (performants ou pas) !
    Je pense que là tu percois mieux la nécessité d'indépendance vis à vis des SGBDR.

    Citation Envoyé par CinePhil Voir le message
    Si tu tiens absolument à l'universalité, comme il a été expliqué dans les précédents messages, c'est très difficile !
    Utilise au maximum une syntaxe SQL normalisée. Mais le diable étant dans les détails, tu tomberas probablement sur des cas insolubles. Il sera alors temps de créer les fichiers de variables spécifiques aux différents SGBD que tu souhaites utiliser.
    Oui, j'y tiens. Au fait, je ne l'ai pas précisé mais l'application est en réalité déjà implémentée en J2EE et en production. Maintenant, certaines nouvelles spéc. (entre autres) veulent qu'elle soit ouverte aux autres SGBDR !
    Sinon, j'ai trouvé une technique de gestion proposée par sun ici qui emploie les DAO (qui fait d'ailleurs partie de ma nouvelle architecture) !

    Au plaisir !

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

Discussions similaires

  1. [PHP 5.3] Conseil pour la gestion de requêtes SQL en POO
    Par grinder59 dans le forum Langage
    Réponses: 1
    Dernier message: 04/09/2014, 13h20
  2. Demande d'aide pour réalisation d'une requête SQL
    Par etiennegaloup dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/10/2013, 08h54
  3. Aide pour Simplifier/optimiser une requête SQL
    Par bubu06 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/05/2012, 18h25
  4. Réponses: 3
    Dernier message: 04/03/2012, 17h43
  5. [MySQL] Aide pour une p'tite requête SQL
    Par trifly dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/08/2010, 09h21

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