Durante la universidad, nos golpearon en la cabeza no actualizar las tablas a través de las vistas, y nuevamente cuando llegué al lugar de trabajo, nos dijeron que no actualizáramos la base de datos a través de las vistas.
¿Dónde hay / hay implicaciones significativas de rendimiento para hacer esto? ¿O es más un caso de desarrolladores senior / DBA que le dicen al personal junior que no haga esto porque pueden causar estragos involuntariamente con una unión incorrecta?
EDITAR
Estoy usando MSSQL 2000-2008 (Dependiendo de los detalles del cliente)
sql-server-2008
view
Tim Sparg
fuente
fuente
INSTEAD OF
disparador? No he escuchado este consejo, en particular, ¿por qué nunca se le dio una razón?instead of
se usan disparadores, entonces no hay ambigüedad y no veo una razón para no usarlos. Pero no estoy tan familiarizado con SQL Server, por lo que no puedo comentar sobre el uso de vistas sin un disparador.Respuestas:
Para que una vista sea actualizable sin usar
INSTEAD OF
activadores "SQL Server debe poder rastrear sin ambigüedades las modificaciones desde la definición de la vista a una tabla base". .No hay ninguna desventaja de rendimiento al actualizar estas vistas, ya que SQL Server solo generará un plan de consulta para la tabla base afectada. Una posible desventaja podría ser que agrega una capa de ofuscación, por lo que a menos que esté utilizando Vistas como capa de seguridad, es más claro escribir código que actualice la tabla base directamente.
Otro podría ser si la Vista contiene uno a muchos
JOIN
y actualiza el lado "uno" con un valor del lado "muchos". No es determinante el resultado que obtiene, pero lo mismo se aplica a laUPDATE ... FROM
sintaxis patentada de SQL Server . Debería usarMERGE
una subconsulta correlacionada escalar para evitar este posible problema.Para las vistas que no son actualizables y requieren un
INSTEAD OF
desencadenante, hay implicaciones de rendimiento ya que lasinserted
ydeleted
pseudo tablas deben generarse a partir de la tabla base, por lo que si es posible, actualizar las tablas base directamente probablemente será más eficiente.fuente