我在应用程序设计中有一个常见的场景,我需要存储一个有序列表,并通过应用程序 UI 轻松访问和调整排序。
排序操作很简单,在一个时间上只有一个项目操作-移动到顶部,移至底部,移动了一个位置,或者下一个位置。这些定位操作可能穿插在典型的添加/编辑/删除列表操作中。为了讨论,这是一个单用户应用程序和数据库存储。
因为对象可能非常复杂,我想避免缓存整个列表客户端,并在内存中跟踪新创建的对象,直到发生大的保存操作。
我几乎只在这些项目中使用 MS-SQL,我想知道是否应该使用数据库功能、SQL 功能或设计模式来更好地支持有序列表的管理。
我目前的方法是使用一DECIMAL
列来存储列表位置,这些位置在项目移动过程中变为小数。然后我对列表进行排序并重新生成整数位置以规范化列表。在此操作之后,它已准备好进行另一项移动。
在示例实现中,我创建了一个名为Seq
位置跟踪的列。一次小数位足以用于 0.5 存储。
[Seq] [decimal](10, 1) NOT NULL
Run Code Online (Sandbox Code Playgroud)
当一个项目在应用程序 UI 中重新定位时,
UPDATE
用新的Seq
价值记录Seq
并Seq
从基于 1 的整数系列重新生成表中的所有值新Seq
值很容易计算-
随着列表变长,更新变慢,因为我正在执行 N 个UPDATE
语句,其中 N 是表中的行数,因此它似乎只适用于小表。