我的任务是为 Oracle 11g 数据库创建历史表。我在这篇文章的第一个答案中提出了一些非常类似于基于记录的解决方案 What is the best way to keep changes history to database fields?
然后我的老板建议,由于某些表是聚类的,即表 1 中的某些数据与表 2 相关(将其视为表在规范化之前的格式),他希望在那里是在该集群级别的所有表之间维护的版本号。生成版本号的建议方法是使用 SYS_GUID http://docs.oracle.com/cd/B12037_01/server.101/b10759/functions153.htm .
我考虑过使用触发器来执行此操作,因此当其中一个表更新时,其他表的版本号随后也会更新,但我可以看到一些问题,例如:
- 我怎样才能停止一个表的触发器,进而触发另一个表的触发器?(我们最终会在这里永远调用触发器)
- 如何停止竞争条件? (即当表1和表2同时更新时,我怎么知道哪个是最新的版本号?)
我是 Oracle 数据库开发的新手,所以关于这是否是一个好主意/如果有更好的方法来做这件事的一些建议会很棒。
最佳答案
我想你要找的是序列:http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_6015.htm#SQLRF01314
表格可以独立地从定义的序列中获取数字,因此您这边不会出现竞争条件或触发器
关于sql - 如何在多个数据库表中保持唯一标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21090107/