Mysql web应用程序间共享数据库设计模式

Mysql web应用程序间共享数据库设计模式,mysql,web-applications,database-design,relational-database,Mysql,Web Applications,Database Design,Relational Database,我有几个不同的web应用程序,它们有各自的数据库。所有这些不同的web应用程序还使用一个公共数据库进行身份验证,其中包含我的所有用户列表和用户名。简单来说,我的应用程序数据库就像一个论坛,它们跟踪用户的帖子;在这些表中,它们将存储一个用户ID和一些post文本 现在我遇到的问题是,我的一些团队成员觉得我们正在做的事情是混乱和摩擦的,因为如何让我的应用程序在他们的帖子旁边显示用户名是一种痛苦,这是一项非常常见的任务。首先,我必须转到应用程序数据库并执行类似于选择userID,从tblPosts中p

我有几个不同的web应用程序,它们有各自的数据库。所有这些不同的web应用程序还使用一个公共数据库进行身份验证,其中包含我的所有用户列表和用户名。简单来说,我的应用程序数据库就像一个论坛,它们跟踪用户的帖子;在这些表中,它们将存储一个用户ID和一些post文本

现在我遇到的问题是,我的一些团队成员觉得我们正在做的事情是混乱和摩擦的,因为如何让我的应用程序在他们的帖子旁边显示用户名是一种痛苦,这是一项非常常见的任务。首先,我必须转到应用程序数据库并执行类似于
选择userID,从tblPosts中postText
的操作,然后我必须获取该
userID
并转到用户数据库,并使用
从tblUsers中选择名称,其中userID=X
。然后将这两个查询中的数据合并在一起,将其显示在页面上

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


这似乎是人们经常遇到的问题。有没有人能介绍一下处理此问题的常用方法以及我们可能想要做的事情。

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

你把它建得既简单又干净。那就更大了。这类事情很难纠正,你已经做到了

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

不要让您的开发伙伴为了个人便利而牺牲这一优势。如果您必须同步对用户数据库的更改,那么当事情不同步时就会出现问题。这是一个when问题,不是if问题

顺便说一下,如果您的用户数据库和特定于网站的数据库位于同一个MySQL服务器上,您可以这样做来集成这两个不同数据库的使用。这可能会满足开发人员的需求

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

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

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

你把它建得既简单又干净。那就更大了。这类事情很难纠正,你已经做到了

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

不要让您的开发伙伴为了个人便利而牺牲这一优势。如果您必须同步对用户数据库的更改,那么当事情不同步时就会出现问题。这是一个when问题,不是if问题

顺便说一下,如果您的用户数据库和特定于网站的数据库位于同一个MySQL服务器上,您可以这样做来集成这两个不同数据库的使用。这可能会满足开发人员的需求

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

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

您的方法并非不合理。“代码很难”不是将模式非规范化的有效理由。听起来,将这些细节抽象到对象或库中会让你受益匪浅,这样你就可以将这些数据放在任何地方,而其他同事/代码也不必在意。我同意Dave S的观点。让每个人都编写一次代码,从公共表中选择用户名,从各个表中选择用户id。然后,他们只需调用自己的例程从公共表中获取用户名。您的方法并非不合理。“代码很难”不是将模式非规范化的有效理由。听起来,将这些细节抽象到对象或库中会让你受益匪浅,这样你就可以将这些数据放在任何地方,而其他同事/代码也不必在意。我同意Dave S的观点。让每个人都编写一次代码,从公共表中选择用户名,从各个表中选择用户id。然后,他们只需调用自己的例程从公共表中获取用户名。