2016-03-29 15 views
0

Hi Ich erstelle mehrere Tabellen, von denen einige mehrere Schlüssel haben, die auf die gleiche Tabelle verweisen. Wenn ich versuche, die Fremdschlüssel Links zu erstellen Ich bin gegeben:MySQL Foreign Key Constraint schlägt für mehrere Schlüssel fehl

errno: 150 "Foreign key constraint is incorrectly formed" 

Hier sind die Tische Ich schaffe:

create table EventFeed (
EventFeedID integer auto_increment not null, 
EventName varchar(100), 
EventTime Timestamp, 
EventLocation varchar(100), 
primary key (EventFeedID) 
); 

create table Calendar (
MyEventID integer auto_increment not null, 
EventFeedID integer, 
EventName varchar(100), 
EventTime Timestamp, 
EventLocation varchar(100), 
AttendeeID varchar(100), 
primary key (MyEventID), 
foreign key (EventFeedID) references EventFeed (EventFeedID), 
foreign key (EventName) references EventFeed (EventName), 
foreign key (EventTime) references EventFeed (EventTime), 
foreign key (EventLocation) references EventFeed (EventLocation), 
foreign key (AttendeeID) references Users (UserID) 
); 

Der Fehler scheint von den Fremdschlüssel in der ‚Kalender‘ zu kommen Tabelle aber einige meiner anderen Tabellen haben ähnliche Fremdschlüssel verwendet und keine Fehler gegeben

kann jemand beraten, was ich falsch mache?

Jede Hilfe ist viel

+0

Können Sie versuchen 'FOREIGN KEY (X, Y) LITERATUR Ausgehfeed (x, y)' – avrono

+0

Überprüfen Sie auch AttendeeID es die gleiche Art, wie Nutzer ist. Benutzeridentifikation ? – avrono

+0

Prüfen: [13.1.18.3 Verwendung von FOREIGN KEY Constraints :: Fremdschlüsseldefinitionen unterliegen den folgenden Bedingungen] (http://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys. html). [SQL Fiddle-Demo] (http://sqlfiddle.com/#!2/eec9436/1). – wchiquito

Antwort

0

geschätzt Sie können einen Fremdschlüssel auf der Säule nicht haben, die ein Nicht-Primärschlüssel mit Ausnahme der Spalten mit eindeutiger Einschränkung ist. Sie müssen also EventName, EventTime usw. eindeutig machen, wenn Sie möchten, dass es von einem Fremdschlüssel referenziert wird.

können Sie prüfen, hier bei: Technet Microsoft

A FOREIGN KEY-Einschränkung muss nicht nur in einer anderen Tabelle zu einer PRIMARY KEY-Einschränkung verbunden sein; Es kann auch definiert werden, um auf die Spalten einer UNIQUE-Einschränkung in einer anderen Tabelle zu verweisen.

Sie können diese Geige für das Arbeitsbeispiel siehe: http://sqlfiddle.com/#!9/05663

+0

Danke, dass funktioniert Great – randomer

+0

@randomer Ich hoffe, dass Sie wissen, dass die Werte in column with unique constraint kann nicht wiederholt werden und gemäß Ihrer Tabelle werden Attribute wie EventTime, EventLocation usw. wiederholt, weshalb Sie keine eindeutige Einschränkung auf sie anwenden. Wenn Sie möchten, dass solche Details automatisch eingefügt werden, können Sie sie mit Hilfe des Primärschlüssels von EventFeed abrufen und zusammen mit benutzerdefinierten Werten für andere Attribute einfügen. – geeksal

+0

Ja, das sollte in Ordnung sein, danke – randomer

Verwandte Themen