2009-03-10 11 views
27

Cette question concerne les vues de bases de données, not materialized-views.Quand utiliser les vues de la base de données et quand?

Plus:

  • simplification des requêtes.
  • Évitez de répéter les mêmes jointures sur plusieurs requêtes.
  • Évitez les nombres magiques.

Moins:

  • Hiding requêtes réelles (peut-être vous répéter joint).

Quoi d'autre?

+0

[ici] [1] est une autre réponse que je pense que ce sera utile [1]: http://stackoverflow.com/questions/1278521/why-do-you-create- a-view-in-a-database – saman

Répondre

11

Plus: Permet de modifier les structures de données sous-jacentes sans affecter les applications requêtes utilisent (aussi longtemps que votre vue peut masquer les structures de données)

7

Les vues sont assez impressionnant quand vous ne pas entièrement confiance à la envoyer des requêtes à votre base de données. Un bon exemple pourrait être que vous créez une vue sur les tables pour un entrepreneur afin que tout ce qu'ils peuvent voir est les lignes relatives à leur projet.

11

Sécurité. Accorder l'accès sur une vue aux utilisateurs qui devraient être en mesure de voir les colonnes retournées à partir de lui.

0

J'avais l'habitude de les utiliser tout le temps, maintenant rarement. Cependant, je fais tous mes accès aux données à travers les procédures stockées de sorte que l'utilité d'une vue est un peu moins puisque le SP peut cacher la complexité de la jointure si nécessaire. Je considérerais toujours l'utilisation d'une vue si j'ai eu une réunion particulièrement compliquée de beaucoup de tables, à partir de laquelle j'ai dû construire beaucoup de SP par dessus, mais pour être honnête, je ne peux pas penser à tout ce que j'ai en production en ce moment.

L'autre scénario que j'utiliserait un serait où mes utilisateurs ont accès à la base de données pour générer leurs propres rapports, et je voulais cacher la complexité sous-jacente pour eux.

3

Maintenant que SQL Server a common table expressions, je me trouve créer moins de vues. Lorsque je crée une vue, c'est généralement pour une hiérarchie normalisée qui peut être utilisée dans de nombreuses requêtes et non quelque chose qui remplace une requête. Par exemple, Region, Market et City peuvent être trois tables normalisées (flocon de neige). 90% de mes requêtes ont besoin de ces données, je vais donc créer une vue. La vue ne remplace jamais une seule requête mais rend toutes les autres requêtes simples et DRY.

4

Bien que les vues puissent masquer la complexité et les jointures multiples, il s'agit d'une complexité qui aurait été dans le SP de toute façon.

Si le SP a pu être optimisé, la vue doit être optimisée, ce qui augmentera les performances sur tous les SP qui atteignent cette vue. Les vues sont incroyablement puissantes et utiles pour une raison qui se démarque de toutes les autres très bonnes raisons. Ils réduisent la duplication de code. C'est, dans la plupart des cas, la ligne de fond. Si une requête sera utilisée à trois endroits ou plus, une vue simplifiera considérablement vos modifications si le schéma ou les paramètres de requête changent.

Une fois, j'ai dû éditer 22 procédures stockées pour changer une logique de requête. Si l'architecture originale avait utilisé des vues, alors j'aurais eu seulement trois changements.

1

J'ai dû utiliser des vues plusieurs fois pour faire étrange et rejoint le regroupement par des alias.

Par étrange rejoint, je veux dire la sélection d'une liste des dates distinctes, puis extérieur les rejoindre à la table ils venaient d'obtenir des entrées nulles pour les jours vides. Je ne pouvais pas trouver d'autre moyen de le faire.

En ce qui concerne le regroupement par alias, il semblait dépendre de la complexité de la formule dans l'alias. Si l'alias ne faisait référence à aucune colonne réelle, ou aux colonnes déjà groupées, tout allait bien, mais les alias sur les colonnes qui n'étaient pas incluses dans le groupement étaient des erreurs de lancement.

Je me souviens avoir entendu quelque part ou lire pendant mes jours universitaires que la sélection d'une vue était plus rapide que la sélection d'un tas de tables jointes, mais je ne sais pas si cela est vrai.

Un dernier avantage de l'utilisation d'une vue: les tableaux croisés dynamiques dans Excel. Je ne pense pas qu'il existe un moyen de joindre des tables, ou du moins pas dans l'interface de l'assistant. Il est peut-être possible de faire des jointures dans Microsoft Query, mais je n'ai pas encore essayé car la pensée m'est venue à l'esprit maintenant.