sql - 如何在多个数据库表中保持唯一标识符?

标签 sql database oracle oracle11g

我的任务是为 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/

相关文章:

sql-server - SQL Server 和数据库的 ACID 属性

mongoose - 如何在 MongoDB 模式中创建嵌套对象

oracle - 如何在SELECT FROM语句中使用表类型?

sql - 为什么我的数据库文件与具有相同数据的普通文本文件大小相同?

php - FLUTTER&PHP-我无法从Flutter应用发布到mysql数据库

c# - C# 中的提交和回滚

linux - Oracle 12c Ubuntu 17.04 安装报错

sql - Oracle 数据库表中的数据加载

php - 显示密码不是 md5 格式的行

php - 如何在 mysqli 查询中使用 $_POST 变量? (php)