1
2i2Re2PLMaDnghL 2021-10-18 10:28:10 +08:00
(难道不是多对多吗?
先查,做 diff,再改 |
2
actar 2021-10-18 10:28:59 +08:00
1. diif 操作前和操作后的数据,也就是增加了哪些关系还有删除了哪些关系。
或者 2. 表 3 不使用自增 id,使用表 1 和表 2 的联合主键。全量删除,全量创建。 |
3
xlui 2021-10-18 10:29:08 +08:00 via iPhone
歪门邪道但是实际用过的解决方案:
表三只存一条记录,表一的 id 、用逗号拼起来的表二的 id,这样更新的时候就只需要更新这一条记录,也不需要删除。 缺点是没办法联表查询了,不过一般也会禁止联表,所以可以接受。 |
4
kiracyan 2021-10-18 10:30:36 +08:00 1
表 3 的自增列无实际意义的啊 变了就变了
|
5
JackZhu0Amazing OP @actar 嗯,1 操作看起来较为优雅,但是增加了复杂度,要查,然后依情况然后可能会有 insert 、delete 、update 等操作,相较我那种较为暴力的做法,大佬觉得 1 做法的优点有哪些
|
6
JackZhu0Amazing OP @2i2Re2PLMaDnghL 目前处理手法就是全量删除,然后批量新增,😂想过先 differ 然后再改,但是觉得增加了复杂度,并且没有找到直观的优点
|
7
JackZhu0Amazing OP @xlui 这种方法之前用过,好处就是更新起来方便,不好的地方就在于如你所说的不能联表查询,还有就是没办法 用表二的 id 查对应表一的 id,😂
|
8
a7082633 2021-10-18 11:26:17 +08:00
看情况的,如果你的自增 ID 没有其他业务用到就保持现在的做法,要不然就用 diff.
|
9
FrankFang128 2021-10-18 11:36:52 +08:00
只能一个一个修改
|
10
nekoneko 2021-10-18 14:40:07 +08:00
数据库是啥呀,postgres 可以考虑数组
|
11
sun019 2021-10-18 14:44:40 +08:00
现在挺好的
本来就是多对多关系。 |
12
shanghai1943 2021-10-18 14:46:31 +08:00
如果表 3 的 id 没在别处用到的话,就先全删除然后批量新增
|
13
elrrrrrrr 2021-10-18 14:52:36 +08:00
typeorm 的话用 cascade 配置就行
doc.types = [type1, type2] doc.types = [type1] doc.save() 即可 https://github.com/typeorm/typeorm/blob/master/docs/relations.md#cascades |
14
ccppgo 2021-10-18 14:58:34 +08:00
表三甚至可以不要自增 ID
|
15
EscYezi 2021-10-18 15:46:48 +08:00 via iPhone
先删再添加应该是最简单有效的办法,除非原来的数据不能直接删
|
16
lanlanye 2021-10-18 17:05:01 +08:00
同楼上,表三其实不需要自增 ID,
如果非要有又不希望变,可以改用逻辑删除,先删再 upsert |
17
fortunezhang 2021-10-18 17:14:20 +08:00
@xlui 哈哈,我也是这样用。搜索的时候只能用 like
|
18
corningsun 2021-10-18 17:48:02 +08:00
|
19
2i2Re2PLMaDnghL 2021-10-18 22:10:27 +08:00
|
20
EarthChild 2021-10-19 11:40:27 +08:00
@corningsun #18 赞同,自己都说一对多了。一个作品多个类别。维护一个表多舒服
|
21
qwertyzzz 2021-10-19 15:32:23 +08:00
真巧 这个问题我问过 https://www.v2ex.com/t/800291#reply18
|
22
JackZhu0Amazing OP @qwertyzzz 哈哈哈哈,握爪
|