2014-03-27 73 views
0

我正在開發一個使用ASP.NET MVC + WebAPI + AngularJS的系統,它具有以下屬性:用戶可以登錄,不同的用戶擁有完全不同的數據。原因很簡單:系統允許管理數據,但儘管每個人的架構都是相同的,但數據在用戶之間完全斷開。即使由於組織,一致性和安全性,每個用戶都需要一個單獨的數據庫。這是根據用戶選擇數據庫的好方法嗎?

這會產生一個問題:雖然每個數據庫應該是相同的,即相同的表和列,因此EF數據上下文相同,但連接是不同的。這使我感到困惑,因爲我習慣於在配置XML文件中指定連接字符串,並且在這裏無法完成,因爲連接字符串是動態的。

然後我想到了一個解決方案,如果它是最好的解決方案,我現在不會這樣做:我創建一個存儲庫,它在構建中會接收登錄用戶的用戶名。然後,存儲庫將進入系統的數據庫並查找登錄用戶的連接數據(當用戶註冊時將會通知該數據)。然後,存儲庫將生成連接字符串並將其提供給DbContext

這是一個很好的方法來解決這個問題嗎?或者有更多的建議方式來處理這種事情?安全問題在這裏是一個重要的問題,因此我不確定我的方法。

+2

「每個用戶需要一個單獨的數據庫」 - 這是你的問題。你絕對沒有理由爲每個用戶需要一個單獨的數據庫。這太瘋狂了。關係數據庫的關鍵在於您在相關記錄之間創建關係。您不會爲不同的數據集創建單獨的數據庫。 –

+0

我想你在談論多租戶嗎?每個租戶數據的安全可以在許多地方實現,其中一個地方有獨立的數據庫。您是否考慮過使用一個數據庫,併爲每個租戶使用數據訪問權限? –

+0

@AntP原因如下:每個用戶使用該系統來管理有關其特定公司的數據。因爲如果系統有10個用戶,每個用戶擁有自己的產品表,它自己的客戶表等等,似乎更好。既然是不同的公司使用這個系統,對我來說保持數據分離似乎更好,即使是爲了避免太大的表格,當新用戶來的時候會繼續增長。 RussCam,你認爲你提出的這種方法更好,即使考慮到我說的這一點?對不起,如果我說廢話,我還沒有非常熟悉數據庫。 – user1620696

回答

2

實體框架解決方案中的每個數據上下文都有一個構造函數重載,允許您指定連接字符串。您可以在下面的鏈接中找到如何構建和使用該連接字符串。

參考
How to: Build an EntityConnection Connection String

這就是說,除非你有非常特殊的要求,這是從維護和運營的角度來看好得多簡單地把用戶名在適當的表格,並在當前登錄的過濾器用戶名。

0

每個用戶一個數據庫對我來說似乎是一個瘋狂的解決方案。

在包含的每個用戶表中包含user_id列,並對其進行適當的過濾。

0

我認爲這取決於您的每個用戶數據庫的複雜程度。如果我們談論5-10個表格,那麼爲所有表格添加,管理和查詢添加標識列比管理多個數據庫更容易。但是模型越複雜,數據庫中的表格越多,那麼只要每個用戶有一個數據庫,而每個表又多一列,並且必須將用戶檢查添加到所有查詢。特別是更復雜的。

性能也同樣如此。如果您希望用戶數據庫的數據量增長很多,那麼擁有單獨的數據庫可以允許您通過將不同的數據庫放入不同的服務器來進行水平擴展。

如果用戶請求原始數據訪問,共享數據庫也會出現問題。它可能會發生,例如他們想要遷移數據時。

相關問題