请原谅我冗长的问题。我有一个设计想法,需要一些意见。这样做是个好主意吗?我应该注意哪些陷阱?有没有其他更好的类似实现?
My situation is as follows:
I am working on a rewrite of a windows forms application that connects to a SQL 2008 (earlier it was SQL 2005) server. The application is an "expert-system" for an engineering company where we store structured data about constructions. We have control of all installations of the client software, we have no external customers or users, they are all internal to the company, and they are all be trusted not to do anything malicious to the software or database.
当前设计并没有太多的表格(大约10-20个),但其中一些表格拥有数百万属于几百个建筑物的记录。目前系统的性能还可以,但随着我们推动设计的极限,它开始变得不稳定。
作为重写的一部分,我正在考虑将数据库拆分为一个主数据库和若干个“子”数据库,每个描述一个构造。每个子数据库应具有相同的设计。这应该能消除今天我们所看到的性能问题,因为存储在每个数据库中的数据量应该小于总数据量的百分之一。
我的担心是,我们现在不仅要维护一个数据库,而是将会有数百个数据库需要保持最新状态。随着公司需求的变化,系统不断演变(你知道的),虽然我们试图向前看,以减少变更数量,但变更仍将不断出现。因此,我们需要一个系统来跟踪对系统所做的所有数据库更改,以便将其应用于子数据库。更新客户端应用程序不会是问题,我们对此有很好的控制。
我正在考虑一种更改跟踪系统,其中我们将所有更改的数据库脚本存储在主数据库的表中。然后,我们可以为每个更改分配版本号,并在每个子数据库中存储当前版本号。当客户端程序连接到子数据库时,我们可以检查数据库的版本号与主数据库的当前版本号是否匹配,如果存在版本号大于子数据库版本号的修补程序,我们将运行这些修补程序并将子数据库更新为最新版本。
在我看来,这应该可以很好地工作。对系统所做的任何更改都将在提交为数据库的新版本之前进行测试和验证。然后,该更改将首次应用于用户打开数据库的时间。我想,在应用更改时,我们会以独占模式打开数据库,但只要更改不太频繁,这应该不是问题。
那么你认为呢?这个方案可行吗?你们中有人做过类似的吗?我们应该放弃这个方案,转而使用单片集成系统吗?