我有一个完整的多租户数据库,所有租户的数据库都有TenantID。这一切都很好,但现在我们需要允许租户数据库“链接到”共享数据。例如,用户可以创建自己的“银行”记录并将帐户链接到它们,但他们也可以将帐户链接到在所有租户之间共享的“全局”银行记录。
我需要一个优雅的解决方案来保持引用完整性。
迄今为止,我想出的方法有:
1.复制:所有共享数据都复制到每个租户,可能带有“系统”标志。对共享数据的更改涉及跨所有租户的大量更新。这可能是最简单的解决方案,但我不喜欢数据重复。
2.特殊ID:所有链接到共享数据的链接使用特殊ID(例如负ID号)。这些表示租户ID不应在关系中使用。您无法使用FK正确地强制执行此操作,并且如果您具有任何FK,则绝不能在租户内重用ID。只能使用触发器来确保完整性。
3.分离ID:所有可以链接到共享数据的表都有两个FK;一个使用TenantID并链接到本地数据,另一个不使用TenantID并链接到共享数据。约束指示要使用其中之一而不是两者。这可能是最“纯粹”的方法,但它似乎很丑陋,但也许不像其他方法那么丑陋。
所以,我的问题分为两个部分:
1.是否有任何我没有考虑的选项?
2.是否有人对这些选项有经验,并对优缺点有任何反馈?
我需要一个优雅的解决方案来保持引用完整性。
迄今为止,我想出的方法有:
1.复制:所有共享数据都复制到每个租户,可能带有“系统”标志。对共享数据的更改涉及跨所有租户的大量更新。这可能是最简单的解决方案,但我不喜欢数据重复。
2.特殊ID:所有链接到共享数据的链接使用特殊ID(例如负ID号)。这些表示租户ID不应在关系中使用。您无法使用FK正确地强制执行此操作,并且如果您具有任何FK,则绝不能在租户内重用ID。只能使用触发器来确保完整性。
3.分离ID:所有可以链接到共享数据的表都有两个FK;一个使用TenantID并链接到本地数据,另一个不使用TenantID并链接到共享数据。约束指示要使用其中之一而不是两者。这可能是最“纯粹”的方法,但它似乎很丑陋,但也许不像其他方法那么丑陋。
所以,我的问题分为两个部分:
1.是否有任何我没有考虑的选项?
2.是否有人对这些选项有经验,并对优缺点有任何反馈?