【问题标题】:mySQL Table Structure for a User-based website [closed]基于用户的网站的 mySQL 表结构 [关闭]
【发布时间】:2010-02-02 17:14:21
【问题描述】:

我正在开发一个网站,其中包含用户个人资料、帐户、帐户设置、收件箱等,就像 Facebook 或 LinkedIn 一样,我想知道如何为其设置 mySQL 表。

我应该为每个功能(个人资料、收件箱等)的每个用户创建一个表吗?

【问题讨论】:

    标签: php mysql sql database database-design


    【解决方案1】:

    您确实需要从关系的角度考虑您放入数据库的所有内容(正如其他海报所提到的)。在您给的示例中,用户将与邮件等内容建立 一对多 关系,他们将与他们的用户个人资料建立 一对一 关系,并且他们将与许多用户居住在一个城市的“位置”之类的东西建立多对一关系。

    在设计数据库时,请始终问自己需要构建哪种关系类型,并在不需要时尽量避免在多个表中重复数据。

    当您设置用户表之类的内容时,请确保每一行都与一个用户相同(而不是每个用户都是一个表),并且每一行都有一个唯一的自动增量 ID。此用户 ID(由 MySQL 生成)将作为您在其他表中用于将数据链接在一起的参考。

    因此,当您设置邮件表时,您可能有 15 行包含电子邮件数据,但每一行都将包含一个名为 user_id 的字段,该字段将包含该用户从用户表。

    开始熟悉诸如 LEFT JOIN 之类的事情——这是您将运行单个查询并同时获取(例如)用户的数据和他的所有电子邮件的方式。

    【讨论】:

      【解决方案2】:

      您不会为每个用户创建一个表。

      您将为每个用户创建一条记录和一个唯一 ID,然后使用该 ID 作为其他表中的外键将该用户与其他表关联

      【讨论】:

        【解决方案3】:

        简而言之,如果需要,每个函数都应该在一个表中。编辑时:而不是每个用户的表。每个对应表一个记录

        这里涉及的概念是规范化。考虑个人资料和收件箱。用户只有一个配置文件,但收件箱中会有大量消息。将收件箱作为另一个表是有意义的,每条消息都由消息 ID 及其所有者标识,然后是其内容。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-06
          • 1970-01-01
          • 1970-01-01
          • 2012-11-08
          • 1970-01-01
          相关资源
          最近更新 更多