【问题标题】:Foreign key references using Java使用 Java 的外键引用
【发布时间】:2014-12-03 05:33:53
【问题描述】:

我在让我的外键与我的一些主键匹配时遇到了一些问题。我不断收到错误"Error: Cannot add foreign key constraint"。我不知道我做错了什么,但可能是因为我已经盯着它太久了。有什么建议吗?

//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))");

这不是我的全部代码,但这些是我似乎遇到问题的唯一块。

【问题讨论】:

  • mydb.Flights ,'mydb.Payment' 表在哪里
  • 非常担心名为Customers 的表,其中Preferences 是主键的一部分。它没有理由成为 any 键的一部分。鉴于您当前的列列表,它应该很可能是only CustomerId。该列应该很可能是一个普通的INTEGER(我在这里看不到任何将 45 个字符的字符串作为 id 的原因)。

标签: java sql database constraints


【解决方案1】:

使用像下面的脚本来制作其他表的复合键的外键 这将起作用

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-06
    • 2021-03-11
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-20
    相关资源
    最近更新 更多