Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с внешним ключом
Форумы портала PHP.SU » » Вопросы новичков » Проблема с внешним ключом

Страниц (1): [1]
 

1. Данил Банаев - 23 Ноября, 2011 - 22:02:15 - перейти к сообщению
Всем здравствуйте.
Помогите разобраться с ошибкой.
Создаю по очереди 3 таблицы, первые 2 создаются при создании 3-й вылетает ошибка.
ERROR 1005 (HY000): Can't create table
В гугле пишут что ошибка кроется во внешних ключах, но вроде логика не нарушена все правильно.
Спасибо
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE parts(
  2.                 name VARCHAR(20) NOT NULL,
  3.                 description TEXT NOT NULL,
  4.                 src VARCHAR(20) NOT NULL,
  5.                 CONSTRAINT pkName PRIMARY KEY(name)
  6.         );
  7.         CREATE TABLE category(
  8.                 id_cat INT UNSIGNED NOT NULL AUTO_INCREMENT,
  9.                 name VARCHAR(20) NOT NULL,
  10.                 part VARCHAR(20) NOT NULL,
  11.                 CONSTRAINT pkId_cat PRIMARY KEY(id_cat),
  12.                 CONSTRAINT fkCatagoryPart FOREIGN KEY(part)
  13.                         REFERENCES parts(name)
  14.         );
  15.         CREATE TABLE ads(
  16.                 id_ad INT UNSIGNED NOT NULL AUTO_INCREMENT,
  17.                 title VARCHAR(20) NOT NULL,
  18.           type ENUM('demand','proposal') NOT NULL,
  19.                 datetime INT UNSIGNED NOT NULL,
  20.                 text TEXT NOT NULL,
  21.                 cat VARCHAR(20) NOT NULL,
  22.                 email VARCHAR(20) NOT NULL,
  23.                 fio VARCHAR(50) NOT NULL,
  24.                 address VARCHAR(50) NOT NULL,
  25.                 CONSTRAINT pkId_ad PRIMARY KEY(id_ad),
  26.                 CONSTRAINT fkAdsCat FOREIGN KEY(cat)
  27.                         REFERENCES category(id_cat)
  28.         );
2. EuGen - 23 Ноября, 2011 - 22:18:01 - перейти к сообщению
Нарушена. Вы пытаетесь создать внешний ключ на поле VARCHAR(20), который будет ссылаться на поле типа INT
Типы полей должны совпадать.
3. Данил Банаев - 23 Ноября, 2011 - 22:23:59 - перейти к сообщению
EuGen пишет:
Нарушена. Вы пытаетесь создать внешний ключ на поле VARCHAR(20), который будет ссылаться на поле типа INT
Типы полей должны совпадать.

Вот черт.
Спасибо большое.
Из-за такой мелочи еще и тему создал
(Добавление)
Сделал вот так.
Можете проверить правильна ли связь?
Ни разу не связывал сотавные первичные ключи.
Внешний ключ тоже должен быть составной?
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. CREATE TABLE parts(
  3.         name VARCHAR(20) NOT NULL,
  4.         description TEXT NOT NULL,
  5.         CONSTRAINT pkIdParts PRIMARY KEY(name)
  6. );
  7. CREATE TABLE category(
  8.         name VARCHAR(20) NOT NULL,
  9.         part VARCHAR(20) NOT NULL,
  10.         CONSTRAINT pkIdCat PRIMARY KEY(name,part),
  11.         CONSTRAINT fkCatagoryPart FOREIGN KEY(part)
  12.                 REFERENCES parts(name)
  13. );
  14. CREATE TABLE ads(
  15.         id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  16.         name VARCHAR(20) NOT NULL,
  17.         text TEXT NOT NULL,
  18.         cat VARCHAR(20) NOT NULL,
  19.         part VARCHAR(20) NOT NULL,
  20.         email VARCHAR(20) NOT NULL,
  21.         fio VARCHAR(50) NOT NULL,
  22.         CONSTRAINT pkIdAds PRIMARY KEY(id),
  23.         CONSTRAINT fkAdsCat FOREIGN KEY(cat,part)
  24.                 REFERENCES category(name,part)
  25. );

 

Powered by ExBB FM 1.0 RC1