我曾在多个 SQL 环境中工作过。在一个环境中,保存业务数据的不同表被拆分到多个不同的 SQL 数据库中,所有这些都在同一台服务器上。
在另一种环境中,几乎所有表都保存在一个 SQL 数据库中。
我正在创建一个与另一个项目密切相关的新项目,我一直在想是否应该将新表放在同一个 SQL 数据库或新的 SQL 数据库中。
这一切都在 MS SQL Server 上运行。
当我做出这个决定时,我需要考虑哪些因素?
我曾在多个 SQL 环境中工作过。在一个环境中,保存业务数据的不同表被拆分到多个不同的 SQL 数据库中,所有这些都在同一台服务器上。
在另一种环境中,几乎所有表都保存在一个 SQL 数据库中。
我正在创建一个与另一个项目密切相关的新项目,我一直在想是否应该将新表放在同一个 SQL 数据库或新的 SQL 数据库中。
这一切都在 MS SQL Server 上运行。
当我做出这个决定时,我需要考虑哪些因素?
从您的问题中很难说出您的实际需求是什么,或者您会考虑将哪些数据存储在不同的数据库中。但除了 Gordon 的观点之外,我还可以解决一些其他原因,为什么您可能希望对属于不同客户/用户的数据使用单独的数据库(并且这个答案假设一种可能的数据分离,无论是通过数据库还是模式,将是由客户):
正如我在评论中提到的,一些客户会要求将他们的数据单独存储,您可能需要在看到一分钱或能够保护他们的业务之前以书面形式同意这一点。因此,您不妨为这种必然性做好准备。
将每个客户保存在他们自己的数据库中,如果他们超出您当前的服务器,则可以很容易地移动他们。在我之前的工作中,我们以这种方式设计了系统,后来它拯救了我们的培根——我们能够将客户完全转移到不同的服务器上,这基本上相当于元数据操作。在维护窗口期间,备份他们的数据库,将原始数据库设置为脱机,将备份恢复到新服务器,并更新一个配置表,告诉所有应用程序在哪里可以找到该数据库。这比尝试从其他人共享的数据库中提取所有数据要灵活得多......
当然,这不是免费的,它是关于权衡的。多个数据库吓跑了一些人,但管理这样一个系统 13 年我可以告诉你,管理 100 或 500 个基本相同的数据库并不比在一个大型数据库中管理 500 个模式复杂得多(实际上我会这么说)在很多方面都不是这样)。
数据库是备份和恢复的单位,因此在设计数据库结构时应该首先考虑。如果数据有不同的备份和恢复要求,那么它们非常适合单独的数据库。
不过,这只是问题的一半。在大多数环境中,所有数据库的备份/恢复几乎相同。它成为应用程序设计的问题。换句话说,情况变得相当主观。
在我现在工作的环境中,这里有一些将数据拆分到不同数据库的标准:
(1) 向广大受众发布表格。我们在表格中“发布”数据并将其放入数据库中,与用于构建它们或用于特殊目的的其他表格分开。诚然,SQL Server 声称“模式”是安全单元。但是,数据库在现实世界中似乎做得很好。
(2) 严格的安全要求。有些数据非常敏感,以至于律师必须批准谁可以看到它。这进入它自己的数据库,具有自己的访问权限。
(3) 数据表(用户可以看到)和描述生产系统的表分离。
(4) 将用于由熟练的分析师组进行一般查询的表(已发布的表)与用于特定报告/应用程序的表分开。
最后,我要补充一点。如果某些数据全天不断更新,而其他数据用于报告,我倾向于将它们放在不同的数据库中。这有助于在出现问题时将它们分开。