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

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

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: нужна помощь
Данил Банаев
Отправлено: 23 Ноября, 2011 - 22:02:15
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




Всем здравствуйте.
Помогите разобраться с ошибкой.
Создаю по очереди 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.         );
 
 Top
EuGen Администратор
Отправлено: 23 Ноября, 2011 - 22:18:01
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Нарушена. Вы пытаетесь создать внешний ключ на поле VARCHAR(20), который будет ссылаться на поле типа INT
Типы полей должны совпадать.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Данил Банаев
Отправлено: 23 Ноября, 2011 - 22:23:59
Post Id


Новичок


Покинул форум
Сообщений всего: 55
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




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. );

(Отредактировано автором: 24 Ноября, 2011 - 13:58:33)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB