【问题标题】:MySQL database table structuringMySQL数据库表结构
【发布时间】:2012-03-15 21:06:58
【问题描述】:

我正在开发一个基于用户的社交网络。我正在用 PHP 构建网站,我想使用 MySQL 数据库来存储用户数据。我可以创建数据库/表没问题(我使用 phpMyAdmin) 我不确定有多少表是必需的,什么对我的 Web 应用程序更实用。有多张桌子会很聪明吗?例如,一个 USERS 表。使用列名 USER_ID、EMAIL、PASSWORD、LAST_LOGIN,然后是一个名为 USER_SETTINGS 的表,该表将保存每个用户的帐户设置,另一个名为 POSTS 的表具有归因于“状态更新”的名称和值。或者将所有东西都放在一张桌子上很聪明?最佳做法是什么?

【问题讨论】:

标签: php mysql


【解决方案1】:

绝对不要把“所有东西都放在一张桌子上”。您最终可能会得到“许多表”,但这听起来很糟糕 - 基本上,您应该根据逻辑用法对数据进行分段。

例如,如果您确实在 users 表中保留了帖子 - 那将如何工作?当他们发布新帖子时会发生什么 - 你会添加另一个字段吗? (坏) - 或将另一个项目添加到一个字段并用一个字符分隔(坏)......等等。唯一真正的方法是拥有另一张桌子。您应该绝对不要将帖子与用户放在同一个表中

至于“个人资料数据”(或任何您想称呼它的名称),我喜欢将其分开 - 有些人喜欢将其保存在用户表中 - 那里的偏好问题。

在你的情况下,我建议这样:

//users table
id,
email,
password,
last_login,
//...

//profiles table
id,
user_id,
profile,
age,
gender,
//...

//posts table
id,
user_id,
data,
created (datetime),
modified (datetime)

【讨论】:

    【解决方案2】:

    我目前也在建立一个社交网站。 不要把所有东西都放在一张桌子上。事实上,我想说的是,您不能将所有内容都放在一个表中,而不会立即遇到大量问题。

    对于用户而言,我喜欢将密码保存在单独的表中,并带有隐藏的用户 ID 连接。根据您希望如何强制验证和输出数据完整性的配置文件数据本身可能涉及连接到您的用户表的表。

    我还将所有帖子保存在单独的表格中。这纯粹是来自您可以根据用户 ID 查询的预期,然后限制帖子数量或适合您正在查看的任何内容的帖子。简而言之,将它们放在 users 表中就像说你就是你所写的,它就是你,而不是说你是独立但相关的对象。

    【讨论】:

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