我对数据库设计不是很了解,所以我来找你们寻求帮助。我有一张包含用户记录的表格。平板电脑看起来像这样:
+----------+----------+----------+----------+----------+----------+----------+---------
| id | username | password | firstName| lastName | birthDate| pictures| .....
+----------+----------+----------+----------+----------+----------+----------+---------
| . | . | . | . | . | . | . |
| . | . | . | . | . | . | . | .....
. . . . . . .
图片字段表示用户上传了多少张图片。
我写了一个功能,允许用户上传图片到我们的服务器。上传的文件被随机命名。用户只能使用 6 张图片。
我目前正在获取文件的位置并将位置存储在如下所示的表中:
+----------+----------+----------+----------+----------+----------+----------+---------
| id | username | default | pic1 | pic2 | pic3 | pic4 | .....
+----------+----------+----------+----------+----------+----------+----------+---------
| . | . | . | . | . | . | . |
| . | . | . | . | . | . | . | .....
. . . . . . .
假设用户有超过 0 张图片,当访问用户配置文件时,将调用“默认”字段以获取哪一列存储默认图片的地址。例如,如果'default'等于2,则'pic2'列的数据将首先被拉取并返回,然后其他非空列将返回它们各自的数据。
我的第一个问题是:这种拥有多个表的方法是个坏主意吗?实现图片有自己的专栏的设计是个坏主意吗?
正如你们所看到的,这种方法一点也不可扩展。什么是好的、高效、可扩展的设计来实现这个配置文件系统?我预计会有 50,000 - 60,000 名用户。
另外,如果可能的话,给我推荐一本好书,让我快速了解数据库设计! (速成类(class)请不要太长或太详细!)
最佳答案
除非有非常具体的原因说明您需要这种设计(对此深表怀疑),否则我认为您应该采用类似的方式:
users:
- id
- username
- email
- ...
pictures
- id
- user_id
- default (or order)
- picture_location
这可以很好地扩展(假设你有一个关于 user_id 的索引),而且你可以很容易地改变你对每个用户的最大图片限制的想法。当然,该限制将由您的应用程序执行。
关于mysql - 用于存储个人资料图片的最佳数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8110084/