sql - 外键:列数不等于引用列
问题描述
我从 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 列必须在一个复合键中。
非常感谢我的问题的答案和对问题的解释。
解决方案
外键引用需要在数量和类型上与主键匹配。所以我认为你打算:
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
);
我怀疑您的数据模型还有其他问题,但这应该可以解决语法错误。如果您需要进一步的帮助,请再问一个问题。
推荐阅读
- python - 如何在字符串中使用偶数索引大写字母
- python - Pip3 安装问题
- python - 无法使用 zip 遍历更大的列表
- c++ - 我无法找出我的代码有什么问题
- nginx - 一个域使用 CNAME 指向另一个 Kubernetes 入口主机域
- openxml - 使用 Open XML SDK 读取 Excel 图表模板 (*.crtx)
- php - 无法在 MVC 项目中使用 ajax 预览图像
- python - 将 csv 文件读入 Pycharm 发生错误
- sql - oracle sql查询时间段集合并集
- ios - 如何让 tableView.reloadData() 与核心数据正常工作?