【问题标题】:Updating Views vs. Triggers更新视图与触发器
【发布时间】:2015-02-10 03:49:25
【问题描述】:

我正在准备期末考试,遇到了这个问题:

解释为什么不推荐更新视图。解释如何使用触发器来支持视图更新。

我在网上看过,并从书中阅读了几章无济于事。

我已经看到观点可以帮助生活更轻松的观点,但没有人反对它们。

这是一个可能的答案吗?

可以在TRIGGER 语句中使用INSTEAD OF 子句来规避表的更新。这将允许更新可以由一个视图表示的多个表。

所以,我的问题是:

1.) 为什么不建议更新视图?

2.) 如何使用触发器来解决问题?

【问题讨论】:

    标签: sql oracle plsql triggers views


    【解决方案1】:

    many restrictions on inherently updatable views

    这可能既令人沮丧又脆弱,因为您的视图和/或架构的未来发展可能会使视图不再固有可更新——因此破坏了依赖此功能的代码。

    以几行代码为代价,使用INSTEAD OF trigger 将有利于减少上述问题并允许您更新非固有可更新视图。您可以在固有可更新视图上使用INSTEAD OF 触发器来覆盖默认行为。

    【讨论】:

      【解决方案2】:

      在研究观点时,请务必使用相对较新的数据,因为这些年来观点发生了变化,因此关于该主题的旧观点可能无效。最初使视图可更新时,限制很多,对操作的控制很少或根本不存在。

      由于能够在许多系统中的视图上编写触发器,限制已经消失并且控制更加精确。我们现在可以准确地确定在 DML 到视图期间所有数据会发生什么。现在到了我不允许应用程序直接访问表的地步。所有源自应用程序的 DML 都必须通过视图(或存储过程,但它们不如视图触发器)。好处是如此巨大,我不明白为什么它没有成为一个通用标准。

      确实,许多人对视图的“观点”(不幸的是,许多负责数据库的人)似乎停留在 1990 年代。有些人根本不希望他们的数据库中有任何视图。有些允许视图,但不允许将它们用于 DML。许多人坚持给他们特殊的名称(“VW_name”、“name_View”或类似名称),这打破了对您的数据非常有用的抽象墙。数据抽象不是数据库的强项,所以尽可能抓住它。

      【讨论】:

        猜你喜欢
        • 2013-09-07
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多