2014-12-03 39 views
0

我在使外鍵與我的一些主鍵匹配時遇到了一些麻煩。我不斷收到錯誤"Error: Cannot add foreign key constraint"。我不知道自己做錯了什麼,但可能是因爲我一直盯着它太久。有什麼建議麼?使用Java的外鍵引用

//customer table 
     statement.execute("CREATE TABLE IF NOT EXISTS mydb.Customers (" 
       + " FirstName VARCHAR(21) NOT NULL, " 
       + " StreetAddress VARCHAR(45) NULL, " 
       + " TelephoneNumber VARCHAR(45) NULL, " 
       + " SetOfFrequentFlyerMemberships VARCHAR(45) NULL, " 
       + " PreferredPaymentMethod VARCHAR(45) NULL, " 
       + " Preferences VARCHAR(45) NULL, " 
       + " City VARCHAR(45) NULL, " 
       + " State INT NULL, " 
       + " LastName VARCHAR(45) NULL, " 
       + " CustomerID VARCHAR(45) NOT NULL, " 
       + " Customerscol VARCHAR(45) NOT NULL, " 
       + " PRIMARY KEY (CustomerID, Preferences))"); 

     //reservation table 
     statement.execute("CREATE TABLE IF NOT EXISTS mydb.Reservations (" 
       + " CustomerID INT NOT NULL, " 
       + " TravelAgent VARCHAR(45) NOT NULL, " 
       + " FlightID INT NULL, " 
       + " PaymentType VARCHAR(45) NULL, " 
       + " StatusOfReservation VARCHAR(45) NULL, " 
       + " ReservationID VARCHAR(45) NOT NULL, " 
       + " PaymentID INT NOT NULL, " 
       + " Preferences VARCHAR(45) NULL, " 
       + " PRIMARY KEY (ReservationID), " 
       + " CONSTRAINT fk_Reservations_Customers1 " 
       + " FOREIGN KEY (CustomerID) " 
       + " REFERENCES mydb.Customers(CustomerID), " 
       + " CONSTRAINT fk_Reservations_Payment1 " 
       + " FOREIGN KEY (PaymentID) " 
       + " REFERENCES mydb.Payment(PaymentID), " 
       + " CONSTRAINT fk_Reservations_Flights1 " 
       + " FOREIGN KEY (FlightID) " 
       + " REFERENCES mydb.Flights(FlightID), " 
       + " CONSTRAINT fk_Reservations_Preference1 " 
       + " FOREIGN KEY (Preferences) " 
       + " REFERENCES mydb.Customers(Preferences))"); 

      //frequent flyer membership 
      statement.execute("CREATE TABLE IF NOT EXISTS mydb.FrequentFlyerMemberships (" 
       + " FrequentFlyerID INT NOT NULL, " 
       + " customerID VARCHAR(45) NULL, " 
       + " ReservationID VARCHAR(45) NULL, " 
       + " PRIMARY KEY (FrequentFlyerID), " 
       + " CONSTRAINT fk_FrequentFlyerMemberships_Reservations1 " 
       + " FOREIGN KEY (ReservationID) " 
       + " REFERENCES mydb.Reservations(ReservationID))"); 

這不是我所有的代碼,但這些是我似乎遇到問題的唯一塊。

+0

哪裏'mydb.Flights',「mydb.Payment」表 – xrcwrn 2014-12-03 07:49:59

+0

我很** **擔心名爲'Customers'的表,其中'Preferences'是主鍵的一部分。沒有理由成爲_any_鍵的一部分。鑑於您當前的列列表,它應該很可能是_only_'CustomerId'。該列應該是一個普通的'INTEGER'(我在這裏看不到任何45字符字符串的理由)。 – 2014-12-03 08:33:37

回答

3

使用像下面的腳本製作的外鍵與其它表 的複合鍵這將工作

CONSTRAINT fk_Reservations_Customers1 
FOREIGN KEY (CustomerID,Preferences) 
REFERENCES stackoverflowprob.Customers(CustomerID,Preferences));