我正在读期末考试,并且遇到了这个问题:
解释为何不建议更新视图。解释如何使用触发器来支持视图更新。
我在网上看过,从书中读了几章都没有用。
我已经看到了观点可以帮助生活更轻松的观点,但没有人反对他们。
这是一个可能的答案吗?
可以在
INSTEAD OF
语句中使用TRIGGER
子句来绕过表的更新。这将允许更新可由一个视图表示的多个表。
所以,我的问题是:
1。)为什么不推荐更新视图?
2.。)如何使用触发器作为问题的解决方案?
答案 0 :(得分:2)
有many restrictions on inherently updatable views。
这可能既令人沮丧又脆弱,因为您的视图和/或架构的未来发展可能使视图不再本身可更新 - 因此破坏依赖此功能的代码。
以少量代码为代价,使用INSTEAD OF
trigger将有利于减少上述问题,并允许您更新非固有可更新视图。您可以在固有可更新视图上使用INSTEAD OF
触发器来覆盖默认行为。
答案 1 :(得分:0)
在研究观点时,请务必依赖相对较新的数据,因为多年来观点发生了变化,因此关于该主题的较早观点可能无效。当视图首次可更新时,限制很多,操作的控制很少或根本不存在。
由于能够在许多系统中对视图编写触发器,因此限制已经消失,控制也很精确。我们现在可以确切地确定在DML到视图期间所有数据发生了什么。现在到了我不允许应用程序直接访问表的程度。源自应用程序的所有DML都必须通过视图(或存储过程,但它们不如视图触发器)。好处是如此巨大,我不明白为什么它没有成为一个普遍的标准。
确实,很多人的观点"关于观点(不幸的是,许多负责数据库的人)似乎陷入了1990年代。有些人根本不想在他们的数据库中查看任何视图。有些允许观看但不允许将它们用于DML。许多人坚持要给他们特殊的名字(" VW_name"," name_View"或类似名称),它们为你的数据打破了一个非常有用的抽象墙。数据抽象不是数据库的强项,所以尽可能地抓住它。