【问题标题】:Structuring a MySQL database for user information为用户信息构建 MySQL 数据库
【发布时间】:2012-08-16 15:03:54
【问题描述】:

我对 MySQL 还很陌生,我知道大部分基本功能以及如何发送查询等。但是,我正在尝试学习如何构建它以优化用户信息搜索,并想获得一些想法。

现在我只有一个名为 user_info 的表(用于功能目的和测试),它保存用户信息,另一个表存储链接到用户的照片。理想情况下,我希望这些信息中的大部分都可以尽快访问

在创建一个主要用于存储和检索用户信息(姓名、年龄、电话、消息等)的数据库时,为每个新用户创建一个存储所有信息的新表是一个好主意,以便一个表 user_info 不会因多个查询、锁定等而陷入困境。例如,用户 john smith 将在数据库中拥有自己的表,其中包含他的所有信息,包括照片、消息等。

最好只有几个表,例如 user_info、user_photos、user_messages 等。并以这种方式访问​​数据。

我不担心表格中的冗余,例如用户电子邮件地址重复多次。

【问题讨论】:

  • 每个用户的表?不不不。想想我们都希望什么,你的项目会大受欢迎,你就有一百万用户。只要尝试并掌握尝试和维护它会是什么样子。更重要的是,试着弄清楚如何获得一个列表,例如,系统中拥有超过五张图片的所有用户。如果您将每个用户都放在自己的表中,您真的无法以任何有效的方式做到这一点。

标签: mysql structure


【解决方案1】:

后者是最好的方法。您为用户声明一个表,并为您想要的数据声明几列。

现在,如果您希望用户拥有照片,则需要一个包含照片的新表和一个链接到用户表的 主键外键 属性。

【讨论】:

  • 好的,非常感谢大家,我就是这么想的。我只是在玩弄这个想法,因为至少组织数据似乎真的很容易。我主要担心的是拥有一张庞大的表格,就像 marvo 所说的那样,有一百万用户(交叉手指)拥有无组织的数据。这可能是一个加载的问题,但是 MySQL 如何一次处理 50 个查询。我有书,但有时以书面形式更容易获得。谢谢,我打算暂时打开它。
  • 这是您最不关心的问题。制作表格是为了让您拥有一张拥有一百万用户的巨大表格!现在,如果一个用户可以拥有许多其他相同类型的数据(例如照片,一个用户可以拥有许多照片!或者 cmets),那么您可以为照片(和 cmets)制作另一个表并使用我在回答中所写的外键。
【解决方案2】:

您绝对不应该为每个用户创建一个新表。为 user_info 创建一张表,如果每个用户可以拥有多张照片,则为照片创建一张表。一个消息表可能包含两个 user_id 列(user_to、user_from)和一个消息列。尽量对数据进行标准化。

Users
====
id
email
etc

Photos
====
id
user_id
meta_data
etc

Messages
====
id
user_id_to
user_id_from
message
timestamp
etc

【讨论】:

    【解决方案3】:

    我同意这里提供的两个答案,但他们还没有提到的一件事是查找表。

    考虑这里的一般示例:您有一个 users 表和一个 photos 表。现在您想在您的网站上引入一项功能,允许用户“收藏”其他用户的照片。

    与其创建一个名为“Favorites”的新表并重新添加有关图像的所有数据(字段位置、元数据、分数/其他),不如创建一个有效地位于其他两个表之间的表。

    +-----------------------+      +-------------------------------------+
    | ++ users              |      | ++ photos                           |
    | userID | email | name |      | photoID | ownerID | fileLo | etc... |
    +--------+-------+------|      +---------+---------+--------+--------+
    | 1      | ....  | Tom  |      | 35      | 1       | .....  | .......|
    | 2      | ....  | Rob  |      | 36      | 2       | .....  | .......|
    | 3      | ....  | Dan  |      | 37      | 1       | .....  | .......|
    +--------+-------+------+      | 43      | 3       | .....  | .......|
                                   | 48      | 2       | .....  | .......|
                                   | 49      | 3       | .....  | .......|
                                   | 53      | 2       | .....  | .......|
                                   +---------+---------+--------+--------+
    
    +------------------+
    | ++ Favs          |
    | userID | photoID |
    +--------+---------+
    | 1      | 37      |
    | 1      | 48      |
    | 2      | 37      |
    +--------+---------+
    

    使用这种方法,您可以干净、高效地链接您拥有的数据,而无需过多的数据复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-24
      • 2019-09-10
      • 1970-01-01
      相关资源
      最近更新 更多