[英]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_id
是PRIMARY KEY
的一部分一样) 换句话说,如果您真的不喜欢实体的复合键,则可以在没有它们的情况下设计数据库。
除非你为每个客户重复其他id(你可能有两个或更多的animal_id = 1),否则没有理由让它成为一个复合键。 您只需添加该字段即可。 这对我们有用。
您真的需要支持具有相同ANIMAL_ID
值的两个不同租户吗? 无论您使用什么机制来生成看似合成的主键值,都应该能够生成跨租户唯一的值。 向表中添加TENANT_ID
列可能有意义,但将其添加到主键并不明显是有益的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.