Durante a faculdade, foi um golpe em nossas cabeças não atualizar tabelas através de visualizações e, novamente, quando cheguei no local de trabalho, informamos que não atualizávamos o banco de dados através de visualizações.
Onde / Existem implicações significativas de desempenho para fazer isso? Ou esse é mais um caso de desenvolvedores seniores / DBAs que dizem aos funcionários juniores para não fazerem isso porque podem causar estragos involuntariamente com uma associação incorreta.
EDIT
Estou usando o MSSQL 2000-2008 (Dependendo dos detalhes do cliente)
sql-server-2008
view
Tim Sparg
fonte
fonte
INSTEAD OF
gatilho? Eu não ouvi esse conselho, particularmente BTW, você nunca deu um motivo?instead of
gatilhos são usados, não há ambiguidade e não vejo uma razão para não usá-los. Mas como eu não estou familiarizado com o SQL Server, não posso comentar sobre o uso de modos de exibição sem um gatilho.Respostas:
Para uma exibição ser atualizável sem o uso de
INSTEAD OF
gatilhos "O SQL Server deve ser capaz de rastrear de maneira inequívoca as modificações da definição de exibição em uma tabela base". .Não há desvantagem de desempenho em Atualizar essas exibições, pois o SQL Server gera apenas um plano de consulta para a tabela base afetada. Uma possível desvantagem pode ser o fato de adicionar uma camada de ofuscação; portanto, a menos que você esteja usando o Views como uma camada de segurança, é mais fácil escrever apenas um código que atualize a tabela base diretamente.
Outro pode ser se o modo de exibição contiver um para muitos
JOIN
e você atualizar o lado "um" com um valor do lado "muitos"; é indeterminado qual o resultado final, mas o mesmo se aplica àUPDATE ... FROM
sintaxe proprietária do SQL Server . Você precisaria usarMERGE
ou uma subconsulta escalar correlacionada para evitar esse possível problema.Para modos de
INSTEAD OF
exibição que não são atualizáveis e exigem um acionador, há implicações de desempenho, pois as tabelasinserted
edeleted
pseudo-tabelas precisam ser geradas a partir da tabela base, portanto, se possível, a atualização direta das tabelas base provavelmente será mais eficiente.fonte