Подтвердить что ты не робот

В ссылочной таблице нет основных или потенциальных ключей

Ошибка: в ссылочной таблице нет первичных или потенциальных ключей "dbo.Customers", которые соответствуют списку столбцов ссылок в иностранной key 'FK_Reservation_Customers_FrstNme FOREIGN KEY'

DROP TABLE dbo.Customers;
DROP TABLE dbo.Staff;
DROP TABLE dbo.Rooms;
DROP TABLE dbo.Reservation;
GO
CREATE TABLE "Customers"(

    CustomerID int IDENTITY (1,1) NOT NULL,
    FirstName nvarchar(20) NULL,
    LastName nvarchar(20) NULL,
    StreetNo int NULL,
    City nvarchar(20) NULL,
    PostCode nvarchar(20) NULL,
    Email nvarchar(50) NULL,

    CONSTRAINT PK_Customers PRIMARY KEY
    (
        CustomerID
    )
)
CREATE TABLE "Staff"(

    StaffID nvarchar(20) NOT NULL,
    Pass nvarchar(20) NOT NULL,

    CONSTRAINT PK_Staff PRIMARY KEY
    (
        StaffID
    )
)
CREATE TABLE "Rooms"(

    RoomNo int NOT NULL,
    RoomType nvarchar(20) NULL,
    PricePerNight money NULL,
    MaximumOccupancy int NULL,
    No0fBeds int NULL,
    NoOfBathrooms int NULL,
    Entertainment bit NULL,
    RoomService bit NULL,
    Gym bit NULL,

    CONSTRAINT PK_Rooms PRIMARY KEY
    (
        RoomNo
    )
)
CREATE TABLE "Reservation"(

    ReservationID int IDENTITY (1,1) NOT NULL,
    CustomerID int NOT NULL,
    FirstName nvarchar(20) NULL,
    LastName nvarchar(20) NULL,
    RoomType nvarchar(20) NULL,
    RoomNo int NOT NULL,
    CheckInDate date NULL,
    CheckOutDate date NULL,

    CONSTRAINT PK_Reservation PRIMARY KEY
    (
        ReservationID
    ),
    CONSTRAINT FK_Reservation_Customers_CustID FOREIGN KEY
    (
        CustomerID
    )   
        REFERENCES dbo.Customers
        (
            CustomerID
        ),
    CONSTRAINT FK_Reservation_Customers_FrstNme FOREIGN KEY
    (
        FirstName
    )
        REFERENCES dbo.Customers
        (
            FirstName
        )
    )

Может кто-нибудь, пожалуйста, скажите мне, что происходит здесь, и как я могу это исправить. Такая же проблема возникает со всеми другими ключами, которые я хочу сделать с помощью внешнего ключа. За исключением случаев, когда я хочу ссылаться на первичный ключ.

4b9b3361

Ответ 1

Если вы хотите создать внешний ключ, он должен ссылаться либо на первичный ключ, либо на поле с уникальным ограничением.

Если вы хотите отобразить имя клиента, сделайте ссылку на внешний ключ CustomerID и отобразите результаты с помощью соединения.

Ответ 2

Я столкнулся с этой ошибкой при указании ключевых столбцов в ссылочной таблице, которые были вне того же порядка, что и первичный ключ или ключ кандидата в справочной таблице.

Переключение порядка, в котором указаны столбцы, исправлено.

Пример:

ALTER TABLE [dbo].[MCL_item_vendor_override_mst]  WITH CHECK ADD  
CONSTRAINT [FK_MCL_item_vendor_override_mst_item_mst] FOREIGN KEY([item],[site_ref])
    REFERENCES [dbo].[item_mst] ([item],[site_ref])

не удалось выполнить

ALTER TABLE [dbo].[MCL_item_vendor_override_mst]  WITH CHECK ADD  
CONSTRAINT [FK_MCL_item_vendor_override_mst_item_mst] FOREIGN KEY([site_ref],[item])
    REFERENCES [dbo].[item_mst] ([site_ref],[item])

работал.