ORA-02270外键,无法找到错误

时间:2018-05-23 13:43:19

标签: sql oracle

我在将Sample表中的Sample_Measure_FK连接到Measurement Table时遇到问题。

代码部分是:

create table Sample
(
  Site_ID       varchar2(5) not null,
  Recorded_On timestamp not null,
  Scientist_Num varchar2(7) not null,
  Comments      varchar2(4000), -- or CLOB

  constraint Sample_PK primary key (Site_ID, Recorded_On),
  constraint Sample_Site_FK foreign key (Site_ID) references Site,
  constraint Sample_Scientist_FK foreign key (Scientist_Num) references Scientist(Scientist_Num),
  -- the following is the problem:
  constraint Sample_Measure_FK foreign key (Recorded_On) references Measurement(Recorded_On)
);

create table Measurement
(
  Site_ID varchar2(5) not null,
  Recorded_On timestamp not null,
  Name varchar2(50),
  Value numeric(10,8),
  Outlier_Indicator varchar2(50),

  constraint Measurement_PK primary key(Site_ID, Recorded_On),

);

我收到的错误消息是:

Error starting at line : 65 in command -
create table Sample
(
  Site_ID       varchar2(5) not null,
  Recorded_On timestamp not null,
  Scientist_Num varchar2(7) not null,
  Comments      varchar2(4000), -- or CLOB

  constraint Sample_PK primary key (Site_ID, Recorded_On),
  constraint Sample_Site_FK foreign key (Site_ID) references Site,
  constraint Sample_Scientist_FK foreign key (Scientist_Num) references Scientist(Scientist_Num),
  constraint Sample_Measure_FK foreign key (Recorded_On) references Measurement(Recorded_On)
)
Error report -
SQL Error: ORA-02270: no matching unique or primary key for this column-list
02270. 00000 -  "no matching unique or primary key for this column-list"
*Cause:    A REFERENCES clause in a CREATE/ALTER TABLE statement
           gives a column-list for which there is no matching unique or primary
           key constraint in the referenced table.
*Action:   Find the correct column names using the ALL_CONS_COLUMNS
           catalog view

其他外键可以使用,但粗体的外键不起作用。

2 个答案:

答案 0 :(得分:1)

需要在Measurement

之前创建Sample

验证外键,因此引用的表必须已存在。

外键需要指向另一个表的主键

  

约束Sample_Measure_FK外键(Recorded_On)引用Measurement(Recorded_On)

好吧,Recorded_on不是Measurement的主键。或者它也可以是一个独特的约束,但它也不是。

您通常将外键指向其他表的主键。

答案 1 :(得分:1)

也许这是命名,但我希望单个样本有多个测量值,这表明外键关系在错误的表上:

create table Sample (
  Site_ID       varchar2(5) not null,
  Recorded_On timestamp not null,
  Scientist_Num varchar2(7) not null,
  Comments      varchar2(4000), -- or CLOB

  constraint Sample_PK primary key (Site_ID, Recorded_On)
  constraint Sample_Site_FK foreign key (Site_ID) references Site,
  constraint Sample_Scientist_FK foreign key (Scientist_Num) references Scientist(Scientist_Num)
);


create table Measurement (
  Site_ID varchar2(5) not null,
  Recorded_On timestamp not null,
  Name varchar2(50),
  Value numeric(10, 8),
  Outlier_Indicator varchar2(50),

  constraint Measurement_Sample_FK foreign key (Site_ID, Recorded_On) references Sample(Site_ID, Recorded_On),

  constraint Measurement_PK primary key (Site_ID, Recorded_On, Name)
);

This does work.