2017-02-15 9 views
1

Я создал таблицу Поставщик п MySQL
Поставщиков Описания:Ошибка при создании внешнего ключа в таблице продуктов

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) 

Теперь я хочу, чтобы создать таблицу Products Описания продуктов будет:

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) 

Но когда я пытаюсь создать таблицу продуктов, г ошибка:

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

CSM это имя базы данных.

+1

Вы должны ссылаться на идентификатор, а не имя –

+0

@VishalRaut What 'Юргена d' это означало, что вместо столбца «Supplier_Name» вместо столбца «Supplier_Name» ссылался столбец «Supplier_ID» таблицы «Поставщик». Вы не можете иметь ссылочный ключ, ссылающийся на столбец, который не является первичным ключом. –

ответ

0

попробовать это:

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

Могу ли я сделать Supplier_ID и Supplier_Name как первичный ключ. Будет ли это работать? –

+0

Почему у вас есть 2 первичных ключа на одном столе? – user7417866

+1

@VishalRaut У вас не может быть двух основных ключей на одной таблице. Даже если вы создаете составной первичный ключ, состоящий из двух столбцов, вы не можете ссылаться на один из них в качестве ссылочного ключа. Я также не буду решать проблему. У вас может быть более одного поставщика с таким же именем, чтобы оно побеждало цель целостности. –

0

Убедитесь, что вы ссылка ID не имя, если вы хотите иметь имя в качестве ссылки макияжа имени поставщика в качестве первичного и идентификатора уникальны. Хотя имея ID первичный ключ очень рекомендуется

1

Как @juergend также отметил в комментариях, вы должны ссылаться на Supplier_ID поле в внешнем ключе, а не Supplier_Name, также следует заменить Supplier_Name с Supplier_ID поля в вашем products Таблица. Я также изменил бы тип данных идентификатора поставщика на целое число, возможно, с автоматическим добавлением.

Причины

  1. Вы можете иметь несколько поставщиков с тем же именем
  2. Поставщик может изменить название в течение времени
  3. Это намного эффективнее, чтобы перепроверить фиксированное целое значение длины над длинная строка переменной длины.

Si, я бы изменить products таблицу следующим образом:

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 стол:

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) 
Смежные вопросы