2013-03-04 41 views
3

背景
建立一個online information system哪個用戶可以通過任何計算機訪問。我不想爲每個大學或組織複製數據庫和代碼。
我只是想讓用戶打到像www.example.com這樣的域名登錄並使用它。
對於第二個用戶,它也會碰到相同的域名www.example.com登錄並使用它。但他們的數據是不同的。
場景
假設一所大學有200名員工,第二所大學有150名,等等。
Qusetion
如何處理單個數據庫的不同組織?

我是否需要有獨立的職員表,每所大學還是確定有一個表與具有大學ID列?

我認爲第二是最好的,但假設我有20所大學或組織和總共數千名員工。

什麼是最佳方法?

這同樣的事情是所有表?這只是給你一個例子。
謝謝

+2

可以使用具有大學ID的列的單個表。 – 2013-03-04 20:02:20

回答

3

該方法將取決於數據,使用情況和客戶要求/限制。

  1. 按照duffymo的建議使用集成模型。如果每個組織都是更大的整體的一部分(即所有大學都是州立大學委員會的一部分),並且關於交叉查詢訪問的安全性問題很少,這可能是合適的。這種方法在每個組織之間具有最小的分離量,因爲相同的模式和關係是「公開」共享的。它最初導致一個非常簡單的模型,但如果需要關係組織特定的值,因爲它增加了另一個維度的數據,它會變得非常複雜(使用複合FK和這樣的正確用法)。

  2. Implement multi-tenancy。這可以通過關係上的隱式過濾器(可能隱藏在視圖和存儲過程之後),不同的模式或其他特定於數據庫的支持來實現。根據實現的不同,即使所有數據都可能駐留在同一個數據庫中,也可能不共享模式或關係。通過隱式隔離,可以隱藏/消除一些複雜的鍵或關係。多租戶隔離通常也使得交叉查詢變得困難/不可能。

  3. Silo the databases完全。每個客戶或「組織」都有一個單獨的數據庫。這意味着單獨的關係和模式組。我發現這種方法對自動化工具來說相對簡單,但它確實需要管理多個數據庫。直接交叉查詢是不可能的,但如果需要的話可以使用「鏈接數據庫」。

即使它不是「一個DB」,在我們的例子中,我們沒有允許過份額/暴露組織之間的數據如下限制1),2)每個組織希望自己的本地數據庫。因此,我們的產品最終採用了筒倉方法。確保選擇的方法符合客戶的要求。

只要索引和查詢是正確計劃的,這些方法都不會對「數千」,「數十萬」甚至「數百萬」記錄產生任何問題。但是,從一個切換到另一個可能會違反許多假設的約束條件,因此應該儘早做出決定。


在該響應我使用「模式」指數據庫對象的安全分組(例如表,視圖),而不是數據庫模型本身。實際使用的數據庫模型可以是通用/共享的,就像我們使用單獨的數據庫時一樣。

綜合方法並不一定是不安全的 - 但它本質上並不具有其他設計的某些內置隔離。

2

我會規範化它有大學和僱員表,並有他們之間的一對多關係。

您必須小心確保只有與某所大學相關的人才能看到他們的數據。基於角色的訪問將很重要。

2

這被稱爲多租戶體系結構。你應該閱讀:

http://msdn.microsoft.com/en-us/library/aa479086.aspx

我會去與租客每架構,這意味着複製在不同的模式結構,但是,你應該保留所有的SQL DDL的源代碼控制,這是很容易腳本。

如果在同一張桌子上這樣做,很容易搞砸和「泄漏」租戶之間的信息。

+0

thnx這真的很有幫助。 – 2013-05-27 17:25:53