2013-04-30 48 views
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版)。

如您所见,每当我更新版本时,有些操作会改变其位置,因此最初的跟踪会丢失。经过多次更新之后,操作几乎不可能在最初的同一个地方。

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

我不能作出任何查询寻找其中“插入XX”是位置,因为可能有不止一个Insert XX我的表内。

我的问题是,有没有解决方案来跟踪SQL表内的位置变化?

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

在此先感谢。

回答

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 
+0

感谢您的支持。我接受这个,因为它是第一个。 – 2013-04-30 14:48:13

3

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

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

然后做一个

select * from myTable 

你可能最终与

A 
B 

B 
A 

两者都同样有效。在你的情况下,你可能想要添加一个专门用于排序结果的列。我通常使用一个整数并将其称为displayOrder。通过displayOrder

一个使用的,这是一个形式,你可以从几个公司选择上

SELECT * FROM myTable的顺序:我的select语句通常如下所示。我想要的顶部是按字母顺序排列的,所以我可以按公司名称进行订购。相反,我使用displayOrder列。

希望有所帮助。

+0

感谢您的回复。我会接受伊恩是第一个。 +1 – 2013-04-30 14:49:05

1

如果另一个表列出了版本号,指令号和序列号?它变得越来越复杂,但这也可以让你重新创建你需要的任何版本。另外,您不必在主表中重写seq编号。

Table Versions 
    VersionID int, 
    InstructionNum int, 
    SeqNum int 

其中VersionID是一些版本标识符(也可能是一个字符串)。 InstructionNum指向一个指令列表(您已经拥有该指令),并且序列号指示要执行它们的顺序。

这样,您还可以获得不是所有版本的特定版本的说明。

+0

感谢这一点,但在我的requeriments我不想添加另一个表到数据库。 +1 – 2013-04-30 14:47:49