2017-02-15 2 views
1

Ich habe eine Tabelle Lieferanten n MySQL
Lieferanten Beschreibung erstellt:Fehler in Fremdschlüssel in der Produkt Tabelle erstellen

Supplier_ID varchar(5) NOT NULL 
Supplier_Name varchar(30) 
Supplier_Address varchar(50) 
Supplier_Contact int(12) 
Supplier_Email varchar(30) 
PRIMARY KEY(Supplier_ID) 

Nun I Tabelle Produkte Beschreibung der Produkte werden erstellt werden soll:

Product_ID varchar(5) NOT NULL 
Product_Name varchar(30) 
Supp_Name varchar(30) 
Product_Category varchar(20) 
Unit_Price int(11) 
Unit_In_Stock int(11) 
PRIMARY KEY(Product_ID) 
FOREIGN KEY(Supp_Name) REFERENCES Suppliers(Supplier_Name) 

Aber wenn ich versuche, Produkttabelle zu erstellen, ist es givin ein g Fehler:

ERROR 1005 (HY000): Can't create table 'csm.products' (error:150)

CSM ist ein Datenbankname.

+1

Sie die ID-Referenz sollte und nicht den Namen –

+0

@VishalRaut Was 'juergen d' gemeint war, die Spalte "Supplier_ID" der Supplier-Tabelle anstelle der Spalte "Supplier_Name" zu referenzieren. Sie können keinen Referenzschlüssel haben, der sich auf eine Spalte bezieht, die kein Primärschlüssel ist. –

Antwort

0

versuchen Sie dies:

Product_ID varchar(5) NOT NULL, 
Product_Name varchar(30), 
Supplier_ID varchar(5) NOT NULL, 
Product_Category varchar(20), 
Unit_Price int(11), 
Unit_In_Stock int(11), 
PRIMARY KEY(Product_ID), 
FOREIGN KEY(Supplier_ID) REFERENCES Suppliers(Supplier_iD) 
+0

Kann ich Supplier_ID und Supplier_Name beide zu einem Primärschlüssel machen. Wird es funktionieren ? –

+0

Warum hätten Sie 2 Primärschlüssel auf demselben Tisch? – user7417866

+1

@VishalRaut Sie können nicht zwei Primärschlüssel auf einer Tabelle haben. Auch wenn Sie einen zusammengesetzten Primärschlüssel aus zwei Spalten erstellen, können Sie keinen davon als Referenzschlüssel verwenden. Ich werde das Problem auch nicht lösen. Sie können mehr als einen Lieferanten mit demselben Namen haben, so dass der Zweck der Integrität vereitelt wird. –

0

Stellen Sie sicher, Referenz-ID nicht nennen, wenn Sie Namen als Referenz make Lieferantennamen als primäre und ID als eindeutige haben wollen. ID Primärschlüssel Obwohl aufweisen, ist sehr

recomended
1

Als @juergend auch in einem Kommentar darauf hingewiesen, sollten Sie das Supplier_ID Feld in dem Fremdschlüssel verweisen, nicht die Supplier_Name, auch sollten Sie die Supplier_Name mit dem Supplier_ID Feld in Ihrem products ersetzen Tabelle. Ich würde auch den Datentyp der Lieferanten-ID in eine ganze Zahl ändern, möglicherweise eine automatisch inkrementierte.

Die Gründe dafür sind

  1. Sie können mit dem gleichen Namen mehrere Lieferanten haben
  2. Ein Lieferant Name im Laufe der Zeit ändern können
  3. Es ist viel effizienter, eine ganze Zahl mit fester Länge Wert zu überqueren überprüfen eine lange Zeichenfolge mit variabler Länge.

Si, würde ich die products Tabelle wie folgt ändern:

Product_ID varchar(5) NOT NULL, 
Product_Name varchar(30), 
Supplier_ID int NOT NULL, 
Product_Category varchar(20), 
Unit_Price int(11), 
Unit_In_Stock int(11), 
PRIMARY KEY(Product_ID), 
FOREIGN KEY(Supplier_ID) REFERENCES Suppliers(Supplier_iD) 

supplier Tabelle:

Supplier_ID int NOT NULL [auto_increment] 
Supplier_Name varchar(30) 
Supplier_Address varchar(50) 
Supplier_Contact int(12) 
Supplier_Email varchar(30) 
PRIMARY KEY(Supplier_ID) 
Verwandte Themen