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

Jam*_*ven 1 sql oracle normalization lookup-tables denormalization

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

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

是否有一些我可以在数据库(oracle)中做到这一点,对客户端保持透明?应用程序将继续执行插入操作,但数据库会将事物映射到幕后的正确查找表.

我一直在尝试使用可以进行映射的视图和触发器的组合,但感觉应该有更自动的方法来执行此操作.

Mik*_*ll' 7

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

  1. 将基表标准化为3NF,BCNF或5NF.
  2. 重命名原始基表.
  3. 构建一个可更新的视图,该视图与原始的非规范化基表具有相同的名称,列和行.
  4. 确保新视图上的权限与原始基表上的权限相关联.
  5. 测试.
  6. 重复直到完成.

尝试SELECT,INSERT,UPDATE或DELETE原始基表的任何客户端软件都将命中可更新视图.(这是因为表和视图共享命名空间,这不是偶然的.)dbms和您的支持代码将确保正确的事情发生.

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

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

  • @James"我希望可能会有一些魔法让它更容易,所以我不必成为PL/SQL大师." 我想要一匹小马.可悲的事实是,从一开始就正确地做事需要付出努力.更令人沮丧的事实是,在飞行途中将严谨和设计应用于泥球大球需要*更多的努力.好消息是,我们来帮忙. (2认同)