此列列表没有匹配的唯一键或主键(尝试添加两个fk)

91zkwejq  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(322)

我得到的错误没有匹配此列列表的唯一或主键,可能是什么?我正在使用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)

);````
8gsdolmq

8gsdolmq1#

外键必须指向作为键的列(或列的元组),即声明为主键或至少是唯一的。
可能您忘记了中的主键约束 strechflightcode .

CREATE TABLE stretch
             (...
              PRIMARY KEY (flightcode));

作为旁注: stretchsetflightbooking 看起来可疑。如果要存储逗号(或任何其他字符)分隔的 flightcode 来自 strech 在里面,不要。改为“在数据库列中存储带分隔符的列表真的那么糟糕吗?”并通过使用另一个链接预订和扩展的表来规范模式。
另一个旁注是: bookingcode 可能不该在里面 customer 因为这意味着一个客户只能做一次预订。考虑预订表中客户的外键。
还有一个问题:使用适当的数据类型。日期/时间 flightdate (和 flighthour ,应该包括在 flightdate )在 stretch , birthcustomer 或者 expiredateflightbooking 不应该是弦。改用日期/时间类型。

vddsk6oq

vddsk6oq2#

您引用的表必须具有唯一或主键(如错误消息所示)。
你指的是 STRETCH 表及其属性 FLIGHTCODE 列,但没有唯一键或主键。我建议你创造它。
旁注:使用 varchar2 ,不是 varchar .

相关问题