为用户信息构建MySQL数据库

为用户信息构建MySQL数据库,mysql,structure,Mysql,Structure,我是MySQL的新手,我知道大多数基本功能以及如何发送查询等。不过,我正在尝试学习如何构建MySQL,以便对用户信息进行最佳搜索,并希望获得一些想法 现在我只有一个名为user_info的表(用于功能和测试),它保存用户信息,另一个表存储链接到用户的照片。理想情况下,我希望这些信息中的大部分能够尽快访问 在创建一个主要用于存储和检索用户信息(姓名、年龄、电话、消息等)的数据库时,是否最好为每个新用户创建一个存储所有信息的新表,这样一个表的用户信息就不会被多个查询、锁定、,例如,用户john sm

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

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

在创建一个主要用于存储和检索用户信息(姓名、年龄、电话、消息等)的数据库时,是否最好为每个新用户创建一个存储所有信息的新表,这样一个表的用户信息就不会被多个查询、锁定、,例如,用户john smith在数据库中有他自己的表,其中包含他的所有信息,包括照片、消息等

最好只有几个表,例如用户信息、用户照片、用户消息等,并以这种方式访问数据


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

后者是最好的方法。您可以为用户声明一个表,以及包含所需数据的多个列


现在,如果您希望用户拥有照片,您需要一个包含照片的新表和一个链接到用户表的主键的外键属性,您绝对不应该为每个用户创建一个新表。为用户信息创建一个表,如果每个用户可以有多张照片,则为照片创建一个表。messages表可能包含两个user\u id列(user\u to、user\u from)和一个message列。尽量使数据正常化

Users
====
id
email
etc

Photos
====
id
user_id
meta_data
etc

Messages
====
id
user_id_to
user_id_from
message
timestamp
etc

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

与这里的一般例子一起考虑:你有一个用户表和一张照片表。现在,您希望在您的站点上引入一项功能,允许用户从其他用户那里“收藏”照片

与其制作一个名为“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      |
+--------+---------+

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

每个用户的表?不,不。不考虑我们都希望什么,你的项目成为一个巨大的打击,你有一百万个用户。只要试着去理解那会是什么样子,试着去保持它。更重要的是,试着弄清楚如何获得一个列表,例如,系统中拥有五张以上图片的所有用户。如果每个用户都在他们自己的表中,你真的无法以任何有效的方式做到这一点。Ok的可能重复谢谢大家,这就是我的想法。我只是在玩弄这个想法,因为至少组织数据似乎真的很容易。我主要担心的是,像marvo所说的那样,有一张庞大的表格,有一百万用户(交叉手指)没有组织的数据。这可能是一个复杂的问题,但MySQL如何一次处理50个查询呢。我有书,但有时写下来比较容易。谢谢,我会把这件事暂时搁置一下。这是你最不关心的。制作表格是为了让你拥有一个拥有一百万用户的庞大表格!现在,如果一个用户可以有许多其他相同类型的数据(比如照片,一个用户可以有许多照片!或者评论),那么您可以为照片(和评论)创建另一个表,并使用外键,正如我在回答中所写的。