我有几个不同的Web应用程序,它们有自己独立的数据库。所有这些不同的Web应用程序也使用公共数据库进行身份验证,其中包含所有用户的列表和用户的名称。为了简单起见,我只想说我的应用程序数据库就像一个论坛,它们跟踪用户帖子;在表格中,他们将存储用户ID和一些帖子文本。
现在我遇到的问题是我的一些团队成员认为我们正在做的事情是混乱和摩擦,因为如何让我的应用程序在他们的帖子旁边显示一个用户名是一种痛苦共同的任务。首先,我必须转到应用程序数据库并执行SELECT userID, postText FROM tblPosts
之类的操作然后我必须使用userID
并转到用户数据库并使用SELECT name FROM tblUsers WHERE userID = X
获取实际名称。然后将这两个查询中的数据合并在一起,以便在页面上显示出来。
我个人并不介意我们这样做的方式,因为我认为仅使用一个单独的用户数据库来保持数据稳定性非常重要,但我的一些团队成员希望将所有用户名复制到本地应用程序数据库并在记录帖子时将用户名存储在userID旁边,因此它非常简单,可以将信息退回。如果用户想要更改他们的名称(一个非常罕见的事件,我们只有大约100个用户),我们应该在公共数据库以及所有应用程序数据库中运行更新。
这似乎是人们可能会遇到的常见问题。有人可以权衡处理问题的常用方法以及我们可能想做的事情。
答案 0 :(得分:1)
您的系统具有有效的单点登录方案(集中用户身份和身份验证)。这是一个巨大的竞争优势。
你已经简单而干净地建造了它。那更加巨大。这种事情很难做到,你已经做到了。
(如果您尝试使用LDAP或Active Directory等系统进行构建,则需要维护很多复杂的代码。)
不要让你的开发者为了个人便利而牺牲这些优势。如果必须将更改同步到用户数据库,那么当事情不同步时,将出现问题。这是时的问题,而不是 if 问题。
顺便说一句,如果您的用户数据库和网站特定数据库位于同一个MySQL服务器上,您可以执行此类操作来集成两个不同数据库的使用。这可能会满足开发人员的需求。
SELECT u.username, d.opname
FROM userdatabase.users u
JOIN website.transaction d ON u.userid = d.userid
但如果你这样做,将来很难将各种网站数据库迁移到其他服务器机器上。