添加带关联标签的Note记录:能否单请求完成外键插入?
多对多关联下新增记录时自动插入不存在外键的实现方式
问题背景
现有Note与Tags表为多对多关联,表结构如下:
Note表结构
PK id: int note: varchar FK tags: Tags[]
Tags表结构
PK id: int tag: varchar FK note: Note[]
需要添加的新记录示例:
{ "note": "Hello World!, this is an example note", "tags": ['first','example'] }
问题:是否可以通过单个请求完成该操作?还是必须先保存标签,再使用其ID发起另一个请求?
回答
当然可以用单个请求搞定,没必要分两次操作。
后端处理这个请求时可以按以下逻辑实现:
- 遍历传入的标签数组,逐个检查
Tags表中是否存在对应tag值的记录:不存在的直接插入并获取其ID,已存在的直接取出现有ID - 插入
Note表的新记录,拿到笔记ID后,在多对多关系对应的中间关联表中,插入笔记ID与所有标签ID的关联数据
不管使用ORM框架还是原生SQL,都能实现这个逻辑:
- 若用ORM框架(如JPA、EF Core),多数框架支持配置级联保存或自动处理关联实体,只要实体类的关联映射配置正确,保存
Note时就能自动创建不存在的Tags - 若用原生SQL,可以利用
INSERT ... ON DUPLICATE KEY UPDATE(MySQL)或INSERT ... ON CONFLICT DO NOTHING(PostgreSQL)这类语法批量处理标签的新增,再一次性完成笔记和关联关系的插入
内容的提问来源于stack exchange,提问作者Prabin
相关产品推荐
相关产品推荐

