Une vue non matérialisée est effectivement une macro - faisant référence à une vue signifie que la requête qu'il contient est utilisé dans la vue lieu de références. IE:
CREATE VIEW your_vw AS
SELECT *
FROM EMPLOYEES
Ce:
SELECT * FROM your_vw
... retourne un jeu de résultats correspondant à ce que vous obtiendriez d'utiliser:
SELECT x.*
FROM (SELECT *
FROM EMPLOYEES) x
je l'ai mentionné non matérialisées, mais MySQL ne supporte pas les vues matérialisées. D'autres bases de données (Oracle, SQL Server les appelle "vues indexées", DB2) prennent en charge les vues matérialisées, mais ce n'est pas la question. À partir de maintenant, je ne parlerai que des vues non matérialisées lorsque j'écrirai des vues.
Les vues sont utilisées pour l'encapsulation/abstraction - à moins que l'utilisateur a accès, ils ne peuvent pas voir ce que la requête sous-jacente pour une vue est. C'est bon/mauvais selon la situation - bien si vous vous inquiétez de donner des informations sur le modèle de données; mauvais dans la plupart des autres cas. L'utilisation d'un ORDER BY dans une vue est mauvaise car il faut des ressources pour appliquer l'ordre, ce qui peut être dû à l'encapsulation/abstraction de quelqu'un d'autre qui peut passer un ordre - c'est un gaspillage de ressources. La superposition de vues (vues créées sur des vues) est également une autre mauvaise pratique - vous n'obtiendrez pas d'erreur tant que la vue n'est pas exécutée.
Vues utilisées pour fournir un accès aux données sans avoir besoin d'accorder l'accès à la table, mais ils ont évolué pour soutenir la mise à jour de la table sous-jacente. Je préfère accorder l'accès à la table pour de telles situations.
Et comme plus des réponses que je voudrais montrer un article: http://www.oraclesolved.com/general/Q_25482999-Reasons-for-using-views.jsp PS: quand je lis cet article et ajouté à mes signets, il était disponible à lire sans aucune inscription: -S – zerkms