|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2005 Messages : 35 ![]() |
Bonjour,
pour moi, soit on utilise les procédures stockées (et les triggers), soit on ne les utilise pas du tout. Si on les utilise un peu, on ne retire aucun avantage. Si on ne les utilise pas, on utilise le SGBDR comme une simple prothèse mémoire. Cela signifie que l'on veut s'affranchir du langage spécifique à un SGBD. Cela part d'une bonne intention mais il faut se rendre compte de ce que cela signifie ---> il faudra également que les requêtes accédant à ce SGBDR ne contiennent pas de traces de ce langage. Par exemple, la gestion des dates sera alors impossible car spécifique à chaque SGBDR, l'utilisation des triggers pour les contraintes "compliquées" ne pourra pas être effectuée obligeant à mettre ces contraintes dans le code de (ou des) application(s), ce qui est loin d'être sûr, .... Toute évloution du modèle demandera également une reprise de toutes les parties du code qui sont impactées (ce qui demandera une cartographie très pointue voire "pointillarde"). Si on les utilise. Effectivement, on se lie au SGBDR mais en construisant les procédures stockées de façon intelligente (par exemple en faisant ressortir dans des fonctions tout particularisme du langage), on limite cette liaison. De plus, il est important que seuls les accès aux données soient présents dans les procédure stockées. les traitements doivent rester dans le code des applications. On peut ainsi utiliser toute la force d'un SGBDR et toute évolution de modèle n'impactera pas le code existant. Les procédures tockées joueront le rôle d'interface entre les traitements et les données comme peut le faire un framework tel que hibernate. Ces interfaces permettent aussi l'évolution du SGBDR sans que cela impacte le code. Par expérience personnelle, j'ai remarqué qu'on changeait plus de langage de programmation que de SGBDR. Je crois que la documentation qu'on trouve contre les procédures stockées vient de personnes qui développent les SI sans avaoir à les administrer et les faire évoluer. Si j'étais une de ces personnes, je ne voudrais pas non plus entendre parler de procédures stockées mais pour maîtriser le SI et le faire évoluer, je pense qu'il est obligatoire d'utiliser les procédures stockées et dans tous les cas. Voilà, j'espère vos réactions (pas trop violentes). |
|
|
00
|
|
|
#2 |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 93 ![]() |
Bonsoir !
Hmm... Tu voulais dire "toute particularité" ? ![]() Pour ma part, la chose est simple :
Si c'est pas la classe, je sais pas ce que c'est... |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2005 Messages : 35 ![]() |
Je partage tout à fait ton utilisation des messages d'erreurs qui sont aussi un outil pour séparer les données et les traitements.
je crois également que les vues peuvent être remplacées par des procédures stockées mais l'idée reste la même. Effectivement, c'est la classe. |
|
|
00
|
|
|
#4 | |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 93 ![]() |
Citation:
Deux avantages :
|
|
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2005 Messages : 35 ![]() |
Dans ce cas là, pourquoi ne pas utiliser les procédures stockées à la place des vues ?
|
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : juin 2006 Messages : 93 ![]() |
Ce n'est pas la même chose. Une vue est une aggrégation de colonnes, en provenance de différentes tables, pour former une "table virtuelle" en vue (pardon) d'être consultée.
Exemple : j'ai une table de vendeurs, une table de produits, je peux créer une vue qui affiche pour chaque vendeur le nombre de chaque produit qu'il a vendus. Au lieu de mettre la requête dans l'application, je crée une vue avec. Les fonctions stockées peuvent être utilisées dans n'importe quelle requête. Imagine une fonction ventes(numvendeur, numproduit) qui retourne la quantité vendue par un vendeur donné, d'un produit donné. Je peux utiliser cette fonction dans ma vue pour en simplifier l'écriture. Mais l'application peut également appeller cette fonction, si besoin est. Les procédures stockées permettent d'effectuer un traitement. Par exemple, on peut écrire une procédure "razVentes()" qui remet à zéro tous les compteurs de ventes, pour une nouvelle année par exemple. Au lieu de laisser l'application modifier les champs, elle appelle cette procédure. |
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : octobre 2005 Messages : 35 ![]() |
D'accord pour tout cela mais maintenant, imagine que la requête que tu définies dans ta vue, tu la mets dans une procédure stockée.
Tu me diras alors que tu ne pourras pas faire de clause WHERE avec cette procédure stockée. Mais rien ne t'empêche de rajouter les paramètres nécessaires à ta procédure stockée. Tu peux également rajouter d'autres procédures stockées qui auraont la même requête mais qui auront des paramètres différents. Cela te permettra d'identifier les clauses WHERE les plus "utiles" et ainsi de créer les bons "index". Des vues n'empêcheront pas de faire des requêtes qui sont gourmandes en ressources et qui n'ont pas été identifiées comme un besoin. |
|
|
00
|
|
|
#8 | ||
|
Membre régulier
![]() Inscription : juin 2006 Messages : 93 ![]() |
Tu n'obtiendrai rien : une procédure stockée ne retourne pas de résultat. Enfin, elles peuvent renvoyer des valeurs au travers de paramètres sortants (OUT), mais qui sont monovalués. Donc même en indiquant un paramètre sortant par colonne, ce qui est possible, on ne récupère qu'un seul tuple. Au contraire des vues, qui retournent tous les tuples retournés par la requête.
Le problème est le même avec les fonctions : même en considérant que le SGBD prenne les tuples comme types de données, une fonction ne pourrai en retourner qu'un seul. Peut-être que certains SGBDR permettent de faire des vues paramétrées ? Mais en restant général, je ne crois pas que cela soit possible. Edit : Oracle permet cela. On définit un ensemble de variables, que la vue utilise dans sa clause WHERE. Avant de regarder la vue (hmm...), on donne une valeur à ces variables, et elles se retrouvent dans la vue. Citation:
Citation:
|
||
|
|
00
|
|
|
#9 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Citation:
C'est d'ailleurs ce que font la plupart des SGBDR comme Oracle ou SQL Server. Si on ajoute en outre les trigger INSTEAD OF on peut alors greffer des INSERT DELETE et UPDATE sur des vues qui ne peuvent être en principe mise à jour (par exemple cue contenant des jointures) et déporter le traitement vers un procédure stockée qui fait un genre de mapping RO. Seul inconvénient les trigger INSTEAD OF ne sont pas encore normalisés. Bref si l'on veut un développement propre : 1) n'utiliser que des vues pour les SELECT INSERT, UPDATE et DELETE 2) ajouter des procédures stockée pour gérer le mapping RO 3) écrire des triggers INSTEAD OF A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com