Pendant le Collège, il nous a été frappé de ne pas mettre à jour les tables via des vues, et encore une fois quand je suis entré dans le lieu de travail, on nous a dit de ne pas mettre à jour la base de données via les vues.
Où y a-t-il / Y a-t-il des implications importantes en termes de performances? Ou s'agit-il davantage d'un cas où des développeurs / administrateurs de bases de données seniors disent au personnel subalterne de ne pas le faire, car ils peuvent faire des ravages sans le savoir avec une jointure incorrecte.
EDIT
J'utilise MSSQL 2000-2008 (selon les particularités du client)
sql-server-2008
view
Tim Sparg
la source
la source
INSTEAD OF
déclencheur? Je n'ai pas entendu ce conseil en particulier BTW vous n'a-t-on jamais donné de raison?instead of
déclencheurs sont utilisés, il n'y a pas d'ambiguïté et je ne vois aucune raison de ne pas les utiliser. Mais je ne connais pas très bien SQL Server, je ne peux donc pas commenter l'utilisation des vues sans déclencheur.Réponses:
Pour qu'une vue puisse être mise à jour sans utiliser de
INSTEAD OF
déclencheurs, "SQL Server doit pouvoir tracer sans ambiguïté les modifications de la définition de la vue vers une table de base". .La mise à jour de ces vues ne présente aucun inconvénient en termes de performances, car SQL Server génère simplement un plan de requête pour la table de base affectée. Un inconvénient possible pourrait être qu'il ajoute une couche d'obscurcissement, donc à moins que vous n'utilisiez Views comme couche de sécurité, il est plus clair d'écrire simplement du code qui met à jour la table de base directement.
Un autre peut être si la vue contient un à plusieurs
JOIN
et que vous mettez à jour le côté "un" avec une valeur du côté "plusieurs", le résultat final n'est pas déterministe, mais il en va de même pour laUPDATE ... FROM
syntaxe propriétaire de SQL Server . Vous devez utiliserMERGE
ou une sous-requête scalaire corrélée pour éviter ce problème possible.Pour les vues qui ne peuvent pas être mises à jour et nécessitent un
INSTEAD OF
déclencheur, il y a des implications en termes de performances car lesinserted
etdeleted
pseudo-tables doivent être générées à partir de la table de base, donc si possible, la mise à jour directe des tables de base sera probablement plus efficace.la source