복붙노트

[SQL] 참조 테이블에 기본 또는 후보 키가 없습니다

SQL

참조 테이블에 기본 또는 후보 키가 없습니다

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
        )
    )

누군가가 여기에 일어나고 내가 어떻게 고칠 수 뭐죠 말해 주 시겠어요. 같은 문제는 내가 외부 키를 만들고 싶어 다른 모든 키를 사용하여 발생합니다. 내가 기본 키를 참조 할 경우 예외입니다.

해결법

  1. ==============================

    1.당신이 외부 키를 생성 할 경우, 기본 키 또는 고유 제한 조건이있는 필드 중 하나를 참조해야합니다.

    당신이 외부 키를 생성 할 경우, 기본 키 또는 고유 제한 조건이있는 필드 중 하나를 참조해야합니다.

    당신이 고객의 이름을 표시하려면, 외부 키 참조 CustomerID를을하고, 조인으로 결과를 표시합니다.

  2. ==============================

    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])
    

    했다.

  3. from https://stackoverflow.com/questions/12213301/there-are-no-primary-or-candidate-keys-in-the-referenced-table by cc-by-sa and MIT license