【发布时间】:2011-10-06 02:54:39
【问题描述】:
我有一个完整的多租户数据库,所有租户数据库上都有 TenantID。这一切都很好,除了现在我们需要允许租户数据库“链接到”共享数据。因此,例如,用户可以创建自己的“银行”记录并将账户链接到他们,但他们也可以将账户链接到所有租户共享的“全局”银行记录。
我需要一个优雅的解决方案来保持引用完整性
到目前为止我想出的方法:
- 复制:所有共享数据都复制到每个租户,可能带有“系统”标志。共享数据的更改涉及所有租户的大量更新。 可能是最简单的解决方案,但我不喜欢数据重复
- 特殊 ID:所有指向共享数据的链接都使用特殊 ID(例如负 ID 号)。这些表明 TenantID 不会在关系中使用。 您不能使用 FK 来正确执行此操作,如果您有任何 FK,当然也不能在租户内重用 ID。只有触发器可以用于完整性。
- 独立ID:所有可以链接到共享数据的表都有两个FK;一种使用 TenantID 并链接到本地数据,另一种不使用 TenantID 并链接到共享数据。约束表示要使用一个或另一个,而不是两者。 这可能是最“纯粹”的方法,但它看起来……丑陋,但可能不像其他方法那么丑陋。
所以,我的问题分为两部分:
- 有没有我没有考虑过的选项?
- 是否有人对这些选项有过使用经验并对优点/缺点有任何反馈?
【问题讨论】:
标签: sql-server foreign-keys shared multi-tenant