1

我有几个不同的 Web 应用程序,它们有自己独立的数据库。所有这些不同的 Web 应用程序还使用一个通用数据库进行身份验证,其中包含我所有用户的列表和用户名。为了简单起见,假设我的应用程序数据库就像一个论坛,它们跟踪用户的帖子;在表格中,他们将存储用户 ID 和一些帖子文本。

现在我遇到的问题是,我的一些团队成员觉得我们正在做的事情是混乱和摩擦的,因为如何让我的应用程序在他们的帖子旁边显示用户名有点痛苦,这是一项非常常见的任务。首先,我必须访问应用程序数据库并执行类似的操作,SELECT userID, postText FROM tblPosts然后我必须使用它userID并访问用户数据库并使用SELECT name FROM tblUsers WHERE userID = X. 然后将来自这两个查询的数据合并在一起以将其显示在页面上。

我个人并不介意我们这样做的方式,因为我认为只使用一个单独的用户数据库来保持数据的稳定性很重要,但是我的一些团队成员希望将所有用户名复制到本地应用程序数据库中,并且记录帖子时将用户名存储在用户 ID 旁边,这样可以非常简单地获取该信息。如果用户想要更改他们的名字(一个非常罕见的事件,我们只有大约 100 个用户),我们应该只在公共数据库以及所有应用程序数据库中运行更新。

这似乎是人们可能遇到的常见问题。有人可以权衡解决问题的常用方法以及我们可能想做的事情。

4

1 回答 1

1

您有一个具有有效单点登录方案(集中式用户身份和身份验证)的系统。这是一个巨大的竞争优势。

您已经简单而干净地构建了它。那甚至更大。这种事情很难做对,而你已经做到了。

(如果您尝试使用 LDAP 或 Active Directory 等系统来构建它,您将需要维护大量复杂的代码。)

不要让您的开发人员同事为了个人方便而牺牲这一优势。如果您必须将更改同步到用户数据库,那么当事情不同步时您将遇到问题。这是一个when问题,而不是if问题。

顺便说一句,如果你的用户数据库和网站特定的数据库在同一个 MySQL 服务器上,你可以做这样的事情来整合两个不同数据库的使用。这可能会满足您的开发人员的需求。

  SELECT u.username, d.opname
    FROM userdatabase.users u
    JOIN website.transaction d ON u.userid = d.userid

但是如果你这样做,你将很难在未来将你的各种网站数据库迁移到其他服务器机器上。

于 2013-05-10T18:07:14.517 回答