如何在插入时自动映射数据库查找表(Oracle)

时间:2011-07-15 18:12:18

标签: sql oracle normalization denormalization lookup-tables

我现有的表几乎是非规范化的。事物列表状态,类型,国家等没有查找表...这个原始设计只是为了简化应用程序对数据库的访问,因此这种非规范化没有性能原因。

这导致了包含大量重复数据的表格,我想通过为各种状态/类型/国家/地区列引入查找表来正确规范化。

我是否可以在数据库(oracle)中对客户端保持透明?应用程序将继续执行插入,但数据库会将事物映射到后面的正确查找表场景。

我一直在尝试使用可以进行映射的视图和触发器的组合,但感觉应该有一种更自动的方式来实现这一点。

1 个答案:

答案 0 :(得分:7)

在一般情况下,如果可以创建可更新视图,则可以使更改对用户透明。

  1. 将基表规范化为3NF,BCNF或5NF。
  2. 重命名原始基表。
  3. 构建一个具有相同名称,列和行的可更新视图 原始的,非规范化的基表。
  4. 确保新视图的权限与 原始基表的权限。
  5. 测试。
  6. 重复完成。
  7. 尝试SELECT,INSERT,UPDATE或DELETE原始基表的任何客户端软件都将命中可更新视图。 (这是因为表和视图共享命名空间,这不是偶然的。)dbms和您的支持代码将确保正确的事情发生。

    根据您的平台和分解情况,构建可更新视图可能很容易,而且可能无法实现。在Oracle上,我认为最糟糕的情况是您必须编写INSTEAD OF触发器来支持所有查询操作。那还不错。

    但是基于几个月来敲响SO,我不得不说我不是百分之百地确信你真的需要这样做,或者你真的想要这样做。将表的DDL和代表性样本数据发布为SQL INSERT语句,我们可以提供更好,更具体的建议。