在更改列表中保留对某些订单的永久跟踪

时间:2016-05-24 14:59:53

标签: c# sql sql-server

拥有存储在数据库中的项目的动态列表,外部流程控制此列表中的输入和输出,其发生率为每天1/2。

这些项目在此列表中保留了大约两周。

我想对我的程序做的是为此列表分配一个订单(并存储它)。

我面临的问题是如何正确地做到这一点。我应该在数据库中保存多少值?

我考虑过保存它当前的位置,但这面临的问题是,一旦项目从列表中移出(不受我控制),我必须重写其余部分的顺序,以避免不必要的空白按顺序排列。

接下来的想法是保存一个自动增加的数字,然后在项目之间交换此数字以更改顺序。然后获得真正的订单只需按该列对它们进行排序。但这会导致人数不断增加,并且感觉不对。

这样做的正确方法是什么?

编辑:进一步解释:

http://i.imgur.com/1ET78nb.png

这是我的程序中控制它的部分(忘记红色,与此无关)。最近添加了第四项,因此没有定义订单。一旦我点击它,它应该取第四名并在数据库中保存一些值。

现在假设在任何时候都可以从这里消除第二个或第三个值,所以我不能(我可以,但我觉得我不应该)只保存1,2,3,数据库中为null。

3 个答案:

答案 0 :(得分:1)

我过去做过类似的事情,我绝对将数字1,2,3,...存储为数据库中的“订单”列。

每当有人点击“向上”箭头将#3移动到#2时,应用程序就会运行代码,将3更改为2,将前2更改为3。

如果#2被删除,那么应用程序会运行代码,将#3移至#2,将#4移至#3,依此类推。

如果我是你,那就是我今天要做的。

答案 1 :(得分:0)

如果您的程序有一个唯一的整数,它定义了数据库中记录的顺序,那么只需将该位置存储为记录的字段。如果您有唯一约束,它会为您创建索引,因此按列排序将很快。

像这样。

CREATE TABLE [dbo].[MyTable]
(
  [Id]              BIGINT   NOT NULL IDENTITY(1, 1), -- or some other primary key
  [Position]        INT      NOT NULL,
  -- other columns

  CONSTRAINT [MyTable_Position_UIDX] UNIQUE([Position])
) 
GO

然后通过有序位置访问

SELECT * FROM [dbo].[MyTable] ORDER BY [Position] DESC

编辑: 刚从另一个堆栈交换站点看到This answer,这是一个比我更正确的答案。

答案 2 :(得分:0)

  

这些项目在此列表中保留约两周

(后续问题:此外部流程如何确定要从列表中删除哪些项目?)

  

我想用我的程序做的是为这个列表分配一个订单   (并存储它)。

(为什么? - 外部流程是否已经知道如何从列表中删除项目?是否还有其他目的通过存储列表顺序来服务?)

  

......不需要的空格......

(为什么这是一个问题?)

  

不断增加数量并且感觉不对。

(你有什么特别的担心?)

正如此处和post-datetime中的其他地方所建议的那样,自动递增的整数等都有利于排序。从你的帖子中不清楚为什么你需要这个/你想要的结果是什么,所以不确定如何更好地建议,除了"试一试!","去吧#34;等等: - )

相关问题