[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужны ли в БД внешние ключи?
zvezda_t
Нужны ли в БД внешние ключи?



Спустя 33 минуты, 46 секунд (25.02.2011 - 15:50) Snus написал(а):
Для крупных проектов - да.

Спустя 26 минут, 11 секунд (25.02.2011 - 16:16) inpost написал(а):
zvezda_t
В зависимости от ситуации.
Смотри, есть таблица: клиент-заказ. Клиент удалился, удалять ли нам заказ, когда ведётся внутренняя бухгалтерия? Конечно же нет! Поэтому тут не используем внешние ключи.
Теперь смотрим на примере сайта знакомств, есть таблица пользователей, есть таблица их фотографий. Удаляя пользователя из таблицы пользователей автоматически будет удалены все фотографии из БД. Тут можно сказать, что мешает сделать 2 отдельных удаления? А всё дело в том, что пользователь добавляет свои фотографии, своё видео, свои документы (уже 3 дополнительных таблицы помимо таблицы пользователей), можно отдельно вынести в таблицу его личную информацию (чтобы постоянно не дергать таблицу из 40-50 колонками - имя,фамилия,род занятий), а лишь таблицу пользователей (где логин,пароль,айди,кеш). Теперь создаём внешний ключ, удаляем пользователя - удаляются из соседних таблиц все данные о нём. А теперь без ключей это будет выглядить так:
mysql_query("DELETE FROM `users` WHERE `id_parent` = 7");
mysql_query("DELETE FROM `profile` WHERE `id_parent` = 7");
mysql_query("DELETE FROM `photo` WHERE `id_parent` = 7");
mysql_query("DELETE FROM `video` WHERE `id_parent` = 7");
mysql_query("DELETE FROM `files` WHERE `id_parent` = 7");

А теперь если брать что быстрее, то тут надо на реальной практике проверять, но внешние ключи по логике должны быть быстрее, так как будет лишь один физический запрос из ПХП на удаление, а не 5.

Спустя 8 минут, 43 секунды (25.02.2011 - 16:25) glock18 написал(а):
inpost
внешний ключ можно создать так, чтобы зависящие записи не удалялись, а их ключ ставился бы в нул, например.

удалить кстати можно из вышеуказанных таблиц и одним запросом

более того создавать столько внешних ключей на таблицах с большим количеством инфы и частой записью может быть весьма накладно.

если так сильно мешать будут мертвые записи в таблице, то лучше чистить их кроном раз в день/неделю, тем более что удалять из таблицы запись о фотке, не удалив саму фотку совершенно бессмысленно.

Спустя 1 минута, 42 секунды (25.02.2011 - 16:27) inpost написал(а):
glock18
ну если даже так, тогда вообще не вижу смысла их существования.

Спустя 10 минут, 51 секунда (25.02.2011 - 16:38) glock18 написал(а):
inpost
ну, смысл может быть, но разумный пример, когда внешний ключ действительно нужен, очень трудно придумать. но теоретически, зная особенности внешних ключей, можно решение какой-то реальной задачи спроектировать, с их использованием


_____________

Что ты сделал сегодня - для завтра?
"Приидите ко Мне вси труждающиеся и обремененнии и Аз упокою вы, возмите иго Мое на себе и научитеся от Мене яко кроток есмь и смирен сердцем и обрящете покой душам вашим, иго бо Мое благо и бремя Мое легко есть."(Мф. 11:28-30)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.