我正在尝试使用外键创建一个表,但我一直收到ORA-00904错误。我究竟做错了什么?

时间:2016-05-30 17:14:35

标签: sql oracle foreign-key-relationship ddl

create table reservation (
    reserve_id number PRIMARY KEY,
    date_in       TIMESTAMP,
    date_out    TIMESTAMP,
    made_by    number(4),
    constraint LocationID_fk foreign key (locId) references location(locId),
    constraint fk_guest_id foreign key (guest_id) references guest(guest_id)
);

- 这些是父表

create table guest(
   guest_id NUMBER(3) PRIMARY KEY,
   fname varchar(10),
   lname varchar(5),
   email varchar(10)
);

Create table location (
   locId  NUMBER(4) PRIMARY KEY,
   loc_name  varchar(10),
   manager_name     varchar(15) 
);

-------不断出现的错误

错误报告 -

SQL Error: ORA-00904: "LOCID": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:

1 个答案:

答案 0 :(得分:3)

我认为你误解了约束定义的作用:

constraint LocationID_fk foreign key (locId) references location(locId),
constraint fk_guest_id foreign key (guest_id) references guest(guest_id)

也许您认为通过在locIdguest_id上定义外键约束,它还会自动定义reservation表上的2列?事实并非如此。除了外键约束定义之外,您还必须明确定义2列。类似的东西:

create table reservation (
    reserve_id number PRIMARY KEY,
    date_in       TIMESTAMP,
    date_out      TIMESTAMP,
    made_by       number(4),
    locId         number(4), -- explicitly defined
    guest_id      number(3)  -- explicitly defined
    constraint LocationID_fk foreign key (locId) references location(locId),
    constraint fk_guest_id foreign key (guest_id) references guest(guest_id)
);