我有几乎非规范化的现有表。没有针对事物列表状态、类型、国家/地区等的查找表……最初的设计只是为了简化应用程序对数据库的访问,因此这种非规范化没有性能原因。
这导致了包含大量重复数据的表,我想通过为各种状态/类型/国家列引入查找表来正确规范化。
是否有一些我可以在数据库(oracle)中做到这一点,对客户保持透明?应用程序将继续执行插入操作,但数据库会将内容映射到幕后的正确查找表。
我一直在尝试组合视图和触发器来进行映射,但感觉应该有一种更自动的方式来执行此操作。
我有几乎非规范化的现有表。没有针对事物列表状态、类型、国家/地区等的查找表……最初的设计只是为了简化应用程序对数据库的访问,因此这种非规范化没有性能原因。
这导致了包含大量重复数据的表,我想通过为各种状态/类型/国家列引入查找表来正确规范化。
是否有一些我可以在数据库(oracle)中做到这一点,对客户保持透明?应用程序将继续执行插入操作,但数据库会将内容映射到幕后的正确查找表。
我一直在尝试组合视图和触发器来进行映射,但感觉应该有一种更自动的方式来执行此操作。
在一般情况下,如果您可以创建可更新的视图,您可以使您的更改对用户透明。
任何尝试 SELECT、INSERT、UPDATE 或 DELETE 原始基表的客户端软件将改为访问可更新视图。(这是因为表和视图共享一个命名空间,这不是偶然的。)dbms 和您的支持代码将确保正确的事情发生。
根据您的平台和分解,构建可更新视图可能很容易,也可能不可能。在 Oracle 上,我认为最坏的情况是您必须编写 INSTEAD OF 触发器来支持所有查询操作。这还不错。
但是基于几个月的 SO,我不得不说我不是 100% 相信你真的需要这样做,或者你真的想这样做。将表的 DDL 和代表性示例数据发布为 SQL INSERT 语句,我们可以提供更好、更具体的建议。