【问题标题】:PHP MySQL database designPHP MySQL 数据库设计
【发布时间】:2012-01-09 21:16:17
【问题描述】:

我有一个用户表,其中包含用户名、用户 ID、密码和电子邮件字段。

用户可以发布更新,可以订阅用户,可以加好友。

为了存储用户的更新、订阅者和朋友的计数,设计我的数据库的最佳方法是什么?

我应该在用户表中再添加 3 个字段并增加这 3 列的数量吗?

谢谢。

【问题讨论】:

  • 不要将好友存储在 user 表的列中...学习规范化您的数据库设计,并添加一个 user_friends 表...这样您就不会遇到这么多限制跨度>
  • 我认为这只是一个错字,而 OP 意味着用户表中还有 3 个字段。
  • 无论OP是指朋友还是字段,答案还是一样的:不要在users表中添加...规范化
  • 我的意思是字段,我只是想尽快获得用户的这 3 项的计数。当然,更新与订阅者和订阅一样在单独的表中。我在谈论他们的数量。

标签: php mysql database


【解决方案1】:

您可以创建 3 个表:friends (user1_id,user2_id)、updates(user_id,content)、subscribe(user1_id,user2_id)。
如果数据库很大,不想每次都统计好友,可以在 users 表中添加一个字段,每次添加/删除好友时更新它
或许画个图会有所帮助:
http://en.wikipedia.org/wiki/Entity-relationship_model

【讨论】:

    【解决方案2】:

    首先我会尝试计算

    用户的更新、订阅者和朋友的计数

    即时,类似

    select count(*) from user_updates where user_id = :uid
    select count(*) from user_subcribers where user_id = :uid
    select count(*) from user_friends where user_id = :uid
    

    如果您对这种方法有性能问题,那么您可以考虑将这些计数字段添加到用户表中,但您必须小心维护它们。

    【讨论】:

      【解决方案3】:

      不确定我是否理解您的问题,但我认为最好的方法是为每个函数制作一个表,您可以将这些表与 user_id 字段链接。像这样:

      表“用户”:

      *user_id*
      username
      password
      email
      

      表“朋友”:

      id
      *user_id*
      friendids
      

      然后您可以使用类似

      的方式获取用户
      SELECT * FROM friends WHERE user_id = '$userid'
      

      【讨论】:

        【解决方案4】:

        要么使用该用户元数据创建一个单独的表,要么将它们添加为新列。无论哪种方式都可以。

        【讨论】:

          【解决方案5】:

          我假设您的意思是在最后一句中输入“columns”而不是“friends”。

          这是一种方法。

          您在设计时应该考虑实体、关系和基数。您想跟踪每次更新的时间戳吗?如果是,我会将其设为与用户一对多关系的单独表。订阅者和朋友也是如此。答案取决于您选择如何对问题建模。没有正确或错误的答案,但有权衡。

          【讨论】:

            【解决方案6】:

            好吧,如果您将关系和内容分开,则阅读速度会更快,但是如果您只有内容并从中生成关系,则结果有时可能会更准确。所以,这取决于。

            【讨论】:

              猜你喜欢
              • 2013-04-15
              • 1970-01-01
              • 2018-02-06
              • 1970-01-01
              • 2010-10-12
              • 1970-01-01
              • 2014-01-12
              • 2018-01-31
              • 1970-01-01
              相关资源
              最近更新 更多