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

Sql server 具有单个共享数据库的多租户数据库,sql-server,foreign-keys,shared,multi-tenant,Sql Server,Foreign Keys,Shared,Multi Tenant,我们正在使用.NETMVC和SQLServerDB 编辑 我们还使用NHibernate进行数据访问。我之所以提到这一点,是因为我们不会编写自己的sql或执行存储过程。数据库中的触发器可能会工作,但我不知道是否可以在数据库之间执行 结束编辑 我们希望设置一个多租户,这样每个客户机都有自己的db实例。然而,我们需要让每个租户连接到另一个拥有大量用户信息的数据库。他们之间会有少量的共享数据。基本上,租户将引用共享数据库中用户的数据 想法是有些人只使用共享数据库(独立客户机),然后他们很可能会被其中一

我们正在使用.NETMVC和SQLServerDB

编辑

我们还使用NHibernate进行数据访问。我之所以提到这一点,是因为我们不会编写自己的sql或执行存储过程。数据库中的触发器可能会工作,但我不知道是否可以在数据库之间执行

结束编辑

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

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

我想了解如何管理租户将拥有对共享数据库的引用但没有引用完整性这一事实的任何建议。或者如果有另一种方法或者别的什么。 非常感谢。
Raif

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


我曾经使用过多租户模式,可以获得值得花费的巨大好处(例如,在某些情况下放弃DRI)。对于那些主要是参考数据而不是免费文本输入的内容,不需要做很多额外的工作。

您好,谢谢您的输入。我编辑了我的问题以表明我们使用的是nhibernate而不是存储过程。我不熟悉after或instead-of触发器这是我应该研究的吗?如果你想用共享数据强制引用完整性,是的,这肯定是一种方法。我很难说这是否有必要。嗯,是的,恐怕扳机不起作用。你看,我担心共享数据库中的数据会发生变化,并使租户陷入混乱。但我不能在共享数据库上设置触发器,然后说去找到合适的租户并更新那里的信息。共享数据库不会引用连接到它的租户。我想还不完全清楚共享数据是否特定于租户,是否应该,或者我们是否在谈论引用数据(例如,状态、时区、全局登录等)。我不认为我是在提倡触发器去更新其他数据库(如果你要把它放在两个地方,把它分开有什么意义?)。我提倡使用触发器,以确保进入该数据库的数据基于另一个数据库中的数据是有效的。我认为你需要的解决方案将比这里简单的问答复杂得多。