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