创建Oracle关联数据表匹配失败,多方排查及谷歌搜索未获解决方案
解决外键匹配失败的问题
看起来你遇到的是复合主键的外键引用不匹配问题,我帮你拆解下问题根源和解决办法:
问题根源
复合主键引用不完整
你的inspection表主键是(propertyNum, dateInspected)复合主键,但你在valuation表中单独把dateInspected作为外键引用——外键引用复合主键时必须完整引用所有主键字段,不能只取其中一个,这是导致匹配失败的核心原因。外键目标字段未明确指定
你写的FOREIGN KEY (propertyNum) REFERENCES property没有明确指定property表的主键字段,虽然默认会关联主键,但最好显式写出,避免因property表主键不是propertyNum导致的错误。
修正后的建表代码
首先补全你未写完的inspection表建表语句:
create table inspection ( propertyNum VARCHAR2(255), dateInspected DATE, staffNum VARCHAR2(255), comments CHAR(255), PRIMARY KEY (propertyNum, dateInspected) );
然后是修正后的valuation表建表语句:
create table valuation ( propertyNum VARCHAR2(255), dateInspected DATE, rent VARCHAR2(255), deposit VARCHAR2(255), PRIMARY KEY (propertyNum, dateInspected), -- 显式关联property表的主键propertyNum FOREIGN KEY (propertyNum) REFERENCES property(propertyNum), -- 完整关联inspection的复合主键 FOREIGN KEY (propertyNum, dateInspected) REFERENCES inspection(propertyNum, dateInspected) );
额外提醒
- 要确保
property表确实存在,且其主键是propertyNum,否则外键关联依然会失败。 - VARCHAR2(255)和CHAR(255)的选择要根据实际业务场景,CHAR类型会自动补空格,若存储可变长度内容建议用VARCHAR2。
内容的提问来源于stack exchange,提问作者Xayn
相关产品推荐
相关产品推荐

