1
关于一对多情况下修改问题
source link: https://www.v2ex.com/t/808469
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
关于一对多情况下修改问题 - V2EX
表 1 是作品表
表 2 是类别表
表 3 是 作品和类别的关系表
表 1 和表 2 是一对多的关系
也就是说一个作品可以有多个类别
保存的时候很简单
然后麻烦来了这个修改的时候怎么办呢
我以前用的方法是:修改之前把原来的关系全部删除然后再重新添加 这种方法简单但有一点 那个自增 id 会一直变,想得知诸位是否有更优雅且高效的解决方案?
表 2 是类别表
表 3 是 作品和类别的关系表
表 1 和表 2 是一对多的关系
也就是说一个作品可以有多个类别
保存的时候很简单
然后麻烦来了这个修改的时候怎么办呢
我以前用的方法是:修改之前把原来的关系全部删除然后再重新添加 这种方法简单但有一点 那个自增 id 会一直变,想得知诸位是否有更优雅且高效的解决方案?
第 1 条附言 · 8 小时 6 分钟前
表 1 和表 2 是多对多关系,在此更正一下,😂
18 条回复 • 2021-10-18 17:48:02 +08:00
actar 8 小时 56 分钟前
1. diif 操作前和操作后的数据,也就是增加了哪些关系还有删除了哪些关系。
或者
2. 表 3 不使用自增 id,使用表 1 和表 2 的联合主键。全量删除,全量创建。
或者
2. 表 3 不使用自增 id,使用表 1 和表 2 的联合主键。全量删除,全量创建。
xlui 8 小时 55 分钟前 via iPhone
歪门邪道但是实际用过的解决方案:
表三只存一条记录,表一的 id 、用逗号拼起来的表二的 id,这样更新的时候就只需要更新这一条记录,也不需要删除。
缺点是没办法联表查询了,不过一般也会禁止联表,所以可以接受。
表三只存一条记录,表一的 id 、用逗号拼起来的表二的 id,这样更新的时候就只需要更新这一条记录,也不需要删除。
缺点是没办法联表查询了,不过一般也会禁止联表,所以可以接受。
JackZhu0Amazing 8 小时 25 分钟前
@actar 嗯,1 操作看起来较为优雅,但是增加了复杂度,要查,然后依情况然后可能会有 insert 、delete 、update 等操作,相较我那种较为暴力的做法,大佬觉得 1 做法的优点有哪些
JackZhu0Amazing 8 小时 20 分钟前
@2i2Re2PLMaDnghL 目前处理手法就是全量删除,然后批量新增,😂想过先 differ 然后再改,但是觉得增加了复杂度,并且没有找到直观的优点
JackZhu0Amazing 8 小时 3 分钟前
@xlui 这种方法之前用过,好处就是更新起来方便,不好的地方就在于如你所说的不能联表查询,还有就是没办法 用表二的 id 查对应表一的 id,😂
elrrrrrrr 4 小时 32 分钟前
typeorm 的话用 cascade 配置就行
doc.types = [type1, type2]
doc.types = [type1]
doc.save() 即可
https://github.com/typeorm/typeorm/blob/master/docs/relations.md#cascades
doc.types = [type1, type2]
doc.types = [type1]
doc.save() 即可
https://github.com/typeorm/typeorm/blob/master/docs/relations.md#cascades
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK