【问题标题】:Correct MySQL structure for storing user-based data用于存储基于用户的数据的正确 MySQL 结构
【发布时间】:2015-11-19 17:01:18
【问题描述】:

所以我有一个问题,我希望它不是太主观。

我有一个博客风格的网站,所以主页上的文章会与发布日期、发布用户等一起加载。基本数据是这样的。

我像这样将它存储在 MySQL 中:

article_id     username      date                     content          etc.
1              user1         2015-05-14 01:35:14      my content a  
2              user2         2015-05-16 02:33:15      my content b

这样,我可以使用一个查询来显示它,在那里我检索用户名、日期、内容等。

我的问题是。我想允许用户选择更改他们的用户名。我看到了两种选择。

我要么像现在一样继续存储数据,然后手动将带有用户相关数据的此类表更新为新用户名。或者我通过user_id 而不是username 存储数据,并对加载的每篇文章进行额外查询,以从另一个user 表中获取关联的用户名。

哪种方法是正确的?

我问这个是因为我认为有针对这种情况的推荐做法?通过用户名存储数据并更新它是否正常,或者通过 id 存储以避免必须这样做 - 但以查询数据时的开销为代价。我猜可以在一次查询中显示基于 id 的数据的用户名,但这仍然需要更长的时间?

【问题讨论】:

  • user_id 和一个连接,而不是一个额外的查询
  • 肯定是“user_id and username在不同表中的存储数据”

标签: php mysql database design-patterns database-design


【解决方案1】:

视情况而定。您是否看到与Article:User 存在1:1 关系,如果是,那么存储在单个表中可能就足够了,但通常用户会发布多篇文章,这将使其成为1:* 关系在这种情况下,您应该为UserDetailsd 创建一个单独的表,并在Article 表中将user_id 作为FOREIGN KEY

【讨论】:

    【解决方案2】:

    您应该创建一个用户表,存储增量的用户 ID 和一个用户名。在您的应用程序中显示用户名时,加入用户表并显示该表中的名称,它将始终是最新的。如果您希望允许更改用户名,这是最佳实践。不建议在文章表中更新所有用户名。这也将允许您存储其他与用户相关的信息,例如电子邮件、加入日期等......而不必将所有这些信息保存在文章表中。

    【讨论】:

      【解决方案3】:

      创建一个包含所有用户相关信息的单独表格并更改您当前的表格,因此仅包含与内容和文章相关的内容。这就是我的建议

      【讨论】:

        【解决方案4】:

        users 创建一个单独的表,例如:

        -------------------
        user_id | user_name
        -------------------
        

        user_id 应该是 PK

        还有一个表格,假设文章应该是这样的:

        -----------------------------------------------
        arcticle_id | date |  content |  etc. | user_id
        -----------------------------------------------
        

        其中article_id 可以是PKuser_id 可以是来自users 表的FK,建立的关系也可以在其他表中使用。

        【讨论】:

          【解决方案5】:

          您可以为用户创建一个表,并在字段用户名上使用外键,指定更新的行为。是这样的:

          alter table posts add constraint fk_post_user foreign key (username) references users (name) on update cascade;
          

          这样,当你更新表 users 上的一行时,表 post 上的所有用户名也会更新。

          【讨论】:

            猜你喜欢
            • 2013-06-18
            • 1970-01-01
            • 2016-02-05
            • 2012-08-27
            • 1970-01-01
            • 1970-01-01
            • 2012-07-10
            • 2011-04-01
            • 1970-01-01
            相关资源
            最近更新 更多