存储配置文件图片的最佳数据库设计

Zak*_*ziz 0 mysql database database-design

我在数据库设计方面的表现并不是很好,所以我来找你们帮忙.我有一个包含用户记录的表.平板电脑看起来像这样:

+----------+----------+----------+----------+----------+----------+----------+---------
| id       | username | password | firstName| lastName | birthDate|  pictures|  .....
+----------+----------+----------+----------+----------+----------+----------+---------
|    .     |    .     |    .     |    .     |    .     |    .     |    .     |  
|    .     |    .     |    .     |    .     |    .     |    .     |    .     |  .....
     .          .          .          .          .          .          .        
Run Code Online (Sandbox Code Playgroud)

图片字段表示用户上传了多少张图片.
我写了一个功能,允许用户将图片上传到我们的服务器.上传的文件被命名为随机的.用户只允许6张图片.
我目前正在获取文件的位置并将位置存储在如下所示的表中:

+----------+----------+----------+----------+----------+----------+----------+---------
| id       | username | default  | pic1     | pic2     | pic3     |  pic4    |  .....
+----------+----------+----------+----------+----------+----------+----------+---------
|    .     |    .     |    .     |    .     |    .     |    .     |    .     |  
|    .     |    .     |    .     |    .     |    .     |    .     |    .     |  .....
     .          .          .          .          .          .          .        
Run Code Online (Sandbox Code Playgroud)

假设用户具有多于0个图片,当访问用户简档时,调用"默认"字段以获得哪个列存储默认图片的地址.例如,如果'default'等于2,则首先拉出并返回来自列'pic2'的数据,然后其他非空列将返回它们各自的数据.

我的第一个问题是:这种方法有多个表是个坏主意吗?实现一个设计,其中图片有自己的专栏一个坏主意?
正如你们所知,这种方法在最小程度上是不可扩展的.实现此配置文件系统的优秀,高效,可扩展的设计是什么?我期待有50,000到60,000名用户.


如果可能的话,也可以给我推荐一本好书,它将为我提供数据库设计的速成课程!(速成课程请不要太长或详细!)

che*_*vim 8

除非有非常具体的原因,为什么你需要这个设计(高度怀疑它)我认为你应该采取类似的方式:

users:
- id
- username
- email
- ...

pictures
- id
- user_id
- default (or order)
- picture_location
Run Code Online (Sandbox Code Playgroud)

这可以很好地扩展(假设你有一个user_id的索引),你也可以轻松地改变你对每个用户限制的最大图片的想法.当然,限制将由您的申请强制执行.