更新多对多链接中的记录 table

Update record in many-to-many linking table

我正在尝试找出在多对多关系中更新链接 table 的最佳方式。

我有两个实体:艺术家和技能。

这两者之间的关系是多对多的,假设一个艺术家有1个或1+个技能,一个技能可以被1个或1+个艺术家拥有。

我想问的是在链接中更新记录的最佳做法table。

示例: 假设艺术家具有以下技能 artist_id: 1 skill_id: 1, 2, 3, 4

我想编辑艺术家一段时间后拥有以下技能。 artist_id: 1 skill_id: 2, 3, 5, 9

我目前的更新做法是删除所有旧记录,然后将新记录插入链接table。

我在想,如果最佳实践实际上是比较两个数组(select 来自链接的旧记录 table 并与新记录进行比较)然后决定要添加什么以及添加什么待删除。

示例: 根据上述情况,判断 [1, 2, 3, 4] 和 [2, 3, 5, 9] 之间的差异。也就是说 [1, 4] 需要从链接 table 中删除,并将 [5, 9] 添加到链接 table.

我想知道有什么更好的方法来处理这个问题,谢谢。

我正在使用 Node.js 和 MySQL。 我试过先擦除所有旧记录,然后添加新记录。我不认为这是最好的做法,所以想知道。

('bridging table' 是支持 many-to-many relationship, although there's many other names 的常用名称。'Linking table' 这个术语太模糊了:有些 table 可能 link 给其他人。)

My current practice of updating is to delete all the old records and then insert the new records in to the linking table.

不要那样做。

I'm thinking if the best practice is actually compare two arrays

不,这不是最佳做法。你太难了。

  • 如果用户输入说艺术家 A 有技能 S1 但桥接 table 没有记录,插入它 -- 也就是说,插入一行。
  • 如果用户输入没有说艺术家 A 具有技能 S2,但桥接 table 确实记录了这一点,则将其删除——即删除一行。
  • 删除某些内容通常是您要与用户确认的操作之一:您确定吗?当他们单击 Ok 时,删除该行。无需考虑数组或整组记录。

(是的,tables 中保存的是集合。但用户交易通常是 row-at-a-time。在您的场景中,艺术家不会 all-of-a-sudden 学习演奏钢琴杂耍,失去tap-dance的能力。那我猜,技能是'Slowly changing'。 )