2017-01-30 7 views
0

Ich arbeite mit drei Tabellen.Warum erhalte ich diesen Fehler: Fehler 1215 Kann keine Fremdschlüsseleinschränkung hinzufügen?

CREATE TABLE Unit(
AptNumber integer(4), 
PopertyId integer(4), 
RentalPrice integer(8), 
Size varchar (20), 
PRIMARY KEY (PopertyId, AptNumber), 
FOREIGN KEY (PopertyId) REFERENCES Property (Id) 
); 


CREATE TABLE Customer(
Name varchar(15), 
RenterId integer(6), 
PRIMARY KEY(RenterId) 
); 

und

CREATE TABLE Rentals(
AptNumber integer(4), 
RenterId integer(6), 
StartDate varchar(8), 
EndDate varchar(8), 
PRIMARY KEY(AptNumber, RenterId), 
FOREIGN KEY (AptNumber) REFERENCES Unit(AptNumber), 
FOREIGN KEY (RenterId) REFERENCES Customer(RenterId) 
); 

Wenn ich versuche, die dritte Tabelle zu erstellen, Mieten, erhalte ich die Fehlermeldung. FEHLER 1215 (HY000): Kann keine Fremdschlüsseleinschränkung hinzufügen.

Meine Schlüssel stimmen in Datentyp und Größe überein, daher bin ich mir nicht sicher, was das Problem ist.

Danke für Ihre Hilfe.

+0

Wo ist dein Tabelle Eigenschaft? –

Antwort

1

Das ist das Problem:

FOREIGN KEY (AptNumber) REFERENCES Unit(AptNumber), 

Wenn Sie eine übergeordnete Spalte wie Unit (AptNumber) verweisen, dass Spalte die erste Spalte in einem Schlüssel in der referenzierten Tabelle sein muss.

Aber dein ist das Sekunden Spalte in Primärschlüssel der Einheit:

PRIMARY KEY (PopertyId, AptNumber), 

Auch im Idealfall der Fremdschlüssel sollte die ganze primären oder eindeutigen Schlüssel verweisen, so dass Sie garantiert sind, dass eine Zeile in Die untergeordnete Tabelle verweist genau auf eine Zeile in der übergeordneten Tabelle.

Technisch gesehen verfügt InnoDB über ein nicht standardmäßiges Feature, mit dem ein Fremdschlüssel auf eine Teilmenge der Spalten des übergeordneten Primärschlüssels verweisen kann. Dies bedeutet jedoch, dass Ihre untergeordnete Zeile mehr als eine Zeile in der übergeordneten Tabelle referenzieren kann. Das führt zu einer Reihe von seltsamen Fällen wie, wenn Sie die Zeile in der übergeordneten Tabelle löschen? Am besten vermeiden Sie das Erstellen solcher Fremdschlüssel.

0

Es ist besser:

1.Create Main table first with Primary Key. 
2.Create Foreign Key table without a constraints. 

und so weiter ....

Alter Tabelle tbl_foreign contraints hinzufügen:

ALTER TABLE tbl_foreign 
ADD FOREIGN KEY (P_Id) 
REFERENCES Persons(P_Id) 

Sehen Sie diese für Alter Tabelle Beschränkt

Verwandte Themen