1

这个问题是由我的一个朋友正在使用的一些商业软件的最近更新引起的。到目前为止,他们的架构是基于 Access 数据库的,速度非常慢。他们将数据集拆分为多个 mdb 文件(sales.mdb、products.mdb、stock.mdb、...)。他们现在转向 SQL Server Express 并保持这种结构。他们没有为每个数据集使用一个表,而是在同一个 SQL Server 2008 Express 实例上创建了不同的数据库。

从我对 SQL Server 的(诚然有限的)理解来看,这似乎并不明智,因为它可以防止不同表之间的 JOIN,并且需要一个需要销售和库存数据的程序来维护两个数据库连接,而不仅仅是一个。

一位软件供应商的顾问声称,这将绕过 SQL Express 的 1GB 物理内存的 RAM 限制——他说这是每个数据库的,但从我从 MSDN 收集的信息来看,它实际上是每个实例的,所以他们在这里一无所获。

是否有充分的理由将同一业务域中的数据拆分为数据库而不是表?(我能想到的一个是您可以限制每个数据库的访问,但不能限制每个表的访问——但这在这种特殊情况下无关紧要,程序的所有模块都可以访问所有数据库。)

4

2 回答 2

2

您可以跨数据库编写联接,因此这不是主要问题。一般来说,我建议将所有内容都保存在一个数据库中,除非有充分的理由将其拆分,并且这些原因可能与兼容性有关,比如您有一个应用程序必须在兼容模式 80 或数据库上运行某些东西 - 您可能会选择在该兼容性级别将一些数据分离到单独的数据库中。或者,如果您希望能够轻松移动到另一台服务器的主要功能块 - 例如数据迁移或 ETL。

听起来限制在应用程序中。

于 2012-12-18T05:59:04.723 回答
1

根据您的 SQL Server Express 版本,拆分数据库可以允许更多的数据存储(2005 有 4GB 数据库限制,2008 是 10GB)。

除了每个实例 1GB RAM 的限制之外,我相信 SQL Server Express 也被限制为每个实例 1 个 CPU。

我同意HABO的评论。您不能跨数据库强制执行参照完整性,所有这些都必须在应用程序中进行管理。

于 2012-12-18T08:03:12.477 回答