搜索了很多错误,但我似乎无法找到解决方案。 这些是我的代码
create table valuation (
propertyNum VARCHAR2(255),
dateInspected DATE,
rent VARCHAR2(255),
deposit VARCHAR2(255),
PRIMARY KEY (propertyNum, dateInspected),
FOREIGN KEY (propertyNum) REFERENCES property,
FOREIGN KEY (dateInspected) REFERENCES inspection
);
create table inspection (
propertyNum VARCHAR2(255),
dateInspected DATE,
staffNum VARCHAR2(255),
comments CHAR(255),
PRIMARY KEY (propertyNum, dateInspected),
FOREIGN KEY (propertyNum) REFERENCES property,
FOREIGN KEY (staffNum) REFERENCES staff
);
错误似乎出现在这一部分:
FOREIGN KEY (dateInspected) REFERENCES inspection);
因为我已经尝试删除这部分而且工作正常。
错误讯息:
ORA-02256:引用列的数量必须与引用的列匹配
答案 0 :(得分:0)
这不起作用,因为您尝试从"估值"中定义的外键。 table仅基于一列(" dateInspected"),而父/主表("检查")的主键没有一列主要(或唯一)键。它有一个两列(在" propertyNum"和" dateInspected"列)
创建外键的要求是主/父表具有匹配的主键或匹配的唯一约束。
你可能想要的是:
FOREIGN KEY (propertyNum, dateInspected) REFERENCES inspection
答案 1 :(得分:0)
正如Hilarion指出的那样,您收到的错误是由于多部分主键和单部分外键造成的。但是尝试一些额外的更改,这些更改将使参考更容易,并清理您的关系模型。
将“标识”列添加到“评估和检查”并尝试这些架构更改。
valuation (
id,
propertyNum,
inspectionId,
rent,
deposit,
PRIMARY KEY (id),
FOREIGN KEY (propertyNum) REFERENCES property,
FOREIGN KEY (inspectionId) REFERENCES inspection )
inspection (
id,
propertyNum,
dateInspected,
staffNum,
comments,
PRIMARY KEY (id),
FOREIGN KEY (propertyNum) REFERENCES property,
FOREIGN KEY (staffNum) REFERENCES staff )
您需要插入您的数据类型(我建议您使用租借和存款的数字字段代替varchar)
还用lastDateInspected替换属性表上的dateInspected字段。
我会这样做,因为逻辑上可以多次检查和评估一个属性。此外,它将清理你的人际关系。您将能够在不更改其他房产数据的情况下提取检查和估值的历史记录。
请注意,您的估值可以与检验相关联,但检验并不关心估价,它不需要也不应该。但