1

我正在开发一个访问服务器上公共数据库的独立应用程序。它将被我组织中的几十个人使用。

我知道我需要更新软件和数据库的设计。这创造了有人将使用旧软件对数据库执行查询的可能性。

如果用户尝试启动应用程序的过时版本,我已经有一个系统可以捕获。但是,这并不能防止大多数时间保持应用程序运行的人。

我的想法是在数据库中放置一个版本条目(在 tblVersion 或类似的东西中),并在每次添加、更新或删除数据库中任何表中的任何记录(tblVersion 除外)时检查它,而不仅仅是读取。

这样,即使用户拥有过时版本的 SW,我也可以捕获(我认为)可能损坏数据库的内容:检查数据库中的版本与代码中的内容,并禁止添加、更新、如果不匹配,则删除操作。同时,我不会将大量检查的开销添加到 tblVersion 以进行 DB 读取。

我的问题: 这是声音吗?有没有更好的方法来解决它?如果是这样,是什么?

谢谢!

4

3 回答 3

1

我认为 tblVersion 的想法可能相当合理,但我会考虑在启动时检查它并立即失败,而不是等待用户尝试写入数据库。

这有几个原因是有益的:

  1. 您避免了重复检查版本的需要。您可以在启动时执行此操作并保存相当多的查询,尤其是在许多用户使用此系统的情况下。
  2. 您不必通过这些检查乱扔数据访问层。
  3. 无论如何,检查写入可能不是最好的用户体验。用户可以加载一条记录,花几分钟进行一些编辑,然后因为数据库已经过时而不得不放弃所有这些。如果他们无法对数据库做任何有用的事情,请提前让他们知道,而不是在他们完成编辑之后。

至少,您应该在应用程序启动时检查并警告用户他们将无法在加载应用程序后立即保存任何内容。

于 2009-07-22T21:28:09.810 回答
1

一个人打开应用程序的用例太久,以至于出现了新的、不兼容的应用程序推出,并且数据库模式(或解释)以结构上兼容但语义上不兼容的方式进行了修改,这似乎非常狭窄。

拥有一个带有两个元组的 schemaInfo 表,一个具有当前模式版本,另一个具有最新兼容版本,这将捕获绝大多数情况,同时不会使您的应用程序过于复杂。

检查每次写入将是一个可怕的混乱,如果你真的关心这个场景,每隔一两个小时就会有一个计时器关闭,检查表版本并弹出一个对话框警告用户获取新版本。

更好的是,一旦完成架构更改,您可以简单地反弹数据库,强制所有现有会话断开连接。

于 2009-07-22T21:36:19.780 回答
1

我认为这可行。

但是,我会建议一些稍微不同的东西。

它有两个部分:

  1. 考虑两种类型的更新——必需的和可选的。这个想法是软件会在需要更新时更有效地自我更新。而且,作为开发人员,您只会在您认为需要时根据需要标记更新。我在类似类型的应用程序上工作,并且我看到的许多更新实际上与数据库根本没有任何关系……而这些更新类型应该是可选的。
  2. 将代码添加到您的应用程序中,每分钟查询您的数据库以获取当前版本号。当当前运行的版本已经过时,需要最新更新时,会弹出要求用户获取更新的对话框。根据您的应用程序,您可能还需要添加允许用户保存工作的代码。

我认为如果您遵循这种方法,那么无论更新是必需的还是可选的,您都可以在启动期间自动更新应用程序。但是,当用户实际使用该应用程序时,我只会纠缠用户所需的更新。

于 2009-07-22T21:40:54.140 回答