1 2i2Re2PLMaDnghL 2021-10-18 10:28:10 +08:00 (难道不是多对多吗? 先查,做 diff,再改 |
![]() | 2 KotlinAmai 2021-10-18 10:28:59 +08:00 1. diif 操作前和操作后的数据,也就是增加了哪些关系还有删除了哪些关系。 或者 2. 表 3 不使用自增 id,使用表 1 和表 2 的联合主键。全量删除,全量创建。 |
![]() | 3 akiakiseofficial 2021-10-18 10:29:08 +08:00 via iPhone 歪门邪道但是实际用过的解决方案: 表三只存一条记录,表一的 id 、用逗号拼起来的表二的 id,这样更新的时候就只需要更新这一条记录,也不需要删除。 缺点是没办法联表查询了,不过一般也会禁止联表,所以可以接受。 |
![]() | 4 kiracyan 2021-10-18 10:30:36 +08:00 ![]() 表 3 的自增列无实际意义的啊 变了就变了 |
![]() | 5 JackZhu0Amazing OP @actar 嗯,1 操作看起来较为优雅,但是增加了复杂度,要查,然后依情况然后可能会有 insert 、delete 、update 等操作,相较我那种较为暴力的做法,大佬觉得 1 做法的优点有哪些 |
![]() | 6 JackZhu0Amazing OP @2i2Re2PLMaDnghL 目前处理手法就是全量删除,然后批量新增,想过先 dffer 然后再改,但是觉得增加了复杂度,并且没有找到直观的优点 |
![]() | 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 asLw0P981N0M0TCC 2021-10-19 15:32:23 +08:00 真巧 这个问题我问过 t/800291#reply18 |
![]() | 22 JackZhu0Amazing OP @qwertyzzz 哈哈哈哈,握爪 |