数据库生成数据时如何正确设置Factory、Worker、Product表的关联外键
外键约束场景下Worker表数据生成操作步骤
核心逻辑:所有生成的Worker数据必须同时满足Worker→Factory的外键约束,以及Product→Worker的外键约束,避免出现关联值不存在的报错。
具体操作按以下顺序执行:
- 提取关联值集合
从已生成的Product表中执行去重查询,得到两组关键值:- 所有关联的
worker_id去重集合,后续Worker表的主键必须完全覆盖这组值,不能出现Product中存在但Worker表缺失的worker_id - 所有
worker_id对应的关联factory_id映射关系,保证同一个worker绑定的工厂和Product中的记录一致
- 所有关联的
- 补全Factory表数据(未生成时操作)
如果你还没有生成Factory表数据,需要优先生成Factory表,保证其主键factory_id完全覆盖上一步得到的所有factory_id取值,满足Worker表的外键关联前提。 - 批量生成Worker表数据
构造Worker表各字段时遵守以下规则即可:- 主键字段
worker_id直接使用第一步提取的去重worker_id集合,逐个生成对应记录 - 关联Factory的外键字段
factory_id直接匹配第一步得到的worker→factory映射关系取值,确保该值在Factory表中已存在 - 其余普通字段(比如姓名、岗位、入职日期等)可按你的业务规则随机生成,无额外约束
- 主键字段
- 约束校验
生成完成后执行校验查询确认无冲突:
以上两个查询返回结果为0即代表所有外键关联正常。-- 校验Worker表factory_id外键合法 SELECT COUNT(*) FROM worker WHERE factory_id NOT IN (SELECT factory_id FROM factory); -- 校验Product表worker_id外键合法 SELECT COUNT(*) FROM product WHERE worker_id NOT IN (SELECT worker_id FROM worker);
内容的提问来源于stack exchange,提问作者BlueMan
相关产品推荐
相关产品推荐

