Задавайте вопросы, мы ответим
Вы не зашли.
Есть три таблицы:
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 таблицы нужно определить 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
Неактивен
Т.е. в таких случаях используют такой вариант - на две разные таблицы создавать два внешних ключа:
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, спасибо!
Неактивен