【发布时间】:2014-08-31 17:30:24
【问题描述】:
你好互联网的古人!
今天我在使用 Oracle 外部复合键时遇到了一些问题。我有一个有点大的应用程序(你知道,5000 多个表,那种东西),我们将一些“静态”(它实际上可以更改)数据存储到一组表中。很多表都通过数据库引用了这些数据,所以它的工作原理是这样的:
TABLE StaticData
ID(PK) Data
1 StaticData1
2 StaticData2
...
n StaticDataN
TABLE TypicalTable
ID(PK) StaticDataID(FK to StaticData)
1 1
2 1
3 7
4 2
...
n n
在仙境一切都很好。
但是规范的一些变化,以及之后与客户的一些会议,我们的任务是准备好不同“版本”的数据,以便在某个时间到来时替换静态数据。最后一部分很简单,我们可以创建将每天/每周检查日期并更改数据的作业,但我们将不得不维护旧版本和新版本的数据......在同一个表中。所以现在 StaticData 看起来像:
TABLE StaticData
ID(PK) Data KickInDate(Also PK)
1 StaticData1.1 01/01/1900
1 StaticData1.2 10/07/2014
1 StaticData1.3 12/12/2015
2 StaticData2.1 01/01/1900
...
n StaticDataN.1 01/01/1900
当然,所有完整性参考都已取消。当然,由于我不能在 ID 中设置 UNIQUE 约束,所以我不能保留外键。
我已经在网上搜索了一个解决方案(限制较少的外键),大多数时候解决方案是在插入|更新|删除之前使用触发器检查
但这将是一项非常、非常、非常大的工作。
所以我问,我还有其他解决方案吗? 有没有办法告诉 Oracle 引用另一个表的另一列,即使认为不是唯一的? (肯定不会为空)。
感谢您的建议:)
【问题讨论】:
标签: oracle oracle11g foreign-keys triggers