如何跟踪数据库表中列的位置

Posted

技术标签:

【中文标题】如何跟踪数据库表中列的位置【英文标题】:How to track position of columns on a DB table 【发布时间】:2013-04-30 13:09:19 【问题描述】:

好吧,这个解释有点奇怪,我会尽力的。

我有一个名为 versionsDB 表 (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 作为映射器。

提前致谢。

【问题讨论】:

【参考方案1】:

您可以为行使用唯一的 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

【讨论】:

【参考方案2】:

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

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

然后做一个

select * from myTable  

你可能会得到

A
B

B
A

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

select * from myTable order by displayOrder

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

希望对您有所帮助。

【讨论】:

感谢您的回复。我会接受伊恩的第一个。 +1【参考方案3】:

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

Table Versions
     VersionID int,
     InstructionNum int,
     SeqNum int

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

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

【讨论】:

感谢您,但在我的要求中,我不想向数据库添加另一个表。 +1

以上是关于如何跟踪数据库表中列的位置的主要内容,如果未能解决你的问题,请参考以下文章

更改增量表中列的数据类型

如何计算表中列的每个值?

如何复制临时表中列的默认约束?

SQL Server 表未显示表中列的值

Mysql:过滤表依赖于不同表中列的子字符串

雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名