多租户数据库与一些共享数据

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

6
一位同事给了我一个很好的想法。不要将租户访问视为按租户进行,而是将其视为组访问。一个租户可以属于多个组,包括它自己指定的组。数据则属于一个组,可能是租户特定的组,也可能是更一般的组。
因此,“我的银行”将属于租户的组,“本地银行”将属于租户具有访问权限的区域分组,“全球银行”将属于“所有人”组。
这样可以保持完整性、外键,并且还可以添加租户层次结构的可能性,在我的情况下并不需要,但是这是一个不错的小可能性。

0
Citus,我们正在使用PostgreSQL构建一个多租户数据库。对于共享信息,我们将其保存在我们所谓的"参考"表中,这些表确实在所有节点上都被复制。但是,我们使用2PC保持此数据同步和一致,并且还可以在参考数据和非参考数据之间创建FK关系。您可以在此处找到更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接