小编mem*_*can的帖子

用于管理有序列表的功能和模式

我在应用程序设计中有一个常见的场景,我需要存储一个有序列表,并通过应用程序 UI 轻松访问和调整排序。

排序操作很简单,在一个时间上只有一个项目操作-移动到顶部,移至底部,移动了一个位置,或者下一个位置。这些定位操作可能穿插在典型的添加/编辑/删除列表操作中。为了讨论,这是一个单用户应用程序和数据库存储。

因为对象可能非常复杂,我想避免缓存整个列表客户端,并在内存中跟踪新创建的对象,直到发生大的保存操作。

我几乎只在这些项目中使用 MS-SQL,我想知道是否应该使用数据库功能、SQL 功能或设计模式来更好地支持有序列表的管理。

我目前的方法是使用一DECIMAL列来存储列表位置,这些位置在项目移动过程中变为小数。然后我对列表进行排序并重新生成整数位置以规范化列表。在此操作之后,它已准备好进行另一项移动。

在示例实现中,我创建了一个名为Seq位置跟踪的列。一次小数位足以用于 0.5 存储。

[Seq] [decimal](10, 1) NOT NULL
Run Code Online (Sandbox Code Playgroud)

当一个项目在应用程序 UI 中重新定位时,

  1. UPDATE用新的Seq价值记录
  2. 我检索完整表,按升序排序SeqSeq从基于 1 的整数系列重新生成表中的所有值

Seq值很容易计算-

  • 移到顶部 = 0
  • 移到底部 = MAX(Seq) + 1
  • 上移 = 从当前 Seq 值中减去 1.5
  • 下移 = 当前 Seq 值加 1.5

随着列表变长,更新变慢,因为我正在执行 N 个UPDATE语句,其中 N 是表中的行数,因此它似乎只适用于小表。

  • 是否有某种内置功能来管理 SQL 或 MS-SQL …

database-design sql-server

6
推荐指数
1
解决办法
1568
查看次数

标签 统计

database-design ×1

sql-server ×1