1

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

现在我遇到的问题是,我的一些团队成员觉得我们正在做的是混乱和摩擦,因为它有点痛苦如何让我的应用程序显示在他们的职位旁边的用户名是一个非常普遍的任务。首先,我必须进入应用程序数据库并执行诸如SELECT userID, postText FROM tblPosts之类的操作,然后我必须执行userID并转到用户数据库并使用SELECT name FROM tblUsers WHERE userID = X获取实际名称。然后将这两个查询中的数据合并在一起,以便在页面上显示出来。

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

这似乎是人们可能遇到的常见问题。有人可以考虑处理问题的常用方法以及我们可能想要做的事情。

+2

你的方法并非不合理。 “代码很难”不是使规范非规范化的有效理由。听起来好像你会从对象或库中抽象出这些细节那样受益匪浅,所以你可以将这些数据放到任何地方,其余的同事/代码不必关心。 – 2013-05-10 16:57:28

+1

我同意Dave S.让所有人都编写代码一次,从公用表中选择用户名,并从各个表中选择用户标识。然后他们只是调用他们的例程来从公共表中获取用户名。 – 2013-05-10 17:06:31

回答

1

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

您已经简单干净地构建它。这更加巨大。这种事情很难得到解决,而且你已经做到了。

(如果你尝试与像LDAP或Active Directory一些系统构建这个,你有很多复杂的代码维护。)

不要让你的开发伙伴牺牲是优势他们的个人便利。如果您必须同步对用户数据库的更改,那么在事情不同步时会出现问题。这是问题,而不是如果问题。顺便说一句,如果你的用户数据库和网站特定的数据库在同一个MySQL服务器上,你可以做这样的事情来整合使用这两个不同的数据库。这可能会满足开发人员的需求。

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

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

相关问题