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 OFdisparador? No he escuchado este consejo, en particular, ¿por qué nunca se le dio una razón?instead ofse 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 OFactivadores "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
JOINy actualiza el lado "uno" con un valor del lado "muchos". No es determinante el resultado que obtiene, pero lo mismo se aplica a laUPDATE ... FROMsintaxis patentada de SQL Server . Debería usarMERGEuna subconsulta correlacionada escalar para evitar este posible problema.Para las vistas que no son actualizables y requieren un
INSTEAD OFdesencadenante, hay implicaciones de rendimiento ya que lasinsertedydeletedpseudo 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