如何跟踪数据库表中列的位置
Posted
技术标签:
【中文标题】如何跟踪数据库表中列的位置【英文标题】:How to track position of columns on a DB table 【发布时间】:2013-04-30 13:09:19 【问题描述】:好吧,这个解释有点奇怪,我会尽力的。
我有一个名为 versions 的 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 作为映射器。
提前致谢。
【问题讨论】:
【参考方案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以上是关于如何跟踪数据库表中列的位置的主要内容,如果未能解决你的问题,请参考以下文章