【问题标题】:What is the best way to change keys in a SQLite table? [closed]更改 SQLite 表中的键的最佳方法是什么? [关闭]
【发布时间】:2011-08-25 17:24:22
【问题描述】:

我将分层数据存储在从 SQLite DB 填充的树视图中。根据用户的操作,树节点的 id 可以改变(如果他们在节点 001 之前添加一个新节点,那么从 001 到末尾的所有节点的键都会增加 1)。

这在更新数据库时很麻烦 - 因为更新 001 的值可能会更新错误的节点 - 因为一个已添加到树中。

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

我能想到的唯一其他解决方法是在向树中添加节点时,我可以给新节点一个键 00x(其中 x 是树中的节点数)。但这意味着键是乱序的。

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

【问题讨论】:

  • 不知道有多烂,没看到代码。
  • @Vache:这段代码是自然语言:)
  • 在数据库中有一个主键。不要让它改变 - 如果需要,在树中使用单独的列来进行 id/ordering。

标签: c# sql database sqlite


【解决方案1】:

您可以使用单独的排序字段。据我所知,您更改 ID 的唯一原因是更改排序 - 所以将排序放在其他地方。

(您甚至可能会发疯,只要求 order 在特定节点的子节点中是唯一的,但在这样做之前请仔细考虑如何使用 SQL 查询构建它)

【讨论】:

    【解决方案2】:

    坚持到底有什么大不了的吗?为什么一定要在前面还是中间?看来您的数字除了订购之外没有任何意义。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2010-09-28
      相关资源
      最近更新 更多