Oracle中多个字段引用同一表主键的外键约束创建问题
Oracle多字段关联同表主键的外键约束规则
结论:Oracle和SQLite规则一致,必须为每个引用字段单独创建外键约束,不能合并为一个复合外键声明。
错误原因说明
你之前的两种失败写法本质都是声明了复合外键:
- 复合外键的设计逻辑是子表的N个外键字段,需要联合匹配父表的N个联合主键/联合唯一键字段,字段数量、数据类型、顺序必须完全对应
- 你的USER表主键只有
USER_ID1个字段,无法匹配子表3个字段的复合外键要求,因此两种写法都会触发语法报错 - 额外注意:你之前的写法中EXAMPLE表的主键约束名用了
USER_PK,和USER表的主键约束重名,Oracle不允许同库下约束名重复,需要修改
正确建表示例
-- 注意:USER是Oracle内置关键字,建议表名改为USER_INFO避免冲突,若坚持用USER需要加双引号包裹 CREATE TABLE EXAMPLE ( EXAMPLE_ID INTEGER GENERATED BY DEFAULT AS IDENTITY, LEAD_USER INTEGER NOT NULL, DELIVERY_USER INTEGER NOT NULL, SUPPORT_USER INTEGER NOT NULL, CONSTRAINT EXAMPLE_PK PRIMARY KEY (EXAMPLE_ID), -- 三个字段分别声明独立外键 CONSTRAINT FK_LEAD_USER FOREIGN KEY (LEAD_USER) REFERENCES USER(USER_ID), CONSTRAINT FK_DELIVERY_USER FOREIGN KEY (DELIVERY_USER) REFERENCES USER(USER_ID), CONSTRAINT FK_SUPPORT_USER FOREIGN KEY (SUPPORT_USER) REFERENCES USER(USER_ID) );
内容的提问来源于stack exchange,提问作者MongGu
相关产品推荐
相关产品推荐

