1

我有 2 个问题。我正在开发一个使用标准 ASP.NET 成员资格的 ASP.NET Web 应用程序。我们打算将成员表放在 1 个数据库中。我们还有 2 个其他数据库,用于存储 2 个不同应用程序的数据。

Shared - Membership info
DB1 - Application1
DB2 - Application2

两个应用程序都使用“共享”数据库中的成员信息。共享数据库有一个名为 userdetals 的表,它将存储其他用户的信息,例如姓名、电话和职位。

但是,DB1 也有一个名为 employees 的表,它存储与姓名、电话和职位相同的字段。每个员工都可以是一个用户。

同样对于 DB1 和 DB2 中的每个表,我们都进行审计试验,即哪个用户更新了数据库中的表。因此,我们需要将 UserID 存储在 DB1 和 DB2 的表中。我们考虑在 DB1 和 DB2 中添加一个用户表。因此,每次在 Shared 中创建新用户时,都会在 DB1 和 DB2 的 Users 表中创建相同的用户。

我们的问题是:

  1. 鉴于上述设置,维护数据库完整性的最佳方法是什么?例如,每个员工都被分配为一个用户。如果 DB1 中的任何字段(例如用户名、姓名和电话)被更新,那么 Shared DB 中的相同字段也应该被更新,反之亦然。

  2. 在我们的案例中,是否建议将会员数据库放在不同的数据库中?什么是最好的解决方案,因为 DB1 和 DB2 中的几乎所有表都引用共享数据库中的用户 ID。

4

2 回答 2

2

1. 您正在寻找的技术是 Merge Replication ( http://bit.ly/KUtkPl )。本质上,您将在两个数据库上创建一个通用的用户表,在一个应用程序数据库上创建一个合并复制发布者,然后在另一个应用程序数据库上创建一个合并复制订阅者。你也可以设置它来同步模式(这也意味着你只需要在发布数据库上创建一次表:它将把表、模式和数据推送给订阅者)。

但是,如果您正在寻找更多的手动方法,我不会将用户数据非规范化为员工表,而是在每个应用程序服务器上创建一个补充表和一个视图。有点像 OOP 中的继承:Employee 表和 Users 表之间的任何公共数据都保留在共享的用户表上。Employee 的任何唯一列,仅添加到补充表并存储在每个数据库中。该视图将合并补充表和共享表。( http://bit.ly/9KPxt0 )

即使您确实使用复制服务,我仍然会将此视图设计与同步表一起使用。

您可以通过视图进行更新,但我不建议这样做。它之前已经在生产中成功完成,但是有太多的限制可能会爆炸(http://bit.ly/LJCJev)。而是直接更新保存数据的表。

绝对避免“同步的触发器”。风险太大(可能导致 SQL 服务器上的婴儿循环)和过多的维护开销。

2.我会做Merge Replication,配置正确后你就不用担心和维护了。但是,如果您需要更多手动操作,或者您不熟悉 SQL 中的复制服务,您的方法是可以的……只需使用上面提到的视图,您就可以设置好了。

于 2012-05-27T23:22:23.007 回答
0

简单的方法:

您可以为这些数据库创建链接服务器。然后创建同义词以轻松访问每个数据库的表。创建触发器以在每个表上更新任何数据时更新数据。

于 2012-05-28T12:24:06.923 回答