Внешние ключи MySQL: я должен установить это? - PullRequest
1 голос
/ 06 апреля 2011

Нужно ли мне устанавливать внешний ключ для этой ситуации?Я слаб в дизайне базы данных, особенно в MySQL. Могу ли я знать, если я хочу установить для них внешние ключи, что я должен установить для них?в случае, если люди удаляют ... все ссылки на people_id будут удаляться вместе, возможно ли установить, когда таблица слишком большая?Спасибо за ответ

enter image description here

1 Ответ

4 голосов
/ 06 апреля 2011

Да.Ограничения внешнего ключа обеспечивают ссылочную целостность - ключевой принцип обеспечения надежности и высокого качества ваших данных.В противном случае ваша таблица people_address может ссылаться на значение people_id, которое не существует в таблице people и будет сиротой.Ограничение внешнего ключа предотвратит это.

Итак, просто сделайте это.На самом деле нет веской причины не делать этого.

Определите внешние ключи, такие как приведенные ниже, в таблице people_email:

ALTER TABLE people_email ДОБАВЬТЕ КОНСТРАКТНЫЙ ИНОСТРАННЫЙ КЛЮЧ (people_id) ССЫЛКИ на людей (id) НА УДАЛИТЬ КАСКАД;

Это будет означать, что вы не можете ввести запись в people_email, где people_id в этой таблице не существует в people.Кроме того, если вы удаляете родительскую строку в people, строки, ссылающиеся на нее в people_email с помощью, автоматически удаляются.

Я лично предпочитаю вручную удалять все строки из дочерних таблиц и не использовать каскадное удаление.Это немного лишняя работа по разработке приложений, но она заставляет меня чувствовать себя в большей безопасности, а также позволяет мне контролировать блокировку и обеспечивать максимальную эффективность запросов.

...