Pourquoi ne trie t’on jamais une vue en SQL ?

En SQL ANSI, il est connu qu’une vue ne doit jamais être trié. On n’utilise donc jamais de ORDER BY dans une vue.
J’avoue que j’ai essayé de trouver une bon raison à cela et je l’ai finalement trouvé…

Comme vous le savez, une vue n’est qu’un enregistrement de requête, elle n’a pas d’existence physique comme une table à part les vues matérialisées mais c’est un autre problème!

Imaginez le scénario suivant :

Vous créez sur sql serveur une vue avec un order by. SQL Serveur 2000 ne posera aucune question et conservera le tri en réserve comme vous le souhaitez.

CREATE VIEW MAVUE AS SELECT NOM,PRENOM FROM FAMILLE ORDER BY NOM,PRENOM;

Jérome, votre collègue de toujours à besoin de cette vue mais lui, il veut trié par PRENOM,NOM…il écrit donc sa requète :

SELECT * FROM MAVUE ORDER BY PRENOM,NOM;

Jérome a le droit d’écrire cela.

Maintenant, Qu’avez vous demander à SQL SERVEUR 2000 ?

Il doit trier par NOM,PRENOM puis par PRENOM,NOM dans la même requête, avouez que c’est fort en chocolat de demander cela.

Voilà, pour moi, la raison pratique pour laquelle on ne doit jamais écrire un order by dans une vue. Parce qu’il y a aura 10 utilisateurs différents de la vue et qu’aucun d’eux n’aura les mêmes besoins. Alors même si sql serveur 2000 autorise le order by dans une vue, ne l’utilisez jamais dans la vue mais en dehors, au plus prés du besoin!

Une réflexion au sujet de « Pourquoi ne trie t’on jamais une vue en SQL ? »

Laisser un commentaire