2016-04-09 5 views
-1

Dies ist meine erste Tabelle: ToursFehler enthält keine primären oder Kandidatenschlüssel, die die Referenzierung Spalte passen

CREATE TABLE [dbo].[Tours] (

[Id]    INT   IDENTITY (1, 1) NOT NULL, 
[TourId]   INT   NOT NULL, 
[TCountry]  NVARCHAR (50) NULL, 
[TName]   NVARCHAR (100) NULL, 


CONSTRAINT [PK_Tours] PRIMARY KEY CLUSTERED ([TourId]), 
CONSTRAINT [FK_Tours_ToTourDates] FOREIGN KEY ([TourId]) REFERENCES [TourDates]([TourId])); 

und das ist die nächste, Tabelle: Tourdaten

CREATE TABLE [dbo].[TourDates] (

[Id]   INT   IDENTITY (1, 1) NOT NULL, 
[TourId]  INT   NOT NULL, 
[TourStartDate] DATETIME  NULL, 


CONSTRAINT [PK_TourDates] PRIMARY KEY CLUSTERED ([Id] ASC)); 

für die erste Tabelle Ich habe diese Fehler: '[dbo] [Übersicht]'

SQL71516 :: Die referenzierte Tabelle enthält keine primären oder Kandidatenschlüssel, die passen die referenzierende Spaltenliste in der Fremdschlüssel. Wenn die referenzierte Spalte eine berechnete Spalte ist, sollte sie beibehalten werden.

Wie kann ich Kandidat Schlüssel für TourId Spalte in TourDates Tabelle definieren ?? Ich suchte viel, konnte aber keinen genauen Weg finden.

Schätzen Sie Ihre Hilfe.

Antwort

1

Ich glaube, dass Sie etwas anderes tun sollten, als Sie gerade tun. Tours Tabelle scheint jede Tour zu halten, die in 1: N-Beziehung mit TourDates sein sollte vorausgesetzt, dass ich es richtig verstehe.

Daher sollte Ihre FOREIGN KEY-Einschränkung tatsächlich auf TourDates, nicht Tours Tabelle deklariert werden.


In Bezug auf Ihre Frage (was ich glaube nicht, dass, wenn Sie diese Beziehungen zu dem, was wechseln sie in meinem Verständnis sein sollte) in einem solchen Fall würden Sie normalerweise benötigen einen eindeutigen Index auf dieser Spalte zu erstellen.

Sie können nicht auf eine Spalte verweisen, die mehrere genau dieselben Werte über Fremdschlüsseleinschränkung enthält, also die Notwendigkeit für eine Art eines eindeutigen Schlüssels.


bearbeiten nach Kommentar:

ALTER TABLE [dbo].[TourDates] 
    ADD CONSTRAINT FK_Tour_TourDates 
    FOREIGN KEY ([TourId]) REFERENCES [dbo].[Tours]([TourId]) ON DELETE CASCADE 
+0

Dank für you'r Pflege. Ja genau, es ist 1: N-Beziehung mit TourDates. aber ich muss mal was tun wenn einer von Tours gelöscht wird dann sollten alle Tourdaten von dieser Tour gelöscht werden. Ich brauche eine Lösch-Kaskade in Tabellen-Touren ... Ist es möglich in der Art wie du erklärt hast auf kaskadieren in Tourdates Fremdschlüssel zu löschen? –

+0

Danke 100000 mal. Ich habe diese Frage auch gelesen. Alles war hilfreich, danke. –

+0

Kann ich fragen, warum haben Sie diese Antwort rückgängig gemacht? –

Verwandte Themen