我有一个元素数据库,其中包含一个指定排序的参数,其属性如下:
ID
Name
Order
假设订单是一个整数 - 它很容易按订单查询和订购。但是,如果我想在这个列表之间插入一个新元素,我必须重新编号它下面的所有内容 - 最糟糕的情况是当我想将元素推到顶部时。
所以我通过链条排序元素来实现这个想法。也就是说,我有一个包含元素的表:
ID
Name
然后我有第二张桌子与Edges:
StartNode
EndNode
这只是定义哪个元素连接到哪个元素。这样,当我想插入一个元素时,我只需要删除一个边缘并放入另一个 - 我不需要重新排序整个列表。
但是有没有一种有效的方法来查询从这两个表中获取有序列表?这种方法有某种名称吗?
答案 0 :(得分:1)
有趣的问题!正如starlight54所指出的,这种方法被称为链表,特别是双向链表。虽然我认为严格来说,在链表中,对其他节点的引用是节点本身的一部分。在db术语中:数据库记录本身具有到下一个和前一个节点的外键(即双链表)。但这对于现在出现的坏消息并不重要。
链接列表允许非常有效地插入(和删除)节点,这是绝对正确的。但坏消息是订购效率非常低。
关键是链接列表需要顺序访问:首先必须找到第一个节点,然后是下一个节点,然后是下一个节点,...无法在包含一个SQL语句的一个SQL语句中获取有序列表ORDER BY
。 SQL - 为集合操作而设计 - 和顺序访问是两个不同的世界。
最糟糕的方法是分别从数据库中查询每个节点。一个改进是获取所有节点并在内存中构建一个有序列表,但它永远不会令人愉快。
所以我所有人都坚持这个Order
专栏。通常读取数据的频率远远高于修改数据,因此以易于访问为代价优化更新速度并不是最明显的事情。