【问题标题】:Is it a bad idea to connect two databases like this? How can it be done?像这样连接两个数据库是个坏主意吗?如何做呢?
【发布时间】:2011-10-17 00:38:24
【问题描述】:

我目前在我的网站上使用 Simple Machines 论坛,用户都在我的网站上使用他们的论坛帐户注册和登录。 smf_members 表包含以下字段:

id_member |会员名 |注册日期

我现在要做的是扩展它以在我的网站上添加更多自定义字段和连接。我想用 id_member 字段做很多事情:

例如,我希望用户(此 smf_members 表中的条目)能够加入团队。

我将创建一个表Teams,其中包含以下字段:

ID |姓名 |说明

还有一个表TeamMembership,其中包含以下字段:

用户 ID |团队ID |角色

如您所见,此表将链接成员和团队,同时仅将特定于用户或团队的数据保留在各自的表中(成功防止冗余数据)。这听起来不错,对吧?

好吧,我不希望这两个新表与 SMF 东西在同一个数据库中,因为它可能会变得混乱。但是,这是最简单的解决方案吗?你认为最简单的解决方案是在同一个数据库中创建我的新表,前缀为自定义的 cst?我不知道如何链接两个数据库,所以如果它太复杂,也许我应该做我的 cst 解决方案。

我已经编辑了这篇文章,还有一个问题。

感谢您的回答。我还有一个问题。假设我想将新变量扩展到成员,但又想避免将新字段添加到 SMF 论坛成员表中。解决这个问题的最简单方法是什么?比如,我想创建一个名为 UsersExtended 的表,并包含以下字段:

-ID(这不是自增字段,而是 SMF 成员表中 id_member 的值)

-国家

是否可以轻松地创建具有这种结构的个人资料页面并从两个表中显示我想要的任何相关数据,以某种方式链接这两个表以便它们充当一个大表?

【问题讨论】:

    标签: php database


    【解决方案1】:

    它们完全属于同一个数据库。使用一个 db 并在查询中加入表。

    您想要为您的应用程序(除了应用程序本身)构建唯一数据库的唯一情况是,如果您打算创建一个 API,该 API 将该数据提供给 其他 项目中的项目不偏不倚的方式。这在 Solr 中很常见,您可以在其中生成极快的 API,并且通常不属于您当前的 MySQL 表。

    【讨论】:

    • 感谢您的帮助。我正在发布我最初的问题的更新,并且由于我是 Stackoverflow.com 的新手,我不确定当我编辑我的问题时我的问题是否会再次出现在页面顶部。
    【解决方案2】:

    将自定义表放在同一个数据库中绝对没有坏处。您不能在关系数据库系统中定义 2 个不同数据库之间的关系。

    【讨论】:

    • 哦,天哪,我猜你是对的 lmao。十分感谢你的帮助。问题,我应该在前面加上任何前缀以便它们容易被发现吗?
    • 嗯,这取决于你的喜好。如果我是你,我不会在我创建的表中添加任何前缀。默认创建的表已经具有前缀 smf,因此您知道这些表不是您创建的。我只会让我的桌子成为团队而不是 cst_teams。这样,您编写的查询在我看来更具可读性。
    • @sassyboy: 您不能在关系数据库系统中定义 2 个不同数据库之间的关系 - 这取决于数据库系统,MySQL 允许这样做。
    • 哇..我不知道!
    【解决方案3】:

    如果您使用 MySQL,请查看this question 接受的答案。请记住,跨数据库查询时,您必须在表前加上数据库名称。

    【讨论】:

      【解决方案4】:

      你可以试试这个

      SELECT * 
      from database1.table, database2.table 
      where database1.table.id=database2.table.id
      

      【讨论】:

        【解决方案5】:

        你应该只在同一个数据库中创建两个表

        **smf_members**
        
        id_member | member_name | date_registered
        
        **TeamMembership**
        
        Team_ID | Name | Description | Role | id_member
        

        如果任何用户想要成为团队成员,您可以使用连接查询轻松操作其记录。

        【讨论】:

          【解决方案6】:

          不知道简单机器论坛 - 但我知道大多数应用程序都希望成为镇上唯一的展示。

          我会创建一个新的数据库 = 可能称为“团队”,使用您自己的表,并使用 NickCL 的跨数据库连接方式来连接两个应用程序。

          您没有提到您正在使用的特定数据库引擎(我假设它是 MySQL),但从逻辑上讲,您可以将数据库视为命名空间 - 一种将属于同一逻辑位置的东西保存在一起的方式。

          理想情况下,“人”/“身份验证”等应该与论坛内容位于单独的数据库中 - 但是当您使用现成的代码时,您就没有那么奢侈了。

          根据我的经验,最好不要乱用现成软件的数据库——当你想升级时,你不知道自己的表会发生什么,不管它们的名字是什么......

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-20
            • 1970-01-01
            • 1970-01-01
            • 2011-10-10
            相关资源
            最近更新 更多