【问题标题】:I am running into a repeated problem with a parent key not found我遇到了一个重复的问题,找不到父键
【发布时间】:2021-03-08 22:04:11
【问题描述】:

我可以插入客户信息,但是我尝试插入预订信息,然后我收到错误:ORA-02291:违反完整性约束 - 未找到父键。 我想我的问题是我需要把数据放在那里,哪个表需要先有数据吗?还是我还缺少其他东西? 我对 SQL 还是很陌生,这是我的第一个 SQl 课程,我们将不胜感激。 此外,我将拥有相同的数据的某些部分,因此我还想知道如何在表中包含重复项。

CREATE TABLE City
(City_Code VARCHAR2(3) CONSTRAINT pk_City Primary Key,
City_Name VARCHAR2(15),
State_ VARCHAR2(2)
);


CREATE TABLE Airport
(Airport_Code VARCHAR2(7) CONSTRAINT pk_Airport Primary Key,
City_Code VARCHAR2(3), CONSTRAINT fk_Airport_City_Code FOREIGN KEY(City_Code)
REFERENCES City, 
Airport_Name VARCHAR2(30)
);


CREATE TABLE Acraft_Data
(Type_ VARCHAR2(6),
Description_ VARCHAR2(20),
Capacity_ VARCHAR2(3),
Range_ VARCHAR2(4)
);

CREATE TABLE AirCraft_Type
(Serial_Num VARCHAR2(8) CONSTRAINT pk_AirCraft_Type Primary Key, 
Type_ VARCHAR2(6), CONSTRAINT fk_AirCraft_Type FOREIGN KEY(Type_)
REFERENCES ACraft_Data
);


CREATE TABLE FlightData
(Flt_Nbr VARCHAR2(3) CONSTRAINT pk_FlightData Primary Key,
Depart_Code VARCHAR2(30),
CONSTRAINT fk_Flight_Data_Depart_Code FOREIGN KEY(Depart_Code)
REFERENCES Airport,
Ariv_Code VARCHAR2(30),
CONSTRAINT fk_Flight_Data_Ariv_Code FOREIGN KEY(Ariv_Code)
REFERENCES Airport
);

CREATE TABLE Shed_Flight(
  Flt_Date DATE
              NOT NULL,
  Flt_Nbr  VARCHAR2(3)
              NOT NULL,    
  Seats_Resvd VARCHAR2(3),
  Seat_Ava   VARCHAR2(3),
  TOD         VARCHAR2(8),
  TOA         VARCHAR2(8),
  Serial_Num     VARCHAR2(10),
  CONSTRAINT PK_Shed_Flight PRIMARY KEY(Flt_Nbr, Flt_Date),
    CONSTRAINT fk_Shed_Flight_Flight_Nbr
    FOREIGN KEY (Flt_Nbr) REFERENCES FlightData (Flt_Nbr),
  CONSTRAINT fk_Shed_Flight
    FOREIGN KEY (Serial_Num) REFERENCES AirCraft_Type (Serial_Num)
);

CREATE TABLE CustomerAP
(Cust_Nbr VARCHAR2(4) CONSTRAINT pk_Customer Primary Key NOT NULL,
Cust_Name VARCHAR2(15) NOT NULL
);


CREATE TABLE Reservation(
Cust_Nbr    VARCHAR2(4)
              NOT NULL,
  Flt_Nbr  VARCHAR2(3)
              NOT NULL,
  Flt_Date DATE
              NOT NULL,
  CONSTRAINT fk_Reservation_Cust_Nbr
    FOREIGN KEY (Cust_Nbr) REFERENCES CustomerAP (Cust_Nbr),
  CONSTRAINT fk_Flt_Nbr_Flt_Date
    FOREIGN KEY (Flt_Nbr, Flt_Date) REFERENCES Shed_Flight ( Flt_Nbr, Flt_Date )

);

预订插入

INSERT INTO Reservation values(1001, 181, '07/13/2000');
INSERT INTO Reservation values(1004, 110, '07/12/2000');
INSERT INTO Reservation values(1004, 899, '07/14/2000');
INSERT INTO Reservation values(1055, 359, '07/13/2000');
INSERT INTO Reservation values(1058, 950, '07/13/2000');
INSERT INTO Reservation values(1058, 899, '07/14/2000');
INSERT INTO Reservation values(1077, 110, '07/12/2000');
INSERT INTO Reservation values(1080, 333, '07/13/2000');
INSERT INTO Reservation values(1100, 359, '07/132000');
INSERT INTO Reservation values(1155, 359, '07/13/2000');
INSERT INTO Reservation values(1158, 110, '07/12/2000');
INSERT INTO Reservation values(1158, 899, '07/13/2000');

客户插入

INSERT INTO CustomerAP values(1001, 'Ford');
INSERT INTO CustomerAP values(1004, 'Pfeiffer');
INSERT INTO CustomerAP values(1055, 'Harris');
INSERT INTO CustomerAP values(1058, 'Codd');
INSERT INTO CustomerAP values(1077, 'Nelson');  
INSERT INTO CustomerAP values(1080, 'Cassatt');
INSERT INTO CustomerAP values(1100, 'Streep');
INSERT INTO CustomerAP values(1155, 'Lechowick');

Acraft_Data

INSERT INTO ACraft_Data values( 'BO727','5-Seat, 2-engine jet', 110, 1800);
INSERT INTO ACraft_Data values( 'DC9', '6-Seat, prop w/jet', 168, 2800);
INSERT INTO ACraft_Data values( 'BO737', '6-Seat, 2-engine jet', 174, 2500);
INSERT INTO ACraft_Data values( 'BO747', '10-Seat, 4-engine jet', 300, 3500);
INSERT INTO ACraft_Data values( 'DC9', '6-Seat, prop w/jet', 168, 2800);
INSERT INTO ACraft_Data values( 'BO737', '6-Seat, 2-engine jet', 174, 2500);
INSERT INTO ACraft_Data values( 'BO727', '5-Seat, 2-engine jet', 110, 1800);

【问题讨论】:

    标签: oracle plsql oracle11g duplicates foreign-keys


    【解决方案1】:

    按以下顺序插入表,一些表依赖于其他表的主键。

    City, 
    Acraft_Data, 
    Airport, 
    AirCraft_Type, 
    FlightData ,
    Shed_Flight, 
    CustomerAP, 
    Reservation
    

    【讨论】:

      【解决方案2】:
      CONSTRAINT fk_Reservation_Cust_Nbr
          FOREIGN KEY (Cust_Nbr) REFERENCES CustomerAP (Cust_Nbr)
      

      当你设置一个引用另一个表列的 FK 时,你不能插入不在 ref col 中的东西。

      INSERT INTO Reservation values(1158, 110, '07/12/2000');
      INSERT INTO Reservation values(1158, 899, '07/13/2000');
      

      带有Cust_Nbr : 1158 数据的那两行违反了此规则。要么将此数据添加到 ref 表中,要么不添加这些数据,你应该没问题。但请确保检查是否有任何其他类似的错误。

      查看MSDN 以获得更好的信息。

      【讨论】:

      • 哦,是的,我忘了提到@SaiAbhiramInapala 在他的回答中提到的内容。确保首先建立参考表,否则你没有参考。
      猜你喜欢
      • 1970-01-01
      • 2018-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2014-10-25
      • 2021-11-01
      相关资源
      最近更新 更多