我得到的错误没有匹配此列列表的唯一或主键,可能是什么?我正在使用oracle live sql。得到错误的表是最后一个,其他表都正常工作。错误是ora 02270
CREATE TABLE flightBooking
( bookingCode varchar(5) not null,
stretchSet varchar(50),
expireDate varchar(12),
CONSTRAINT flightBooking_pk PRIMARY KEY (bookingCode)
);
CREATE TABLE customer
( cpf varchar(10),
rg varchar(7),
personName varchar(30),
birth varchar(12),
email varchar(30),
city varchar(30),
uf varchar(2),
bookingCode varchar(5) not null,
CONSTRAINT fk_bookingCode FOREIGN KEY (bookingCode) REFERENCES flightBooking(bookingCode)
);
CREATE TABLE stretch
( flightDate varchar(12),
flightHour varchar(6),
flightClass varchar(15),
flightCode varchar(5) not null,
destination varchar(30),
origin varchar(30),
scale varchar(60),
aeroplaneType varchar(30)
);
CREATE TABLE sell
(voucher varchar(50),
bookingCode varchar(5) not null,
flightCode varchar(5) not null,
CONSTRAINT fk_bookingCode FOREIGN KEY (bookingCode) REFERENCES flightBooking(bookingCode),
CONSTRAINT fk_flightCode FOREIGN KEY (flightCode) REFERENCES stretch(flightCode)
);````
2条答案
按热度按时间8gsdolmq1#
外键必须指向作为键的列(或列的元组),即声明为主键或至少是唯一的。
可能您忘记了中的主键约束
strech
在flightcode
.作为旁注:
stretchset
在flightbooking
看起来可疑。如果要存储逗号(或任何其他字符)分隔的flightcode
来自strech
在里面,不要。改为“在数据库列中存储带分隔符的列表真的那么糟糕吗?”并通过使用另一个链接预订和扩展的表来规范模式。另一个旁注是:
bookingcode
可能不该在里面customer
因为这意味着一个客户只能做一次预订。考虑预订表中客户的外键。还有一个问题:使用适当的数据类型。日期/时间
flightdate
(和flighthour
,应该包括在flightdate
)在stretch
,birth
在customer
或者expiredate
在flightbooking
不应该是弦。改用日期/时间类型。vddsk6oq2#
您引用的表必须具有唯一或主键(如错误消息所示)。
你指的是
STRETCH
表及其属性FLIGHTCODE
列,但没有唯一键或主键。我建议你创造它。旁注:使用
varchar2
,不是varchar
.