2013-04-25 75 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 

替代方案是使用某种形式的复制到所有数据库中或修改程序中的数据复制,使他们不依赖于用户的数据。