1

好吧,这解释起来有点奇怪,我会尽力而为。

我有一个名为版本DB的表 ( ) ,其中包含作为版本一部分的不同操作的列表。SQL

例如版本 1.0:

1. Insert XX

2. Delete YY

3. Insert XY

在我的代码中,有时需要更新特定版本的操作。因此,例如,假设我需要一个新Insert YX位置 2。:

1. Insert XX

2. Insert YX

3. Delete YY

4. Insert XY

(这仍然是 1.0 版)。

如您所见,每次我更新版本时,一些操作的位置都会发生变化,因此初始跟踪会丢失。经过多次更新后,这些操作几乎不可能与最初的位置相同。

所以,这是我的问题。我需要单独跟踪这些列:

我无法进行任何查询来查找“ Insert XX ”所在的位置,因为我的表中可能有多个。 Insert XX

我的问题是,是否有任何解决方案来跟踪 SQL 表中的位置变化?

我使用 PostgreSQL 和 Java 作为编程语言和 ORMLite 作为映射器。

提前致谢。

4

3 回答 3

3

您可以对行使用唯一的 id 字段,对订单使用序列字段

  id seq val
  1  1   Insert XX  
  2  2   Delete YY
  3  3   Insert XY

当您在 pos 2 添加新项目时(它获取下一个 id(4),并且您执行更新 where seq >=2 以设置 seq=sql+1 )

  id seq val
  1  1   Insert XX  
  4  2   Insert YX
  2  3   Delete YY
  3  4   Insert XY
于 2013-04-30T13:16:04.943 回答
3

在数据库中您永远无法确定的一件事是行的顺序。例如,如果您这样做:

insert *A* into myTable ...
insert *B* into myTable ...

然后做一个

select * from myTable  

你最终可能会得到

A
B

或者

B
A

两者同样有效。在您的情况下,您可能希望添加一个具有对结果排序的特定目的的列。我通常使用整数并将其称为 displayOrder。所以我的选择语句通常看起来像:

select * from myTable order by displayOrder

一种用途是在您可以从多家公司中进行选择的表格上。我想要在顶部的那个按字母顺序在中间,所以我可以按 companyName 进行订购。相反,我使用 displayOrder 列。

希望有帮助。

于 2013-04-30T13:20:46.870 回答
1

另一个列出版本号、指令号和序列号的表怎么样?它变得越来越复杂,但这也将允许您重新创建所需的任何版本。另外,您不必继续重写主表中的序列号。

Table Versions
     VersionID int,
     InstructionNum int,
     SeqNum int

其中 VersionID 是某个版本标识符(也可以是字符串)。InstructionNum 指向一个指令列表(你已经有了),序列号告诉执行它们的顺序。

这样,您还可以获得针对特定版本的说明,而这些说明并非在所有版本中都有。

于 2013-04-30T13:31:28.290 回答