簡體   English   中英

多租戶設計 - 在模式之間共享數據

[英]Multi tenancy design - sharing data between schemas

讓我們考慮這樣的情況:

  1. 用戶可以擁有一家公司(或其中許多)
  2. 用戶可以是公司的一部分(或其中許多公司的一部分)
  3. 公司是系統的單一租戶
  4. 公司有任務清單
  5. 每個任務分配給一個用戶

現在考慮到上述情況,我想實現一個系統,其中每個公司(租戶)都有一個單獨的任務模式,但問題是對於每個任務,我還需要來自主模式的用戶數據。

問題是如何解決這個問題

我想到的可能的解決方案(但沒有一個真正讓我信服):

  1. 將與公司匹配的所有用戶數據復制到公司的架構(這需要大量的同步,因此我認為它不是很有效)
  2. 在模式之間切換並以編程方式“合並”它們 - 這涉及許多額外的代碼來實現,它違反了良好的做法 - 因為任務中的 user_id 將到達 tanant 的模式之外)

我希望有一個我沒有想到的更好的解決方案。 請注意,這是一個簡化的案例,只是為了描述問題。

聽起來您想要一些表,例如userscompaniestasks和相關表。

通常,您不希望跨多個表拆分實體。 以下是一些原因。

  1. 維護少數表比維護成百上千個表更容易。
  2. 數據庫在較大的表上有效。 小表的激增導致單個實體出現大量部分填充的數據頁。
  3. 某些查詢——例如每家公司有多少任務——使用單個表要容易得多。
  4. 對於多個表,這樣的查詢通常需要求助於動態 SQL,這對於簡單的任務來說只是一團糟。
  5. 當您必須將重構應用於數以萬計的表而不是少數表時,重構數據就變成了一場噩夢。
  6. 添加新功能是一場噩夢,因為它必須重復多次。

在一些罕見的情況下,分離數據是有意義的。 例如,如果應用程序將在每個公司內部部署,那么您別無選擇。 同樣,您可能有將數據物理隔離的法律要求。 但是從嚴格的數據庫設計角度來看,您需要每個實體一個表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM