繁体   English   中英

多租户数据库中的复合键

[英]Composite keys in a Multi-tenant database

我正在设计一个纯多租户数据库(一个数据库,一个模式),我想在我的大多数表中保留一个Tenant_Id作为安全措施,以确保数据不会落入错误的租户手中。 看起来这需要每个表上的复合键。

例:

在单租户情况下,我会有一个主键:

Animal_Id (PK)  
Animal_Type  
Animal_Name  

在多租户情况下,我会为Tenant_Id添加另一个主键:

Animal_Id (PK)  
Tenant_Id (PK)  
Animal_Type  
Animal_Name  

是否在每个表中添加一个Tenant_Id列意味着我需要在每个表中都有一个复合键,或者有一种安全的方法可以避免这种情况吗? 复合键是可以的,但如果可以,我想避免使用它们。

如果所有id都是自动增量整数,则可以添加不属于主键的tenant_id ,只需在所有查询中检查它。

但是,这有几个副作用,您可能会或可能不会将其视为缺点:

  • 您可以在多对多链接表中链接来自不同租户的两个实体, FOREIGN KEY约束不会阻止您这样做(就像tenant_idPRIMARY KEY的一部分一样)
  • 您的用户可以评估ID中有多少其他租户
  • 您还必须将实体表加入到搜索中,这些搜索可能只能从多对多链接表中进行(以检查租户)

换句话说,如果您真的不喜欢实体的复合键,则可以在没有它们的情况下设计数据库。

除非你为每个客户重复其他id(你可能有两个或更多的animal_id = 1),否则没有理由让它成为一个复合键。 您只需添加该字段即可。 这对我们有用。

您真的需要支持具有相同ANIMAL_ID值的两个不同租户吗? 无论您使用什么机制来生成看似合成的主键值,都应该能够生成跨租户唯一的值。 向表中添加TENANT_ID列可能有意义,但将其添加到主键并不明显是有益的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM