更改SQLite表中键的最佳方法是什么?

时间:2011-08-25 17:24:22

标签: c# sql database sqlite

我将分层数据存储在树视图中,该树视图是从SQLite DB填充的。根据用户的操作,树节点的ID可以更改(如果它们在节点001之前添加新节点,则从001到末尾的所有节点的密钥都会增加1)。

这在更新数据库时证明是令人不安的 - 因为更新001的值可能会更新错误的节点 - 因为已将一个节点添加到树中。

我找到了解决这个问题的方法,但对我来说似乎相当愚蠢。我只是在更新之前清除表,删除所有记录,然后重新添加它们。但这似乎很糟糕,因为如果在添加它们的某个地方存在错误,则不会添加所有剩余的项目。

我能想到的唯一其他解决方法是在向树添加节点时,我可以给新节点一个密钥00x(其中x是树中的节点数)。但那意味着钥匙坏了。

最好的方法是什么?可能不是我现在的方式。

2 个答案:

答案 0 :(得分:2)

您可以使用单独的订购字段。据我所知,你改变ID的唯一原因是改变排序 - 所以把订单放在别处。

(你甚至可能会疯狂,只需要命令在特定节点的子节点中是唯一的,但在这之前考虑如何用SQL查询构建它)

答案 1 :(得分:0)

直到最后还是一件大事吗?为什么它必须在前面或中间?除了订购,你的数字似乎没什么意义。

为什么不创建一个可以添加到最后的主键,这些数字永远不会改变所以如果你有1-10并且你添加它,那么新的是11.然后你可以做你增加的一块对于您拥有的列,我假设您专门用于订购。通过这种方式,您可以使用所拥有的内容进行订购,但在更新时,您可以使用主键,强制所有内容都是唯一的,并且一旦分配,数字就不会更改。