具有单个共享数据库的多租户数据库

时间:2011-07-06 15:14:20

标签: sql-server foreign-keys shared multi-tenant

我们正在使用.net mvc和sqlserver db。

修改

我们也使用NHibernate进行数据访问。我提到这个是因为我们不会编写自己的sql或者执行存储过程。数据库中的触发器可能有效,但我不知道您是否可以在数据库之间执行此操作。

结束编辑

我们希望设置一个多租户,这样每个客户端都有自己的db实例。但是,我们需要让每个租户连接到另一个拥有大量用户信息的数据库。它们之间会有一些少量的共享数据。基本上,租户将引用共享数据库中用户的数据。

这个想法是有些人只使用共享数据库(独立客户端),然后他们可能会被其中一个租户客户雇用。然后,租户将需要访问共享数据库中的新员工数据。此外,员工可以离开一个租户并加入另一个租户或离开一个租户并保持独立并希望访问他们的数据。我们当然可以在每个租户中拥有共享数据库架构,并且每次离开或加入时都会进行大量导出导入,但这似乎也很麻烦。

我正在询问有关如何管理租户将引用共享数据库但没有引用完整性这一事实的任何建议。或者,如果有替代方法或其他什么。 谢谢, Raif

1 个答案:

答案 0 :(得分:2)

在数据库中,您必须放弃声明性引用完整性(外键)。但是你仍然可以使用after或者代替触发器强制执行此操作(如果你认为你需要),或者如果你通过存储过程控制所有数据操作,你可以在那里执行(例如,在插入或更新时,你可以先检查,或作为修改的一部分,加入或使用EXISTS对照其他数据库中的表,以确保使用有效值。

我使用过多租户模型,可以带来巨大的收益,这些收益值得花费(例如在某些情况下放弃DRI)。对于主要是参考数据且不是自由文本输入的内容,不应该需要额外的大量工作。