在应用更新时更新数据库的一部分

时间:2011-04-26 20:03:37

标签: c++ sql qt sqlite installation

我正在用C ++(Qt)和SQLite开发一个应用程序。应用程序安装了预定义的数据库,其中包含一些记录。用户可以使用自己的记录扩展数据库。我想知道如何实现应用程序的更新,即在安装新版本的应用程序时,我想删除数据库中的旧核心(预定义)记录,并替换为(插入)新的记录。这些问题出现了:

  • 我应该使用2个具有相似模式的数据库,一个可修改用户,另一个只读预定义数据库(因此应用程序更新只是将旧预定义数据库复制到旧数据库上)?
  • 或者我应该在数据库中有关于作者(应用程序或用户)的列,并且在某种程度上(以及如何?)更新删除旧的应用程序记录并插入新的记录?

有什么想法吗?感谢

2 个答案:

答案 0 :(得分:2)

还有第三种变体:

  • 保留原始表格,因为您需要将它们用于应用程序。
  • 对于每个表:添加仅包含一列的第二个表。
  • 这些列引用了“真实”表格的PK。
  • 然后在新表中插入默认记录的键。
  • 在更新期间,只需加入相应的表并删除,然后重新插入。

这大大简化了查询(与第一个版本相比),并且您没有大多数记录不需要的额外列(我认为)。

如果你不想要额外的表格,我会说第二个变种。第一个会强制您进行两次查询并UNION。这对我来说听起来不对。

答案 1 :(得分:0)

好问题。我会选择第二种选择,因为我们在这里做了类似的事情。

另一种可能性是对数据库中的数据进行分类,这样您就可以知道记录是系统的一部分还是来自用户(例如,通过使用关键字或值范围)。虽然此解决方案不需要额外的表或列,但理解和维护起来要困难得多,因为它为数据库记录提供了隐藏的含义。