【问题标题】:Update part of database on app update在应用程序更新时更新部分数据库
【发布时间】:2011-04-26 20:03:36
【问题描述】:
我正在使用 C++ (Qt) 和 SQLite 开发应用程序。该应用程序安装有预定义的数据库,其中填充了一些记录。用户可以使用自己的记录扩展数据库。我想知道如何实现应用程序的更新,即在安装新版本的应用程序时,我想删除数据库中旧的核心(预定义)记录,并替换为(插入)新记录。出现这些问题:
- 我是否应该使用 2 个具有相似架构的数据库,一个可供用户修改,另一个是只读的预定义数据库(因此应用更新只是将新的预定义数据库复制到旧数据库上)?
- 或者我应该在数据库中有一个关于作者(应用程序或用户)的列,并且以某种方式(以及如何?)在更新时删除旧应用程序记录并插入新记录?
有什么想法吗?谢谢
【问题讨论】:
标签:
c++
sql
qt
sqlite
installation
【解决方案1】:
还有第三种变体:
- 保留原始表格以供应用使用。
- 对于每个表:添加仅包含一列的第二个表。
- 这些列引用您的“真实”表的 PK。
- 然后在新表中插入默认记录的键。
- 更新过程中,只要加入对应表并删除,再插入即可。
这大大简化了查询(与第一个变体相比),并且您没有大多数记录不需要的额外列(我认为)。
如果您不想要额外的表格,我会说做第二个变体。第一个会迫使您进行两次查询并UNION 他们。这对我来说听起来不对。
【解决方案2】:
好问题。我会选择第二个选项,因为我们在这里做了类似的事情。
另一种可能性是对数据库中的数据进行分类,这样您就可以知道记录是系统的一部分还是来自用户(例如,通过使用关键字或值范围)。尽管此解决方案不需要额外的表或列,但它更难理解和维护,因为它为数据库记录赋予了隐藏的含义。