如何在SQL中表示和插入有序列表?
我想在SQL表中表示“hi”,“hello”,“goodbye”,“good day”,“howdy”(按照顺序))的列表:
pk | i | val ------------ 1 | 0 | hi 0 | 2 | hello 2 | 3 | goodbye 3 | 4 | good day 5 | 6 | howdy ‘pk’是主键列.不顾其价值观. ‘i’是定义’val’列中值的顺序的“索引”.它只用于建立订单,价值观不重要. 我遇到的问题是在维护订单时将值插入到列表中.例如,如果我想插入“嘿”,我希望它出现在“你好”和“再见”之间,那么我必须改变“再见”和“美好的一天”的“i”值(但最好不要“嗨,“)为新条目腾出空间. 那么,是否有一个标准的SQL模式来进行移位操作,但只能移动必要的元素? (请注意,简单的“UPDATE表SET i = i 1 WHERE i> = 3”不起作用,因为它违反了“i”上的唯一性约束,并且还不必要地更新“howdy”行.) 或者,有没有更好的方式来表示有序列表?我想你可以使’我’是一个浮点值,并在它们之间选择值,但是当不存在这样的值时,你必须进行单独的重新平衡操作. 或者,是否有一些用于在任意其他字符串之间生成字符串值的标准算法,如果我要使’我’是一个varchar? 或者我应该把它代表为一个链表?我避免了这一点,因为我也想要做一个SELECT .. ORDER BY来获取所有元素的顺序. 解决方法您可以通过使用级联触发器轻松实现此目的,将级别触发器更新为与索引值1的插入/更新操作相同的“索引”条目.这将通过所有行级联,直到第一个间隔停止级联 – 参见第二个例子在 this blog entry for PostgreSQL实现.这种方法应该独立于使用的RDBMS,只要它在更新/插入之前提供对触发器的支持.如果您在代码中实现了所需的行为(增加所有以下索引值,直到遇到差距),但是以更简单和更有效的方式,它基本上会做什么. 或者,如果您可以对SQL Server进行限制,请检查hierarchyid type.虽然主要用于定义嵌套层次结构,但也可以使用它进行平面排序.它有点类似于使用浮点数的方法,因为它允许通过分配分数值在两个位置之间插入,从而避免更新其他条目. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |