我需要设计一个代表多个“项目”的系统,每个客户在 SQL Server 中一个,类似于 StackExchange... 相同的数据模型,不同的站点(每个客户一个)。每个项目都有相同的数据模型,但独立于所有其他项目。我倾向于使用一个数据库来存储所有项目。您的建议是什么?
答案1
我会创建单独的数据库,因为否则,如果每个客户都使用类似的架构,您要么必须合并表,要么使用大量前缀,要么拥有包含客户识别信息的链接表。此外,如果客户有自己的数据库,管理客户数据的备份/恢复将容易得多。
在我看来,确实没有什么理由不使用单独的数据库。
答案2
独立数据库的一个缺点是模式变更的推出;如果您有几百个数据库,请准备好找到一种巧妙的方法来推送新表、存储过程、索引以进行升级。另一个缺点是,随着数据库数量的增加,镜像对于 DR 解决方案的吸引力会降低。
答案3
除非迫切需要将数据保存在一个地方,否则我建议将它们分开。这将使在服务器之间移动数据变得更容易(例如,当负载增长到成为问题的程度时,如果您想将它们拆分到多个数据库服务器上,或者如果客户想要付费将应用程序带入内部),它可以使备份和后续恢复更加方便(当然,取决于您使用的备份方法),并且它降低了代码错误允许客户端(意外或通过故意黑客攻击)查看彼此数据的风险。
答案4
正如 Cagenut 所说,这要视情况而定。然而...
从长远来看,每个客户一个数据库听起来可能会让事情变得更加困难。如果你最终有 100,000 个客户,会发生什么?SQL Server 能应付这么多数据库吗?你最终会有 100,000 个数据库备份吗?你将如何管理它?如果这会给你带来更多工作,那么既然以后可以更改,为什么现在要选择这个选项呢?
现在使用单个数据库可能是一个想法,但是想想如果你最终拥有非常多的客户端,你该如何对数据进行分区。