每个客户端一个数据库或一个数据库中的所有客户

时间:2016-12-18 11:26:23

标签: .net sql-server multi-tenant

我必须在SQL Server中为我的项目设计一个数据库结构,作为管理信息系统。

我有一个主数据库,每当新组织订阅我们的基于Web的应用程序时,我的系统就会为该客户端创建主数据库的新副本。随着时间的推移,客户端数量增加,因此客户端数据库的数量也会增加。

这是我使用的方法,还是我必须为所有客户使用一个数据库?

1 个答案:

答案 0 :(得分:1)

不,为每个客户创建一个数据库,假设客户端只是数据库中的一个实体而不是多租户应用程序的单独用户,这不是一个好主意。

如果要在客户端下注册其他实体(如硬件,项目或其他资源),则将其存储在单独的表中,并从资源到客户端创建外键,指示“has-a”关系

看起来像这样:

<强>客户

Id Name
1  Foo
2  Bar

<强>资源

Id ClientId Name 
1  1        Resource of Foo
2  1        Resource of Foo
3  2        Resource of Bar

您还可以使用多租户系统采用上述方法,其中应用程序的所有用户都在同一个数据库和应用程序上运行。

通过这种方法,你会有不同的顾虑。例如,单个数据库可能会超出比例,从而损害性能并简化备份和还原。您必须在整个应用程序中添加检查,以确保当前用户有权访问的行发生任何数据库访问。回滚一个用户的操作可能更难,并且为特定用户引入新功能(因为它们都在相同的软件和数据库模式上运行)。

详细了解“多租户”一词,这是您正在寻找的内容:

回答如何实现多租户会过于宽泛,例如请参阅上面链接中有关它的MSDN博客系列。至于表现问题:只有你知道。这完全取决于您的代码,数据,架构,硬件等。基准吧。