【问题标题】:No matching unique or primary key for this column-list (Trying to add two FK's )此列列表没有匹配的唯一键或主键(尝试添加两个 FK)
【发布时间】:2020-07-11 14:13:03
【问题描述】:

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

);````

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    外键必须指向作为键的列(或列的元组),即声明主键或至少是唯一的。

    大概你忘记了strechflightcode上的主键约束。

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

    附带说明:flightbooking 中的 stretchset 看起来很可疑。如果您打算在其中存储来自strech 的逗号(或任何其他字符)分隔的flightcodes 列表,请不要。而是阅读"Is storing a delimited list in a database column really that bad?" 并通过使用另一个链接预订和延伸的表来规范化架构。

    另外注意:bookingcode 可能不应该在customer 中,因为这意味着一个客户只能进行一次预订。考虑预订表中客户的外键。

    还有一个:使用适当的数据类型。 stretch 中的 flightdate(和 flighthour,应该真正包含在 flightdate 中)、customer 中的 birthflightbooking 中的 expiredate 等日期/时间不应是字符串。请改用日期/时间类型。

    【讨论】:

      【解决方案2】:

      您引用的表必须具有 - 如错误消息所述 - 唯一键或主键。

      您正在引用 STRETCH 表及其 FLIGHTCODE 列,但它没有唯一键或主键。我建议你创建它。


      附注:使用varchar2,而不是varchar

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-15
        • 2023-04-03
        • 1970-01-01
        • 2022-01-10
        相关资源
        最近更新 更多