2012-04-05 17 views
0

Ich habe ein wenig Probleme beim Erstellen eines Fremdschlüssels in meiner DB. Hier ist ein paraphrasiert Modell von dem, was meine Tabellen wie folgt aussehen:Erstellen neuer Fremdschlüssel (SQL Server)

HINWEIS

* (PK) NOTE_ID BIGINT 
*  TITLE  VARCHAR(200) 
*  DATE  DATETIME 
*  SERIES_ID BIGINT 

SERIES

* (PK) SERIES_ID BIGINT 
*  TITLE  VARCHAR(200) 
*  DESCR  VARCHAR(1000) 

Ich versuche, eine zu schaffen "hat eine" Beziehung zwischen NOTE und SERIES von SERIES_ID. Ich dachte, dass durch SERIES_ID einen Fremdschlüssel zwischen den beiden Tabellen Einrichten der Lösung wäre, aber wenn ich versuche, es zu schaffen, bekomme ich folgende Fehlermeldung:

ERROR: There are no primary or candidate keys in the referenced table 'dbo.SERIES' that match the referencing column list in the foreign key 'FK_SERIES_NOTE'. Could not create constraint

Ich bin mit dem Web-Datenbank-Manager, der mit kommt der GoDaddy SQL Server, den ich eingerichtet habe, also bin ich nicht sicher, was die zugrundeliegende Frage versucht, zu verwenden, oder ich würde es veröffentlichen.

Am Ende des Tages, das ist alles, um eine Beziehung zu erstellen, so dass die NHibernate-Zuordnungen für mein Note-Objekt eine Eins-zu-Eins-Beziehung zu einem Series-Objekt enthalten. Ich versuche vielleicht nicht einmal, den richtigen Weg mit dem Fremdschlüssel zu finden.

Gehe ich den richtigen Weg?

EDIT: In einem Versuch, zu einem einfachen Beispiel der Tabellen zu paaren nach unten, nahm ich, was ich dachte mehr unkritischen Spalten sein. Letztendlich habe ich jedoch ein Feld verlassen, das eigentlich ein Teil des zusammengesetzten Primärschlüssels in der Reihentabelle war. Also, weil ich versuchte, den Fremdschlüssel nur einem Teil des zusammengesetzten Schlüssels zuzuweisen, erlaubte es mir nicht, dies zu tun.

Am Ende habe ich einen anderen Blick auf die Struktur meiner Tabelle geworfen und festgestellt, dass ich nicht wirklich das andere Stück des zusammengesetzten Schlüssels brauche - und nach dem Entfernen funktioniert die Zuweisung des Fremdschlüssels jetzt großartig.

+0

Ohne die helfen ** tatsächliche T-SQL-Anweisung ** generiert wird, ist es wirklich schwer, irgendetwas zu sagen .... am wahrscheinlichsten, dass Web-Manager etwas falsch macht - oder Sie die falschen Spalten oder etwas auswählen ..... –

+1

@Tyler, Aus einer NHibernate-Perspektive und einer Datenbankperspektive ist das keine Eins-zu-eins-Beziehung. Es ist eine Beziehung von Mensch zu Mensch. Es wäre eine Eins-zu-eins-Beziehung, wenn beide Primärschlüssel "NOTE_ID" wären. –

+3

Sie haben 'SERIES_ID' als Primärschlüssel in' SERIES' markiert, aber haben Sie überprüft, dass dies tatsächlich so ist? Viele Leute verwechseln Primärschlüssel und Identitätsspalten - das sind zwei separate Konzepte. Wenn möglich, können Sie mit der von Ihnen verwendeten Manager-Anwendung Skripts für vorhandene Objekte generieren? In diesem Fall wäre es sinnvoll, die eigentlichen Tabellendefinitionen anstelle Ihrer Pseudo-Definitionen hinzuzufügen. –

Antwort

0

Wenn Sie können, können Sie versuchen, die folgende Anweisung in einem Query Analyzer ausgeführt wird und sehen Sie die resultierende Fehlermeldung (ich denke, @Damien_The_Unbeliever ist rechts):

ALTER TABLE NOTE ADD CONSTRAINT FK_SERIES_NOTE 
FOREIGN KEY (SERIES_ID) REFERENCES SERIES(SERIES_ID) 
--ON DELETE CASCADE 
-- uncomment the preceding line if you want a delete on a serie 
-- to automatically delete all notes on this serie 

Hope this

Verwandte Themen