首页 > 解决方案 > 外键:列数不等于引用列

问题描述

我从 oracle 收到一条错误消息,提示“引用列的数量必须与引用的列匹配”。
我希望表测量中的列recorded_on引用名为sample的表中的recorded_on Sample表中 的列Recorded on必须与Scientist_Num一起成为复合键 的一部分错误来自 FOREIGN KEY (Recorded_On) REFERENCES Sample(Scientist, Recorded_On, Site_ID)


CREATE TABLE Sample (
Scientist_Num varchar2(5) not null,
Recorded_On date not null,
Site_ID varchar2(4) not null,
Comments clob,
Primary key (Scientist_Num, Recorded_On),
FOREIGN KEY (Scientist_Num) REFERENCES Scientist(Scientist_Num),
FOREIGN KEY (Site_ID) REFERENCES Site(Site_ID)
);

CREATE TABLE Measurement (
Site_ID varchar2(4) not null,
Recorded_On date not null,
Name varchar2(10) not null,
Value varchar2(10),
Outlier_Indicator varchar2(10),
Primary key (Site_ID, Recorded_On, Name),
FOREIGN KEY (Site_ID) REFERENCES Sample(Site_ID),
FOREIGN KEY (Recorded_On) REFERENCES Sample(Scientist, Recorded_On, Site_ID)
);    

Scientist_Num 和 Recorded_On 列必须在一个复合键中。
非常感谢我的问题的答案和对问题的解释。

标签: sqloracle

解决方案


外键引用需要在数量和类型上与主键匹配。所以我认为你打算:

CREATE TABLE Measurement (
    Site_ID varchar2(4) not null,
    Scientist_Num varchar2(5) not null,
----^ added for foreign key reference
    Recorded_On date not null,
    Name varchar2(10) not null,
    Value varchar2(10),
    Outlier_Indicator varchar2(10),
    Primary key (Site_ID, Recorded_On, Name),
    FOREIGN KEY (Site_ID) REFERENCES Site(Site_ID),
-------------------------------------^ Presumably you intend the site table
    FOREIGN KEY (Scientist_Num, Recorded_On) REFERENCES 
Sample(Scientist_Num, Recorded_On)
-----------------^ two columns, both need to already be defined
); 

我怀疑您的数据模型还有其他问题,但这应该可以解决语法错误。如果您需要进一步的帮助,请再问一个问题。


推荐阅读