何时在同一台服务器上使用单独的SQL数据库?

何时在同一台服务器上使用单独的SQL数据库?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我在几个SQL环境中工作过。在一个环境中,保存业务数据的不同表被拆分到多个不同的SQL数据库中,所有这些数据库都位于同一台服务器上 在另一个环境中,几乎所有的表都保存在一个SQL数据库中 我正在创建一个与另一个项目密切相关的新项目,我一直在想是否应该将新表放在同一个SQL数据库或新的SQL数据库中 这一切都在MS SQL Server上运行 当我做出这个决定时需要考虑哪些因素?< /P> < P>数据库是备份和恢复的单元,因此在设计数据库结构时应该首先考虑。如果数据具有不同的备份和恢复要求,则它

我在几个SQL环境中工作过。在一个环境中,保存业务数据的不同表被拆分到多个不同的SQL数据库中,所有这些数据库都位于同一台服务器上

在另一个环境中,几乎所有的表都保存在一个SQL数据库中

我正在创建一个与另一个项目密切相关的新项目,我一直在想是否应该将新表放在同一个SQL数据库或新的SQL数据库中

这一切都在MS SQL Server上运行


当我做出这个决定时需要考虑哪些因素?< /P> < P>数据库是备份和恢复的单元,因此在设计数据库结构时应该首先考虑。如果数据具有不同的备份和恢复要求,则它们非常适合作为单独数据库的候选者

不过,这只是问题的一半。在大多数环境中,所有数据库的备份/恢复几乎相同。它成为应用程序设计的问题。换句话说,情况变得相当主观

在我目前工作的环境中,以下是将数据拆分为不同数据库的一些标准:

1向广大受众发布表格。我们在表中发布数据,并将其放入数据库中,与用于构建数据或用于特殊目的的其他表分开。无可否认,SQLServer声称模式是安全性的单位。然而,数据库在现实世界中似乎做得很好

2严格的安全要求。有些数据是如此敏感,以至于律师必须批准谁能看到它。它进入自己的数据库,并具有自己的访问权限

3分离用户可以看到的数据表和描述生产系统的表

4由一组熟练的分析员将用于一般查询的表与用于特定报告/应用程序的表分开


最后,我要补充一点。如果一些数据在一天中不断更新,而其他数据用于报告,我倾向于将它们放在不同的数据库中。这有助于在出现问题时将它们分开。

数据库是备份和恢复的单元,因此在设计数据库结构时应首先考虑这一点。如果数据具有不同的备份和恢复要求,则它们非常适合作为单独数据库的候选者

不过,这只是问题的一半。在大多数环境中,所有数据库的备份/恢复几乎相同。它成为应用程序设计的问题。换句话说,情况变得相当主观

在我目前工作的环境中,以下是将数据拆分为不同数据库的一些标准:

1向广大受众发布表格。我们在表中发布数据,并将其放入数据库中,与用于构建数据或用于特殊目的的其他表分开。无可否认,SQLServer声称模式是安全性的单位。然而,数据库在现实世界中似乎做得很好

2严格的安全要求。有些数据是如此敏感,以至于律师必须批准谁能看到它。它进入自己的数据库,并具有自己的访问权限

3分离用户可以看到的数据表和描述生产系统的表

4由一组熟练的分析员将用于一般查询的表与用于特定报告/应用程序的表分开


最后,我要补充一点。如果一些数据在一天中不断更新,而其他数据用于报告,我倾向于将它们放在不同的数据库中。这有助于在问题的情况下将它们分开。

从你的问题中很难说出你的实际需求是什么,或者你会考虑存储在不同的数据库中的数据。但是,除了Gordon的观点之外,我还可以提出另外两个原因,说明为什么您可能希望对属于不同客户/用户的数据使用单独的数据库,这个答案假设一种可能的数据分离,无论是按数据库还是按模式,都是按客户:

正如我在评论中提到的,一些客户会要求单独存储他们的数据,在你看到一分钱或能够确保他们的业务之前,你可能需要书面同意。因此,你最好为这种必然性做好准备

将每个客户都保存在他们自己的数据库中,这样,如果他们超出了您当前的服务器,就可以很容易地移动他们。在我之前的工作中,我们以这种方式设计了这个系统,并在以后节省了我们的时间——我们能够通过本质上相当于元数据操作的方式将客户完全转移到不同的服务器。在维护窗口期间,备份他们的数据库,将原始数据库设置为脱机,将备份还原到新服务器,并更新一个配置表,该表告诉所有应用程序到何处 找到那个数据库。这比试图从他人共享的数据库中提取他们的所有数据要灵活得多

