Pat*_*rik 4 sql database postgresql multi-tenant database-schema
我正在设计一个用于多租户场景的数据库。我最近了解到,为了强制相互引用的表之间的tenant_ids 保持一致,我需要让表的主键既包含表id 又包含tenant_id。然后,外键必须引用表 id 和tenant_id。
这似乎按预期工作,但如果我有不引用租户的表怎么办?在下面的示例中,我有一个不直接引用租户的 playlist_item。我在这里看到的一个问题是 playlist_item 可能引用的内容与其所属的播放列表没有相同的租户。
一个可能的解决方案是将tenant_id包含到数据库中存在的所有表中,以便能够始终引用租户,但这对我来说似乎有点麻烦,因为playlist_item(在本例中)已经有一个通过其与播放列表的所有者关系隐含的tenant_id。
我希望了解在这种情况下什么是好的解决方案,以及是否有任何替代方法可以实现相同的目标,而不会产生数据不一致的潜在风险。
(这只是一个示例,不是实际的数据库)
这里有两个基本选项。
第一个是添加额外的外键和唯一约束,其中包括 a tenant_id,如果这样做,您可以确保全面引用同一个租户。如果您想使用行级安全策略,请执行此操作,因为它将解决检查安全性时的一系列性能问题。
在这种情况下,播放列表将具有第二个唯一索引(id, tenant_id),并且 playlist_item 将具有引用该索引的外键(playlist_id, tenant_id)。
您的第二个选择是删除tenant_id传递引用的位置。在这种情况下,您始终可以通过联接来查找它,但是当绑定使用行级安全性时,这种方法的性能很差。
| 归档时间: |
|
| 查看次数: |
1874 次 |
| 最近记录: |