web-dev-qa-db-fra.com

Quand utiliser une vue au lieu d'une table?

Quand faut-il réellement utiliser une vue sur une table réelle? Quels gains dois-je m'attendre à ce que cela produise?

Globalement, quels sont les avantages d'utiliser une vue sur une table? Est-ce que je ne devrais pas concevoir la table de la façon dont la vue devrait ressembler en premier lieu?

96
bevacqua

Oh, il faut tenir compte de nombreuses différences

Vues pour la sélection:

  1. Les vues fournissent une abstraction sur des tables. Vous pouvez facilement ajouter/supprimer des champs dans une vue sans modifier votre schéma sous-jacent.
  2. Les vues peuvent modéliser facilement des jointures complexes.
  3. Les vues peuvent vous cacher des éléments spécifiques à la base de données. Par exemple. si vous devez effectuer des vérifications à l'aide de la fonction SYS_CONTEXT d'Oracles ou de nombreuses autres choses
  4. Vous pouvez facilement gérer vos subventions directement sur des vues, plutôt que sur les tables réelles. Il est plus facile à gérer si vous savez qu'un utilisateur donné peut uniquement accéder à une vue.
  5. Les vues peuvent vous aider avec la compatibilité ascendante. Vous pouvez modifier le schéma sous-jacent, mais les vues peuvent masquer ces faits à un client donné.

Vues pour insertion/mises à jour:

  1. Vous pouvez gérer les problèmes de sécurité avec les vues en utilisant des fonctionnalités telles que la clause "WITH CHECK OPTION" d'Oracle directement dans la vue.

Inconvénients

  1. Vous perdez des informations sur les relations (clés primaires, clés étrangères)
  2. Il n'est pas évident que vous puissiez insérer/mettre à jour une vue, car celle-ci masque ses jointures sous-jacentes.
71
Lukas Eder

Les vues peuvent:

  • Simplifier une structure de table complexe
  • Simplifiez votre modèle de sécurité en vous permettant de filtrer des données sensibles et d'attribuer des autorisations de manière plus simple.
  • Vous permet de changer la logique et le comportement sans changer la structure de sortie (la sortie reste la même mais le SELECT sous-jacent peut changer de manière significative)
  • Augmenter les performances (vues indexées SQL Server)
  • Offre une optimisation de requête spécifique avec la vue qui pourrait être difficile à glaner autrement

Et vous ne devez pas concevoir de tables pour correspondre aux vues. Votre modèle de base doit s’intéresser au stockage et à la récupération efficaces des données. Les vues constituent en partie un outil permettant d'atténuer les complexités d'un modèle normalisé efficace en vous permettant d'abstraire cette complexité.

Aussi, demander "quels sont les avantages d'utiliser une vue sur une table?" N'est pas une bonne comparaison. Vous ne pouvez pas vous passer de tables, mais vous pouvez vous passer de vues. Ils existent chacun pour une raison très différente. Les tableaux sont le modèle concret et les vues sont abstraites, ainsi.

40
Paul Sasik

Les vues sont acceptables lorsque vous devez vous assurer que la logique complexe est suivie à chaque fois. Par exemple, nous avons une vue qui crée les données brutes nécessaires à tous les rapports financiers. En faisant en sorte que tous les rapports utilisent cette vue, tout le monde travaille à partir du même ensemble de données, plutôt qu'un rapport utilisant un ensemble de jointures et un autre, oubliant d'en utiliser un qui donne des résultats différents.

Les vues sont acceptables lorsque vous souhaitez limiter les utilisateurs à un sous-ensemble de données particulier. Par exemple, si vous ne supprimez pas d'enregistrements mais marquez seulement l'actuel en tant que actif et les anciennes versions comme inactives, vous souhaitez qu'une vue sélectionne uniquement les enregistrements actifs. Cela empêche les utilisateurs d'oublier de mettre la clause where dans la requête et d'obtenir de mauvais résultats.

Les vues peuvent être utilisées pour garantir que les utilisateurs ont uniquement accès à un ensemble d'enregistrements - par exemple, une vue des tables pour un client particulier et l'absence de droits de sécurité sur les tables peuvent signifier que les utilisateurs de ce client peuvent uniquement voir les données. pour ce client.

Les vues sont très utiles lors du refactoring de bases de données.

