【发布时间】:2014-04-29 22:57:59
【问题描述】:
我有一个要求(根据法律),不同表格上的数字没有间隙。 ID 中可以有孔,但序列中不能有孔。
这是我必须在 C# 代码或数据库(Postgres、MS SQL 和 Oracle)中解决的问题。
这是我的问题:
Start transaction 1
Start transaction 2
Insert row on table "Portfolio" in transaction 1
Get next number in sequence for column Portfolio_Sequence (1)
Insert row on table "Document" in transaction 1
Get next number in sequence for column Document_Sequence (1)
Insert row on table "Portfolio" in transaction 2
Get next number in sequence for column Portfolio_Sequence (2)
Insert row on table "Document" in transaction 2
Get next number in sequence for column Document_Sequence (2)
Problem occurred in transaction 1
Rollback transaction 1
Commit transaction 2
问题:Portfolio_Sequence 和 Document_Sequence 的序列间隔。
请注意,这是非常简化的,并且每个事务中都包含更多表。
我该如何处理?
我已经看到了一些建议,您可以“锁定”序列直到事务提交或回滚,但是当涉及这么多表和这么复杂的长事务时,这对于系统来说将是一个巨大的停顿。
【问题讨论】:
-
“id 可以有洞,但序列不能有洞”。嗯,什么?
标签: c# sql-server oracle postgresql transactions