我有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中添加一个Users表。因此,每次在Shared中创建新用户时,将在DB1和DB2中的Users表中创建相同的用户。
我们的问题是:
在上述设置下,保持数据库完整性的最佳方法是什么?例如。每个员工都被指定为用户。如果DB1中的任何字段(如用户名,姓名和电话)都已更新,则应更新共享数据库中的相同字段,反之亦然。
在我们的案例中,是否建议将成员资格数据库放在不同的数据库中?什么是最佳解决方案,因为DB1和DB2中的几乎所有表都引用了共享数据库中的userID。
答案 0 :(得分:2)
1。 您正在寻找的技术是合并复制(http://bit.ly/KUtkPl)。实际上,您将在两个数据库上创建公共Users表,在一个应用程序数据库上创建合并复制发布者,然后在另一个应用程序数据库上创建合并复制订户。您也可以将其设置为同步模式(这也意味着您只需要在发布数据库上创建一次表:它会将表,包含数据的模式推送到订阅者)。
但是,如果您正在寻找更多的手动方法,我不会将用户数据反规范化为employee(s)表,而是在每个Application服务器上创建补充表和视图。类似于OOP中的继承:Employee表和Users表之间的任何公共数据都留在共享用户表上。 Employee的任何唯一列,仅添加到补充表并存储在每个数据库中。该视图将合并补充表和共享表。 (http://bit.ly/9KPxt0)
即使您确实使用了复制服务,我仍然会将此视图设计与同步表一起使用。
您可以通过视图进行更新,但我不建议这样做。它已在成功投入生产之前完成,但有太多限制可能会爆炸(http://bit.ly/LJCJev)。而是直接更新包含数据的表。
绝对避免“同步触发器”。风险太大(可能导致SQL服务器上的婴儿循环)和过多的维护开销。
2。 我会进行合并复制,在正确配置后,您不必担心和维护。但是如果你想要更多的手册或者你不熟悉SQL中的复制服务,你的方法是可以的......只需使用上面提到的视图就可以了。
答案 1 :(得分:0)
简单方法:
您可以为这些数据库创建链接服务器。 然后创建同义词以轻松访问每个数据库的表。 在每个表上更新任何数据时创建触发器以更新数据。