Les vues ne sont pas acceptables lorsque vous utilisez des vues pour appeler des vues, ce qui peut entraîner des performances médiocres (du moins dans SQL Server). Nous avons presque perdu un client de plusieurs millions de dollars, car quelqu'un a choisi d'abréger la base de données de cette façon, les performances étaient épouvantables et les délais d'attente fréquents. Nous avons également dû payer le correctif, pas le client, car le problème de performances était totalement de notre faute. Lorsque des vues appellent des vues, elles doivent générer complètement la vue sous-jacente. J'ai vu ceci où la vue appelée vue appelait vue et autant de millions d'enregistrements étaient générés afin de voir les trois dont l'utilisateur avait finalement besoin. Je me souviens qu’un de ces points de vue prenait 8 minutes pour faire un simple décompte (*) des enregistrements. Les vues appelant des vues sont une idée extrêmement pauvre.

Les vues sont souvent une mauvaise idée à utiliser pour mettre à jour des enregistrements, car vous ne pouvez généralement mettre à jour que des champs de la même table (là encore, il s'agit de SQL Server, les autres bases de données peuvent varier). Si tel est le cas, il est plus logique de mettre à jour directement les tables afin que vous sachiez quels champs sont disponibles.

31
HLGEM

Une pratique courante consiste à masquer les jointures dans une vue afin de présenter à l'utilisateur un modèle de données plus dénormalisé. D'autres utilisations impliquent la sécurité (par exemple en masquant certaines colonnes et/ou lignes) ou la performance (dans le cas de vues matérialisées)

7
TToni

Les vues sont pratiques lorsque vous devez sélectionner plusieurs tables ou simplement obtenir un sous-ensemble de table.

Vous devriez concevoir vos tables de telle sorte que votre base de données soit bien normalisée (duplication minimale). Cela peut rendre les interrogations quelque peu difficiles.

Les vues sont un peu séparées, vous permettant de voir les données dans les tables différemment de ce qu'elles sont stockées.

7
Oded

Vous devez concevoir votre table SANS tenir compte des vues.
Outre la sauvegarde des jointures et des conditions, les vues offrent un avantage en termes de performances: SQL Server peut calculer et enregistrer son plan d'exécution dans la vue, et donc le rendre plus rapide que les instructions SQL "à la volée".
La vue peut également faciliter votre travail en ce qui concerne l’accès des utilisateurs au niveau du terrain.

6
Patrick Honorez

Tout d'abord, comme son nom l'indique, une vue est immuable. c’est qu’une vue n’est autre qu’une table virtuelle créée à partir d’une requête stockée dans la base de données. Pour cette raison, vous avez certaines caractéristiques des vues:

  • vous ne pouvez afficher qu'un sous-ensemble des données
  • vous pouvez joindre plusieurs tables dans une seule vue
  • vous pouvez agréger des données dans une vue (sélectionner le nombre)
  • la vue ne contient pas réellement de données, elle n'a pas besoin de tablespace, car ce sont des agrégations virtuelles de tables sous-jacentes

il existe donc une multitude de cas d'utilisation pour lesquels les vues sont mieux ajustées que les tableaux, il suffit de penser à l'affichage des utilisateurs actifs sur un site Web. une vue serait préférable car vous n'opérez que sur un sous-ensemble des données qui se trouvent réellement dans votre base de données (utilisateurs actifs et inactifs)

découvrez ceci article

espérons que cela a aidé ..

5
fasseg

Selon Wikipedia,

Les vues peuvent offrir de nombreux avantages par rapport aux tables:

  • Les vues peuvent représenter un sous-ensemble des données contenues dans un tableau.
  • Les vues peuvent limiter le degré d'exposition des tables sous-jacentes au monde extérieur: un utilisateur donné peut être autorisé à interroger la vue sans pouvoir accéder à la vue. reste de la table de base.

  • Les vues peuvent rejoindre et simplifier plusieurs tables dans une seule table virtuelle.

  • Les vues peuvent agir en tant que tableaux agrégés , dans lesquels le moteur de base de données agrège les données (somme, moyenne, etc.) et présente les résultats calculés dans le cadre des données.

  • Les vues peuvent masquer la complexité des données. Par exemple, une vue peut apparaître sous le nom Sales2000 ou Sales2001, en partitionnant de manière transparente la table sous-jacente réelle.

  • Les vues prennent très peu de place pour être stockées ; la base de données contient uniquement la définition d'une vue, pas une copie de toutes les données qu'elle présente.

  • Les vues peuvent fournir une sécurité supplémentaire , en fonction du moteur SQL utilisé.

2
Loukan ElKadi