SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.07.2009 10:40:05

Afire
Участник
Зарегистрирован: 17.07.2009
Сообщений: 2

Составной внешний ключ

Есть три таблицы:
1) Organizations;
2) Peoples;
3) Contacts.

CREATE TABLE organizations
   id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   name char(10),
   PRIMARY KEY(id)
) ENGINE=InnoDb;

CREATE TABLE peoples
   id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   name char(10),
   PRIMARY KEY(id)
) ENGINE=InnoDb;

Вот пока создал внешний ключ на таблицу организации
CREATE TABLE peoples
   id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   id_object INT UNSIGNED NOT NULL AUTO_INCREMENT,
   contact varchar(50),
   PRIMARY KEY(id),
   FOREIGN KEY(id_object)
      REFERENCES organizations(id)
      ON DELETE RESTRICT
     ON UPDATE CASCADE
) ENGINE=InnoDb;

Как я понимаю, составной ключ тут никак не создать?
Посоветуйте, как в таблице Contacts реализовать составной внешний ключ (сразу на две таблицы - организации и люди).
(Приходит мысль создать два поля id_organization и id_peoples и определить их как два внешних ключа, но что-то кажется, что так не правильно делать).

Отредактированно Afire (17.07.2009 11:03:46)

Неактивен

 

#2 17.07.2009 20:43:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Составной внешний ключ

Внешние ключи - это способ связать записи в двух таблицах по определенным полям так, что при обновлении поля в родительской автоматически происходит определенное изменение поля в дочерней (дочернюю и родительскую выбираешь при создании ключа; точнее, создаешь ключ в дочерней, который ссылается на родительскую).
Создать составной внешний ключ можно, но ссылаться он будет естественно на одну таблицу. Для создания внешних ключей на 2 таблицы нужно определить 2 внешних ключа.
Подробнее см.:
http://webew.ru/posts/219.webew
http://sqlinfo.ru/forum/viewtopic.php?id=603
http://dev.mysql.com/doc/refman/5.0/en/ … aints.html

Неактивен

 

#3 23.07.2009 18:43:14

Afire
Участник
Зарегистрирован: 17.07.2009
Сообщений: 2

Re: Составной внешний ключ

Т.е. в таких случаях используют такой вариант - на две разные таблицы создавать два внешних ключа:

CREATE TABLE peoples
   id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   id_organization INT UNSIGNED NOT NULL,
   id_people INT UNSIGNED NOT NULL,
   contact varchar(50),
   PRIMARY KEY(id),
   FOREIGN KEY(id_organization)
      REFERENCES organizations(id)
      ON DELETE RESTRICT
     ON UPDATE CASCADE,
   FOREIGN KEY(id_people)
      REFERENCES peoples(id)
      ON DELETE RESTRICT
     ON UPDATE CASCADE
) ENGINE=InnoDb;

vasya, спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson