2012-08-31 22 views
19

Error: There are no Primary or Candidate Keys in the referenced table 'dbo.Customers' that match the referencing column list in the foreign key 'FK_Reservation_Customers_FrstNme FOREIGN KEY'No hay claves principales o candidato en la tabla referenciada

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

Podría alguien decirme qué está sucediendo aquí y cómo puedo solucionarlo. El mismo problema ocurre con todas las otras teclas que quiero hacer una clave foránea. Excepto si quiero hacer referencia a una clave principal.

+4

Intenta agregar una clave externa asignada a un campo que puede contener nulos, no es único ... Y, por cierto, intenta agregar dos claves externas que hacen referencia a la misma tabla. ¿Qué quieres lograr con esta segunda clave? –

Respuesta

36

Si desea crear una clave externa, debe hacer referencia a la clave principal o a un campo con una restricción única.

Si desea mostrar el nombre del cliente, haga referencia a la clave externa CustomerID y muestre los resultados con una combinación.

+0

Gracias entiendo ahora. - Esto también significaría que no necesitaría nombre y apellido en la Reservación, si voy a utilizar una unión para mostrar el nombre y apellido de la tabla del cliente, ¿correctos? – user1638362

+1

Eso es correcto. A menos que esté preocupado por conocer el nombre del cliente en el momento de la reserva, independientemente de cualquier cambio posterior que puedan hacer a su nombre – podiluska

2

Me encontré con este error al especificar las columnas de clave en la tabla a la que se hace referencia que estaban fuera del mismo orden que la clave principal o la clave candidata se definió en la tabla de referencia.

Al cambiar el orden en que se especificaron las columnas, se solucionó.

Ex:

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

falló mientras

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

trabajaban.

Cuestiones relacionadas