Sql server 2008 一个大数据库,还是每个客户端一个?

Sql server 2008 一个大数据库,还是每个客户端一个?,sql-server-2008,Sql Server 2008,我被要求开发一个应用程序,将运行到一些业务单位。每个单元的应用程序基本相同,但程序上有细微的差异,这不会改变底层数据库的结构。我应该为每个业务单元使用一个数据库,还是为所有单元使用一个大型数据库?业务部门是完全独立的我的首选是每个客户一个数据库。优点: 如果客户端太大,它们很容易移动—备份、恢复、更改连接字符串,等等。当他们的数据与大型数据库中的其他数据混合在一起时,可以尝试这样做。即使使用模式和文件组进行隔离,移动它们也不是一件容易的事 同上,用于在客户继续移动时删除其数据 根据定义,您将每

我被要求开发一个应用程序,将运行到一些业务单位。每个单元的应用程序基本相同,但程序上有细微的差异,这不会改变底层数据库的结构。我应该为每个业务单元使用一个数据库,还是为所有单元使用一个大型数据库?业务部门是完全独立的

我的首选是每个客户一个数据库。优点:

  • 如果客户端太大,它们很容易移动—备份、恢复、更改连接字符串,等等。当他们的数据与大型数据库中的其他数据混合在一起时,可以尝试这样做。即使使用模式和文件组进行隔离,移动它们也不是一件容易的事

  • 同上,用于在客户继续移动时删除其数据

  • 根据定义,您将每个客户的数据分开。这通常是一种需要,有时也是一种需要。有时它甚至具有法律约束力

  • 数据库中的所有代码都比较简单——它不必包含客户机的模式(无法参数化),也不必在表中添加指示客户机的额外列

很多人会说,管理200或500个数据库比管理10个数据库要困难得多。根据我的经验,这其实没什么不同。您可以构建自动化的脚本、错开索引维护和备份作业等

潜在的缺点是,当您进入每个实例都有4位数或更高的数据库的领域时,您希望开始考虑拥有多个服务器(阈值实际上取决于工作负载和硬件,所以我只选择一个数字)。如果您构建了正确的系统,那么添加第二台服务器并在那里放置新的数据库应该非常简单。同样,应用程序应该知道每个客户端的连接字符串,而您使用不同服务器所做的只是更改连接字符串指向的实例

关于dba.SE的一些问题,您应该看看。它们并非都是关于SQL Server的,但许多概念和挑战都是通用的:


你的问题是一个设计问题。为了回答这个问题,您需要了解您想要构建的系统的需求。从技术角度来看,SQL Server——或者任何数据库——都可以处理这两种情况

这里有一些事情需要考虑

第一个问题是您的客户需要如何将数据分开。在某些情况下(例如,银行的投资方和市场分析方),将不同业务部门的数据混合在一起可能是不合法的。在这种情况下,单独的数据库是解决方案

下一个问题是安全。在某些情况下,客户可能会因为知道他们的数据与其他客户的数据混合在一起而感到非常不舒服。一个小失误,机密信息被无意中分享。对于同一家公司的不同业务部门来说,这可能不是一个问题

您是否必须处理不同的正常运行时间要求、上传要求、定制,以及可能与其他工具的交互?如果一个业务单元需要其他业务单元不感兴趣的尽快定制,则建议使用不同的数据库

另一个考虑因素是性能。此应用程序是否使用了大量昂贵的资源?如果是这样的话,能够在不同的数据库(可能是不同的服务器)上对应用程序进行分区可能是非常理想的


另一方面,如果大部分数据都是共享的,并且存储库实际上是一个具有相同底层功能的中央存储库,那么一个数据库是一个不错的选择。

非常感谢Aaron,你几乎完全符合我的想法。感谢Gordon,我的客户完全是不同的企业,但在同一领域,因此,我认为“独立但平等”的数据库就是答案。