Связка внешними ключами в БД MySql

435
.
Всем привет, вот решил задаться вопросом перевязки данных в базе посредством добавления внешних ключей.
Какие плюсы и естественно минусы от этого, давайте разберемся.
Для непосвященных приведу описание внешних ключей(взято с википедии)

Вне́шний ключ (англ. foreign key) — понятие теории реляционных баз данных, относящееся к ограничениям целостности базы данных.
Неформально выражаясь, внешний ключ представляет собой подмножество атрибутов некоторой переменной отношения R2, значения которых должны совпадать со значениями некоторого потенциального ключа некоторой переменной отношения R1.

А еще проще говоря внешний ключ это своего рода индентификатор данных расположенных в другой таблице.
К примеру у вас есть пользователи на сайте, и естественно в базе данных есть таблица user с полями id,name. Так же у ваших пользователей есть фотоальбомы и таблица в базе данных album с полями id, id_user,name_album так вот в поле id_user и помещается внешний ключ который ведет к таблице user и уникальному индентификатору id то есть такого ключа который в таблице user и поле id не может повторяться дважды.
Преимущество внешних ключей в скорости поиска данных (для внешних ключей создается индекс для поиска), в удобстве удаления,редактирования,обновления информации,действия зависят от свойств ключа,если например для ключа разрешено удаление связки то при удалении пользователя автоматически удаляются и его альбомы с базы данных, это в свою очередь удебно тем что вам не нужно писать дополнительные запросы и проверки в базу данных, она все сделает за вас.
Так же это удобно тем что если пользователь каким то образом умудрился сменить себе id(например в некоторых Cms встречал такое что id пользователя брался из кук, и по нему происходила запись в базу,то есть изменив куку в браузере мы могли создать альбом с несуществующим id пользователя), то при связке по внешнему ключу база данных не позволит создать альбом с несуществующим пользователем так как ключа id в таблице user не существует, база просто вызовет ошибку, не добавив альбом, то же самое относится и к таким свойствам как удаление, добавление, обновление и т.д таблиц.
Внешние ключи очень помогают в создании структуры базы данных при написании скрипта, так как вам не придется делать сотни проверок на наличие существовании индентификатора. Достаточно при создании таблицы указывать внешний ключ, а база уже сама составит цепочки.
При поиске вам не нужно будет делать сотню запросов(и подзапросов) для создании цепочки(например если на одной странице вы ходите получить альбомы, статьи, посты в форуме от конкретного пользователя) база сделает это сама, причем гораздо быстрее чем вы сделаете 3 запроса.
.
Psкопипаст

Следует учитывать, что в SQL внешние ключи используются не для объединения таблиц, а главным образом для проверки целостности ссылочных данных (ограничения внешних ключей
.
Плюсы
При условии, что связи спроектированы правильно, ограничения внешних ключей сделают более сложным для программиста введение противоречивости в базу данных.
Использование каскадных обновлений и удалений может упростить код клиента.
Должным образом разработанные правила внешних ключей помогают в документировании отношений между таблицами.
Недостатки:
Ошибки, которые легко сделать в проектировании отношений ключей, могут вызывать сложные проблемы: например, зацикленные правила или ложные комбинации каскадных удалений.
Правильно написанное приложение будет само по себе обеспечивать отсутствие нарушения целостности ссылочных данных перед началом работы запроса. Таким образом, дополнительные проверки на уровне базы данных только понизят производительность для такого приложения.
Администраторы баз данных часто создают такую сложную топологию связей, при которой затруднительно, а зачастую и вовсе невозможно получить резервную копию или восстановить единичные таблицы.
.
я просто не представляю себе, как можно работать без того, что ты описал выше )))
.
Kpegumop (24.03.2013 / 16:47)
я просто не представляю себе, как можно работать без того, что ты описал выше )))
Ну думаю мануал будет полезен новичкам.
Некоторые даже не знают типы полей, не говоря уже о таких терминах как связка гг
Всего: 5