单独的数据库还允许您以不同的方式处理维护。一个客户需要时间点恢复,而另一个客户不需要?很好,您可以在不同的数据库上使用不同的恢复模型。比按文件组分离并尝试实施某些文件组级备份解决方案容易得多,而且比仅在完全恢复中处理一个大型数据库要高效得多。
当然,这不是免费的,而是权衡取舍。多个数据库吓跑了一些人,但管理这样一个系统13年后,我可以告诉你,管理100或500个基本相同的数据库并不比在一个大型数据库中管理500个模式复杂多少。事实上,我想说,在很多方面都不那么复杂。

从你的问题中很难判断您的实际需求是什么,或者您将考虑存储在不同数据库中的数据。但是,除了Gordon的观点之外,我还可以提出另外两个原因,说明为什么您可能希望对属于不同客户/用户的数据使用单独的数据库,这个答案假设一种可能的数据分离,无论是按数据库还是按模式,都是按客户:

正如我在评论中提到的,一些客户会要求单独存储他们的数据,在你看到一分钱或能够确保他们的业务之前,你可能需要书面同意。因此,你最好为这种必然性做好准备

将每个客户都保存在他们自己的数据库中,这样,如果他们超出了您当前的服务器,就可以很容易地移动他们。在我之前的工作中,我们以这种方式设计了这个系统,并在以后节省了我们的时间——我们能够通过本质上相当于元数据操作的方式将客户完全转移到不同的服务器。在维护窗口期间,备份他们的数据库,将原始数据库设置为脱机,将备份还原到新服务器,并更新一个配置表,该表告诉所有应用程序在哪里可以找到该数据库。这比试图从他人共享的数据库中提取他们的所有数据要灵活得多

单独的数据库还允许您以不同的方式处理维护。一个客户需要时间点恢复,而另一个客户不需要?很好,您可以在不同的数据库上使用不同的恢复模型。比按文件组分离并尝试实施某些文件组级备份解决方案容易得多,而且比仅在完全恢复中处理一个大型数据库要高效得多。
当然,这不是免费的,而是权衡取舍。多个数据库吓跑了一些人,但在管理这样一个系统13年后,我可以告诉你,管理100或500个基本相同的数据库并不比在一个大型数据库中管理500个模式复杂多少。事实上,我想说,在很多方面,这一点都不那么复杂。

关系有多密切?外键和连接?@AaronBertrand,我不是问在这里做什么决定;我在问一般什么时候做这个决定。在某种程度上它仍然取决于你的要求,我真的没有看到任何要求。有多紧密的联系?外键和连接?@AaronBertrand,我不是问在这里做什么决定;我在问一般什么时候做这个决定。在某种程度上,它仍然取决于您的需求,我在这里没有真正的要求。对此,我补充说,我也看到了它通过性能来尝试通过设置数据库来使用单独的驱动器来在磁盘上分散负载。我还要指出,从技术角度来看,您不必为了安全而拆分数据库。您可以在模式和角色方面做很多工作,这成为应用程序设计的一个问题。换句话说,情况变得相当主观。这正是我所期望的。解决@JamieSee的评论,您还可以将不同的表放在不同的架构中或不放在不同的文件组中,以便在不同的磁盘上智能地分布I/O,而不需要使用不同的数据库进行逻辑数据库分离,这会使数据完整性成为一个问题。好的方面@Gordon,我还想补充一点,一些客户会要求将他们的数据单独存储,而且通常是受法律约束的。有些人只是不希望他们的数据与其他人的数据混合,不管是律师还是非律师。除此之外,我还要补充一点,我还看到,通过将数据库设置为使用单独的驱动器,尝试将负载分散在磁盘上,以提高性能。我还要指出,从技术角度来看,您不必为了安全而拆分数据库。您可以在模式和角色方面做很多工作,这成为应用程序设计的一个问题。换句话说,情况变得相当主观。这正是我所期望的。处理@JamieSee的注释,您还可以将不同的表放在不同的模式中或不放在不同的文件组中,以智能地扩展I/O
跨不同的磁盘而不使用单独的数据库进行逻辑数据库分离可能会使数据完整性成为一个问题。Good points@Gordon,我还想补充一点,一些客户会要求他们的数据单独存储,并且通常是受法律约束的。有些人只是不希望他们的数据与其他人的数据混淆,不管他们是不是律师。