【问题标题】:there are not Primary or candidate keys in the referenced table 'hotel' that match the referencing column list in the foreign key 'fk_rooms_hotel'引用表 'hotel' 中没有与外键 'fk_rooms_hotel' 中的引用列列表匹配的主键或候选键
【发布时间】:2020-08-12 13:53:31
【问题描述】:

您好,有人可以帮我解决这个错误。我只是在学习 SQL,不知道如何修复它。 它表示引用表 'hotel' 中没有与外键 'fk_rooms_hotel' 中的引用列列表匹配的主键或候选键。

CREATE database Hotel_database;
USE Hotel_database; 

-- Table `addresses`

CREATE TABLE addresses (
  address_id INT PRIMARY KEY NOT NULL ,
  address_line1 VARCHAR(100) NULL,
  address_line2 VARCHAR(100) NULL,
  city VARCHAR(45) NULL,
  state VARCHAR(45) NULL,
  country VARCHAR(45) NULL,
  zipcode VARCHAR(8) NULL,
  );

  -- -----------------------------------------------------
-- Table `hotel_database`.`hotel_chain`
-- -----------------------------------------------------

CREATE TABLE hotel_chain (
  hotel_chain_id INT NOT NULL,
  hotel_chain_name VARCHAR(45) NULL,
  hotel_chain_contact_number VARCHAR(12) NULL,
  hotel_chain_email_address VARCHAR(45) NULL,
  PRIMARY KEY (hotel_chain_id)
  );
    
  ------------------------------------------------
-- Table `hotel`
-- -----------------------------------------------------


CREATE TABLE hotel (
  hotel_id INT NOT NULL,
  hotel_name VARCHAR(45) NULL,
  hotel_contact_number VARCHAR(12) NULL,
  hotel_email_address VARCHAR(45) NULL,
  hotel_website VARCHAR(45) NULL,
  hotel_description VARCHAR(100) NULL,
  hotel_floor_count INT NULL,
  hotel_room_capacity INT NULL,
  hotel_chain_id INT NULL,
  addresses_address_id INT NOT NULL,
  check_in_time TIME NULL,
  check_out_time TIME NULL,
  PRIMARY KEY (hotel_id, addresses_address_id),
  CONSTRAINT fk_hotel_addresses
    FOREIGN KEY (addresses_address_id)
    REFERENCES addresses (address_id)
    );
 

-- -----------------------------------------------------
-- Table room_type
-- -----------------------------------------------------

CREATE TABLE room_type (
  room_type_id INT NOT NULL,
  room_type_name VARCHAR(45) NULL,
  room_cost DECIMAL(10,2) NULL,
  room_type_description VARCHAR(100) NULL,
  PRIMARY KEY (room_type_id)
  );


-- -----------------------------------------------------
-- Table rooms
-- -----------------------------------------------------

CREATE TABLE rooms (
  room_id INT NOT NULL,
  room_number INT NULL,
  rooms_type_rooms_type_id INT NOT NULL,
  hotel_hotel_id INT NOT NULL,
  PRIMARY KEY (room_id, rooms_type_rooms_type_id, hotel_hotel_id),
  CONSTRAINT fk_rooms_hotel
    FOREIGN KEY (hotel_hotel_id)
    REFERENCES hotel (hotel_id),
  CONSTRAINT fk_rooms_rooms_type1
    FOREIGN KEY (rooms_type_rooms_type_id)
    REFERENCES  room_type (room_type_id)
    );

【问题讨论】:

  • 该消息是解释性的。在您分配了 fk_rooms_hotel 外键的 CREATE TABLE 'rooms' DDL 中,表 'hotel' 不包含 hotel_id 列。也许它的名字不同?

标签: sql-server


【解决方案1】:

目前hotel的主键是(hotel_id,addresses_address_id),所以不能只在(hotel_id)的外键中引用。您可能希望将酒店的 PK 更改为 (hotel_id)。

【讨论】:

  • 是的。在答案中修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多