web-dev-qa-db-fra.com

De quoi sont bonnes pour?

J'essaie simplement d'avoir une idée générale de quelles vues sont utilisées pour les RDBMSES. C'est-à-dire que je sais quelle vue est et comment en faire un. Je sais aussi ce que j'ai utilisé dans le passé.

Mais je veux m'assurer que j'ai une compréhension approfondie de ce qu'une vue est utile et quelle vue ne devrait pas être utile pour. Plus précisement:

  1. Qu'est-ce qu'une vue utile?
    • Y a-t-il des situations dans lesquelles il est tentant d'utiliser une vue lorsque vous ne devriez pas en utiliser un?
    • Pourquoi utiliseriez-vous une vue au lieu de quelque chose comme une fonction valorisée de table ou inversement?
    • Y a-t-il des circonstances qu'une vue pourrait être utile qui n'apparaît pas au premier abord?

(Et pour le compte rendu, certaines de ces questions sont intentionnellement naïves. C'est en partie une vérification de concept.)

85
Jason Baker

1) Qu'est-ce qu'une vue utile?

Iopo Dans un endroit seulement

[.

• Les vues fournissent également une couche d'abstraction empêchant l'accès direct aux tableaux (et la menottante résultante référençant les dépendances physiques). En fait, je pense que c'est bonnes pratiques1 Pour offrir un accès abstrait à vos données sous-jacentes (en utilisant des vues et des fonctions de valorisation de table), y compris des vues telles que

[.____] CREATE VIEW AS
      SELECT * FROM tblData


1J'ai admis HAFTA Il y a beaucoup de "faire comme je dis; pas comme je fais" dans ce conseil;)

2) Y a-t-il des situations dans lesquelles il est tentant d'utiliser une vue lorsque vous ne devriez pas en utiliser un?

Les performances en vue des jointures étaient une préoccupation (par exemple, SQL 2000). Je ne suis pas un expert, mais je ne m'en suis pas inquiet depuis un moment. (Je ne peux pas penser à l'endroit où je suis actuellement en train d'utiliser des jointures.)

[.____] Une autre situation dans laquelle une vue peut être survenue est lorsque la vue est uniquement référencée d'un emplacement d'appel et une table dérivée pourrait être utilisée à la place. Tout comme un type anonyme est préférable à une classe in .NET si le type anonyme n'est utilisé que/référencé une fois.

[.____] • Voir la description de la table dérivée dans http://msdn.microsoft.com/en-us/library/ms177634.aspx

3) Pourquoi utiliseriez-vous une vue au lieu de quelque chose comme une fonction de valorisation de la table ou vice versa?

(Mis à part des raisons de performance) Une fonction de valorisation de table est fonctionnellement équivalente à une vue paramétrée. En fait, un cas d'utilisation de fonction de valorisation de table simple commune est simplement d'ajouter un filtre de clause sur une vue déjà existante dans un seul objet.

4) Y a-t-il des circonstances qu'une vue pourrait être utile qui ne sont pas apparentes au premier abord?

Je ne peux penser à aucune utilisation non apparente du sommet de ma tête. (Je suppose que si je pouvais, cela les ferait apparemment;)
42
6eorge Jetson

D'une certaine manière, une vue est comme une interface. Vous pouvez changer la structure de table sous-jacente tout ce que vous voulez, mais la vue permet de ne pas changer le code.

Les vues sont une bonne façon de fournir quelque chose de simple à signaler les écrivains. Si les utilisateurs de votre entreprise souhaitent accéder aux données de quelque chose comme des rapports de cristal, vous pouvez leur donner des points de vue sur leur compte qui simplifient les données - peut-être même la dénormaliser pour eux.

45
Lou Franco

