mysql - 用于存储个人资料图片的最佳数据库设计

标签 mysql database database-design

我对数据库设计不是很了解,所以我来找你们寻求帮助。我有一张包含用户记录的表格。平板电脑看起来像这样:

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

相关文章:

mysql - 如何在 MySQL 中克隆结构?

mysql - 将 MySQL 查询发送到我从另一个站点拥有的站点(使用 Google Chrome 扩展)

mysql - 当字符串包含空格时,应用程序仍未更新数据库

mysql - MySQL中模式/数据库之间的区别

sql - 如何使用UTF_FILE Oracle从CSV文件中分割数据

java - 实体字段和数据库表列命名约定的最佳实践

mysql - UPDATE 字段从表 1 到表 2,其中连接它们的字段在表 2 中不是唯一的

mysql - 如何在 SELECT 上将 unsigned int 乘以 -1?

database-design - Google Cloud Spanner 中的自动增量

sql-server - sql server 2008 - 添加约束