构建用于用户信息的MySQL数据库

时间:2012-07-27 02:38:20

标签: mysql structure

我是MySQL的新手,我知道大多数基本功能以及如何发送查询等。但是,我正在尝试了解如何构建它以便最佳地搜索用户信息并希望获得一些想法。

现在我只有一个表(用于功能目的和测试),名为user_info,用于保存用户信息,另一个表用于存储链接到用户的照片。理想情况下,大多数此类信息都尽可能快地访问

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

OR

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

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

绝对不应为每个用户创建新表。为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

答案 2 :(得分:0)

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

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

不是制作一个名为“收藏夹”的新桌子,而是重新添加有关图像的所有数据(场地位置,元数据,得分/等等),而是有一张桌子可以有效地坐在其他两个之间。

+-----------------------+      +-------------------------------------+
| ++ 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      |
+--------+---------+

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