Les vues peuvent être utilisées pour fournir une sécurité (c.-à-d. Les utilisateurs peuvent avoir accès à des vues qui n'accumulent que certaines colonnes dans une table), les vues peuvent fournir une sécurité supplémentaire pour les mises à jour, les inserts, etc. Les vues fournissent également un moyen d'alias les noms de colonne (de même que SP) mais les vues sont plus d'un isolement de la table réelle.

21
schmoopy

Dans une vue de sens dénormalise. La dénormalisation est parfois nécessaire de fournir des données de manière plus significative. C'est ce que beaucoup d'applications font de toute façon par modélisation de domaine dans leurs objets. Ils aident à présenter les données d'une manière qui correspond de manière plus étroitement une perspective d'entreprise.

17
Kilhoffer

Vues cachez la complexité de la base de données. Ils sont parfaits pour de nombreuses raisons et sont utiles dans de nombreuses situations, mais si vous avez des utilisateurs autorisés à écrire leurs propres questions et rapports, vous pouvez les utiliser comme une sauvegarde pour vous assurer qu'ils ne se soucient pas mal conçus. Requêtes avec des jointures de cartésiennes méchantes qui suppriment votre serveur de base de données.

11
gsarnold

En plus de ce que les autres ont indiqué, les vues peuvent également être utiles pour supprimer des requêtes SQL plus complétées de l'application.

Comme exemple, au lieu d'une application faisant:

sQL = "Sélectionnez A, B de TABLE1 Union Select A, B de Table2";

Vous pouvez résumer que pour une vue:

créer une vue Union_table1_table2_v comme
[.____] Sélectionnez A, B du tableau1
syndicat
[.____] Sélectionnez A, B du tableau2

et dans le code de l'application, j'ai simplement:

sql = "Sélectionnez A, B de Union_Table1_Table2_V";

De plus, si les structures de données ne changent jamais, vous n'aurez pas à modifier le code de l'application, recompiler et redéployer. Vous changeriez simplement la vue dans la base de données.

10
CodingWithSpike

L'OP a demandé s'il y avait des situations où il pourrait être tentant d'utiliser une vue, mais ce n'est pas approprié.

Ce que vous ne voulez pas utiliser une vue pour est un substitut de jointures complexes. C'est-à-dire que vous ne laissez pas votre habitude de programmation procédurale de briser un problème dans des pièces plus petites vous mènera vers l'utilisation de plusieurs vues reliées au lieu d'une jointure plus importante. Cela va tuer l'efficacité du moteur de base de données car elle fait essentiellement plusieurs requêtes distinctes plutôt qu'une plus grande.

Par exemple, disons que vous devez rejoindre des tables A, B, C et D ensemble. Vous pouvez être tenté de faire une idée des tables A & B et une vue en dehors de la CD, puis rejoignez les deux vues ensemble. Il vaut bien mieux de rejoindre A, B, C et D dans une requête.

6
Barry Brown

Les vues peuvent centraliser ou consolider des données. Où je suis chez nous, nous avons un certain nombre de bases de données différentes sur quelques serveurs liés différents. Chaque base de données contient des données pour une application différente. Quelques de ces bases de données contiennent des informations relatives à un certain nombre d'applications différentes. Ce que nous ferons dans ces circonstances est de créer une vue dans la base de données de cette application qui ne tire que des données de la base de données où les données sont réellement stockées, de sorte que les requêtes que nous écrivions ne ressemblent pas à différentes bases de données.

5
Joel Coehoorn

Les réponses jusqu'à présent sont correctes - les vues sont bonnes pour assurer la sécurité, la dénormalisation (bien qu'il y ait beaucoup de mal à ce que la route soit faite mal), abstraction du modèle de données, etc.

De plus, les vues sont couramment utilisées pour mettre en œuvre la logique commerciale (un utilisateur émetteur est un utilisateur qui n'est pas connecté au cours des 40 derniers jours, ce genre de chose).

4
SquareCog

Vues Enregistrez beaucoup de relevés de jointure complexes répétés dans vos scripts SQL. Vous pouvez simplement encapsuler un peu de jointure complexe à une certaine vue et l'appeler dans votre énoncé de sélection chaque fois que nécessaire. Cela serait parfois pratique, simple et plus facile que de rédiger les déclarations de jointure dans chaque requête.

3
mohammedn

Une vue est simplement une instruction sélectionnée stockée et nommée. Pensez à des points de vue comme des fonctions de bibliothèque.

2
Gaius

Je me souviens d'une très longue sélection qui impliquait plusieurs syndicats. Chaque syndicat comprenait une jointure à une table de prix créée à la volée par un Select qui était lui-même assez long et difficile à comprendre. Je pense que cela aurait été une bonne idée d'avoir une idée de créer la table de prix. Cela aurait raccourci la sélection globale d'environ la moitié.

Je ne sais pas si la DB évaluerait la vue une fois, ou une fois que chaque fois était invoquée. Quelqu'un sait? Si le premier, l'utilisation d'une vue améliorerait la performance.

1
SeaDrive

Je voulais mettre en évidence l'utilisation de vues pour la déclaration. Souvent, il existe un conflit entre la normalisation des tableaux de base de données pour accélérer les performances, en particulier pour l'édition et l'insertion de données (utilisations OLTP) et de dénormaliser pour réduire le nombre de joints de table pour les requêtes pour la déclaration et l'analyse (utilisations OLAP). De nécessité, =OLTP gagne généralement, car la saisie de données doit avoir une performance optimale. Créer des vues, pour une performance de déclaration optimale, peut aider à satisfaire les deux catégories d'utilisateurs (saisie de données et spectateurs de rapport).

1
DOK

Chaque fois que vous avez besoin de [mon_interface]! = [User_interface].

Exemple:

Tableau A:

  • identifiant
  • info

Vue sur table A:

  • Informations client

c'est une façon de masquer l'ID du client et de renommer l'information à un nom plus verbeux à la fois.

La vue utilisera l'index sous-jacent pour l'ID de clé primaire, de sorte que vous ne verrez pas une perte de performance, une meilleure abstraction de la requête SELECT.

0
HumbleWebDev