Один и тот же внешний ключ в нескольких таблицах - PullRequest
4 голосов
/ 28 июля 2010

Я видел сообщения на SO и через Google, заявляющие, что с Mysql вы не можете иметь несколько внешних ключей с одним и тем же именем. Моя проблема заключается в том, как ссылаться на один и тот же столбец из одной таблицы в нескольких других таблицах. В моем случае у меня есть таблица FAMILY, которая содержит FAM_ID. Я хочу, чтобы это был внешний ключ в моих таблицах DOCUMENTS и CONTACT, потому что строки в них связаны с FAM_ID. Поэтому, если я правильно понимаю, что прочитал, мне нужно назвать столбец в DOCUMENTS и связаться с другими именами (кроме FAM_ID), чтобы они отображались как внешний ключ к FAM_ID в таблице FAMILY. Я просто чего-то не понимаю или это мой единственный вариант? Похоже, что это было бы довольно распространенным требованием для модели данных.

Ответы [ 3 ]

2 голосов
/ 28 июля 2010

Вам не нужно называть их разными вещами.Вы можете иметь столбец FAM_ID в FAMILY, столбец FAM_ID в DOCUMENTS и столбец FAM_ID в CONTACT.

В этом случае присвоение им одинаковых имен дает понять, что они ссылаются на одно и то же.Но вы также можете придумать другое собственное соглашение об именах, если хотите.

Например, я использую что-то вроде family_ID в таблице семейства и contact_familyID, document_familyIDпри обращении к нему из таблиц контактов и документов.

Единственный недостаток в том, чтобы называть их одинаковыми, насколько я вижу, состоит в том, что при выполнении объединений нельзя просто ссылаться на них по имени столбца,Вы должны присвоить им псевдоним или обратиться к ним по имени tablename.columnname.

Редактировать: Я думаю, что я понял, что вы имеете в виду, не имея возможности иметь то же имя.Это тот случай, когда вы добавляете отношение внешнего ключа в одну таблицу, как описано здесь: http://bugs.mysql.com/bug.php?id=46363

1 голос
/ 28 июля 2010

fk_family_documents

fk_family_contact

Установка имен внешних ключей на что-то вроде выше было бы одним из способов сделать это, я не уверен, что это псевдоним, но да.Вот пример синтаксиса, если вы добавляете его в качестве ограничения:

ALTER TABLE documents ADD CONSTRAINT fk_family_documents_id FOREIGN KEY (fam_id) REFERENCES family(id)

Конечно, вам, возможно, придется адаптировать его, но вы должны дать представление о том, как он будет настроен.,

0 голосов
/ 30 ноября 2010

У меня та же проблема, но я не заметил хороших решений. Первоначально я хотел сохранить имена своих внешних ключей такими же, как и у первичного ключа, на который они ссылались, чтобы сделать возможным естественное объединение. Поэтому я буду переименовывать свои внешние ключи во что-то вроде {reference_primary_key} _1, {reference_primary_key} _2 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...