2011-04-20 44 views
0

我們開發的服務是爲每個客戶端用戶可以進行預約。 是否有戰略 - 數據庫中的表(MS SQL SERVER)爲每個客戶端將是正確的?每個客戶端在數據庫中的表格

我們認爲這樣的策略可以簡化並排除複雜的表鎖。

回答

0

聽起來你正在嘗試構建一個多租戶應用程序。我不會爲每個客戶推薦一張桌子。相反,我會建議兩種解決方案之一:

  1. 所有客戶(承租人)的數據集成到同一個表和標識分離。換句話說,每個頂級表都會有一個名爲「ClientId」或「TenantId」的外鍵,用於識別和分離每個客戶的數據。這種方法的缺點是數據庫的速度要快得多,大型數據庫管理較小的數據庫會更加複雜。另外,開發人員構建的查詢可能會忘記在ClientId上進行過濾,而且一個客戶端會看到另一個客戶端的數據。

  2. 每個客戶端一個數據庫。一個更極端的解決方案,但是如果客戶將託管他們自己的應用程序,每個客戶數據的大小差異很大,或者客戶需要絕對保證數據分離,那麼這個解決方案就很有用。

+0

我認爲與外鍵的情況是不適用的,因爲從一個表中有限制高達256。另一方面,我們應該爲每個客戶存儲一張包含數據的表格。因爲在並行工作的情況下,許多用戶(100-1000)可以訪問一個表;如果每個客戶端有一個表,它將是1-10個用戶。 – Alexandr 2011-04-21 08:45:21

+0

@Alexandr - 咦?每個頂級表中都會有*一個*外鍵列來引用一個客戶表。 – Thomas 2011-04-21 16:19:02

+0

@Alexandr - 我絕對不建議爲每個客戶添加一個FK列。這是沒有意義的,並且不是標準化的,也是不必要的。相反,每個頂級表都將包含* all *客戶端的數據,您可以將一個客戶端的數據與另一個客戶端的數據通過FK的單個列區分爲客戶端表。 – Thomas 2011-04-21 16:26:08

相關問題