目前正致力于预订管理系统。这是一个多租户申请,将有大约50个租户。
我们计划在某些托管服务提供商(如winasp.net等)中托管此ASP.Net MVC4/SQL Server 2008
应用程序(尚待决定)
Business Model Diagram
上面的图片中描述了超级管理员,租户管理员,客户服务,医生等多个级别的用户。
为了实现这个数据库模型,我们选择MSDN Multitenant Data Architecture
中提到的Shared Database with Shared Schema
方法
我们添加了一列TenantId in each table
我们的共享数据库&共享模式决策基于以下
没有租户(50 +)
轻松分享租户之间的常见元数据
如果租户拥有更多的数据,则将大租户(一个/两个)移动到单独的实例
我们现在正在进行中,我们仍然害怕解决以下问题
数据安全 - >每次都需要通过/检查TenantId
单个租户的备份 - >需要为备份编写SQL查询并考虑外键/自动增量是备份的头痛
数据量。单个数据库存储所有租户数据,查询数据很慢
索引(不确定我们是否需要索引每个表中的所有TenantId列,因为它涉及所有WHERE
还有其他选项,如
同样This Article
增加了一些方法
我们希望为我们当前的设计提供一些建议/更好的设计。
新方法符合上述业务图
租户管理员/客户服务用户必须能够查看子租户记录
查询执行情况
租户之间的共同元数据共享
租户特定元数据
租户特定数据字段(可选)
轻松备份
答案 0 :(得分:2)
在我看来,您应该重新考虑拥有共享数据库的决定。如果您因为机密性而需要严格的数据分离,那么您应该拥有单独的数据库。
索引(不确定我们是否需要索引每个表中的所有TenantId列,
因为它涉及所有WHERE
是的,您必须在每个表中对TenantId
编制索引并将其包含在所有查询中。
此外,在分析需求之前,您似乎已经决定使用SQL Server。存储多租户数据可能有更自然的解决方案,即。 RavenDB,它将使分片/备份更加简单。我不想开始讨论nosql等等 - 只是建议一个人应该从需求开始,然后选择合适的技术。