2013-04-25 77 views
0

我有一個mssql數據庫與約6個不同的應用程序的用戶表和表。每個應用程序在數據庫中都有自己的模式。當用戶登錄時,用戶將顯示他有權訪問的應用程序列表。單一登錄和數據庫查詢

我想分離用戶表和應用程序到他們自己的數據庫有兩個主要原因。

  1. 可擴展性
  2. 維護

該項目的第一步是用戶表移動到它自己的數據庫。然後使用web API服務允許任何應用程序與數據進行交互。例如 - IsUserValid,CreateUser,UpdatePassword ....

我看到的問題是,某些應用程序存儲了使用聯接調用用戶表的過程。例如: SELECT user.username,user.firstname,user.lastname,app.column1,app.column2 from users inner join app on users.username = app.username

有沒有一種優雅的方法可以解決這個問題?我知道我可以在兩個單獨的數據庫中連接兩個表,但我希望能夠將應用程序數據庫和用戶數據庫移動到不同的服務器上。

+0

這是我以前想要使用asp_net成員資格數據庫(因爲它有所有很多很酷的功能)相同的問題。你不能從另一個數據庫中FK。一個建議的解決方案是在每個數據庫中創建一個dbo.UserInfo表。我們將在asp_net成員數據庫中創建用戶......然後有一個小工具可以將asp_net用戶與應用程序「鏈接」。但在我們的「鏈接」中,我們只將用戶的PK寫入單獨的應用程序數據庫。因此每個db都有自己的「複製」,它將FK關閉。當用戶從應用程序中「取消鏈接」時,我們還包括一個「軟刪除」狀態列 – granadaCoder 2013-04-25 21:44:13

+0

。 (你可以編寫更多代碼來級聯刪除每個應用程序數據庫中的信息(當用戶從​​asp_net成員數據庫中刪除時).......但我們只使用了軟刪除標記 – granadaCoder 2013-04-25 21:46:09

+0

另一個說明我們保留MyApplication.dbo.UserInfo表非常「苗條」,只有FK到asp_net memmbership(Users)表和軟刪除標記如果我們有特定應用程序數據庫中關於任何用戶的額外「屬性數據」,我們有一個額外的MyApplication.dbo.UserExtraInfo表。這是值得商榷的,但這就是我們所追求的。 – granadaCoder 2013-04-25 21:48:40

回答

0

您可以隨時創建linked servers並跨多臺服務器查詢數據。

SELECT * FROM schema.Table1 t1 JOIN server2.schema2.Table2 t2 ON t1.UserId = t2.UserId 

替代方案是使用某種形式的複製到所有數據庫中或修改程序中的數據複製,使他們不依賴於用戶的數據。