我正在设计一个纯多租户数据库(一个数据库,一个模式),我想在我的大多数表中保留一个Tenant_Id作为安全措施,以确保数据不会出错租客的手。看起来这需要每个表上都有一个复合键。
示例:
在单租户情况下,我会有一个主键:
Animal_Id (PK)
Animal_Type
Animal_Name
在多租户情况下,我会为Tenant_Id添加另一个主键:
Animal_Id (PK)
Tenant_Id (PK)
Animal_Type
Animal_Name
在每个表中添加Tenant_Id列是否意味着我需要在每个表中都有一个复合键,或者是否有安全的方法来避免这种情况?复合键没关系,但如果可以,我想避免使用它们。
答案 0 :(得分:5)
如果您的所有ID都是自动增量整数,则可以添加tenant_id
这不是主键的一部分,只需在所有查询中检查它。
但是,这有几个副作用,您可能会或可能不会将其视为缺点:
FOREIGN KEY
约束不会阻止您这样做(因为tenant_id
是一个部分PRIMARY KEY
)换句话说,如果你真的不喜欢实体的复合键,可以不用它们来设计数据库。
答案 1 :(得分:4)
除非你为每个客户重复另一个id(你可能有两个或更多的animal_id = 1),否则没有理由让它成为一个复合键。您只需添加该字段即可。这对我们有用。
答案 2 :(得分:1)
您真的需要支持具有相同ANIMAL_ID
值的两个不同租户吗?无论您使用什么机制来生成看似合成的主键值,都应该能够生成跨租户唯一的值。向表中添加TENANT_ID
列可能有意义,但将其添加到主键并不明显是有益的。