【发布时间】:2010-02-02 17:14:21
【问题描述】:
我正在开发一个网站,其中包含用户个人资料、帐户、帐户设置、收件箱等,就像 Facebook 或 LinkedIn 一样,我想知道如何为其设置 mySQL 表。
我应该为每个功能(个人资料、收件箱等)的每个用户创建一个表吗?
【问题讨论】:
标签: php mysql sql database database-design
我正在开发一个网站,其中包含用户个人资料、帐户、帐户设置、收件箱等,就像 Facebook 或 LinkedIn 一样,我想知道如何为其设置 mySQL 表。
我应该为每个功能(个人资料、收件箱等)的每个用户创建一个表吗?
【问题讨论】:
标签: php mysql sql database database-design
您确实需要从关系的角度考虑您放入数据库的所有内容(正如其他海报所提到的)。在您给的示例中,用户将与邮件等内容建立 一对多 关系,他们将与他们的用户个人资料建立 一对一 关系,并且他们将与许多用户居住在一个城市的“位置”之类的东西建立多对一关系。
在设计数据库时,请始终问自己需要构建哪种关系类型,并在不需要时尽量避免在多个表中重复数据。
当您设置用户表之类的内容时,请确保每一行都与一个用户相同(而不是每个用户都是一个表),并且每一行都有一个唯一的自动增量 ID。此用户 ID(由 MySQL 生成)将作为您在其他表中用于将数据链接在一起的参考。
因此,当您设置邮件表时,您可能有 15 行包含电子邮件数据,但每一行都将包含一个名为 user_id 的字段,该字段将包含该用户从用户表。
开始熟悉诸如 LEFT JOIN 之类的事情——这是您将运行单个查询并同时获取(例如)用户的数据和他的所有电子邮件的方式。
【讨论】:
您不会为每个用户创建一个表。
您将为每个用户创建一条记录和一个唯一 ID,然后使用该 ID 作为其他表中的外键将该用户与其他表关联。
【讨论】:
简而言之,如果需要,每个函数都应该在一个表中。编辑时:而不是每个用户的表。每个对应表一个记录
这里涉及的概念是规范化。考虑个人资料和收件箱。用户只有一个配置文件,但收件箱中会有大量消息。将收件箱作为另一个表是有意义的,每条消息都由消息 ID 及其所有者标识,然后是其内容。
【讨论】: