mysql创建存储关系_询问一个 Mysql 数据库一对多关系的存储方式问题

最近在做毕设,遇到一个数据库存储的问题,不知该如何选择,请各位指点一二。

(楼主是一个前端,后端和数据库很多地方不太懂,如果有的地方说的不对,还请大家批评)

需求描述

与发微博这个操作类似,我就以发微博来说。

一条微博包括内容和多张图片。

数据库里,内容 就是一个字段,而微博-图片是一个一对多的关系。

在发微博上传图片的时候,我实现的流程是:

用户选择图片,点击上传

后端接收上传的图片,生成文件名后上传到云存储服务商,服务商返回处理后的信息

服务商返回的图片信息有:图片的宽高、大小等基本信息,和多个不同版本(原图,缩略图)的图片信息( Url 等)

后端将这张图片的信息存储在图片信息表里,返回前端图片的信息(包括图片 id )

前端显示上传完成,显示预览图。

用户点击发微博的时候,传给后端的数据内容中图片以 id 表示

一个例子:

POST /user/xxxx/status

data:

{

"content" : "微博内容",

"pics" : [

"picId-1",

"picId-2",

"picId-3"

],

}

而且,图片还是有顺序的。

到正题了,后端该如何存储这条微博。

方案分析

下面是我想到的几种方案

图片信息表结构:

1.新建一张微博-图片表

微博表:

微博-图片表:

优点:

结构清晰,遵循范式

可以直接使用 SQL 查询

缺点:

这种方案在查询的时候需要联合三张表来查

如果保证顺序的话,需要按照插入的时间戳排序或者增加一个字段,比如 order

2.在微博表中新增一个字段存储图片信息

微博表

2.1 pics 字段使用字符串,以分隔符隔开

比如:

pics = "picId1,picId2,picId3"

优点:

不用新建表

保证了顺序问题

缺点:

违反范式

需要先解析字符串,再查询

2.2 pics 字段使用 json 格式

比如:

pics = [picId1,picId2,picId3]

优点:

不用新建表

保证了顺序问题

相比 2.1 字符串,更优雅直观

缺点:

违反范式

需要先解析字符串,再查询

json 类型依赖特定数据库版本

请教

暂时就想到这几种方案。

请问各位这几种方案孰优孰劣,选择哪种更好一点?

还有没有更好的方案选择呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值