簡體   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