![]() |
|
Модераторы: LSD |
![]()
|
|
| Fire44 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 17.9.2010 Репутация: нет Всего: -1 |
Когда лучше делать каскадные связи между таблицами?
Например: Таблица№1 и Таблица№2, связь один ко многим. При удалении всех записей из Таблицы №2, будут ли удалены записи из таблицы №1, если каскадные связи? Одна запись таблицы №1 может иметь много значений из таблицы №2. Я так понял, если удалить одну запись из таблицы №1, то все записи которые отвечают будут удалены из таблицы №2. Это сообщение отредактировал(а) Fire44 - 26.9.2010, 17:34 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Когда это соответствует логике. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
Да. При одной и тож же технической реалиазации, но при различных требованиях к БД, наличие каскадного удаление может быть и востребованным и нет. Например: две таблицы - Сотрудник и Проект (один сотрудник на фирме может вести несколько проектов, но один проект ведется только одним сотрудником, т.е. связь один к одному ко многим). В одном случае при увольнении сотрудника информация о его проектах может не представлять интереса (и тогда можно реализовать каскадное удаление), а в другом случае информация о проектах уволенного сотрудника представляет интерес (и тогда не нужно реализовывать каскадное удаление)*. Еще одним (более удачным) примером может служить каскадное удаление в рекурсивных связях. Например: есть таблица Отдел (один отдел может состоять из нескольких, но каждый из отделов входит в состав лишь одного отдела, т.е. связь один к одному ко многим, причем сущность ссылается сама на себя). И если предположим сократили некоторый отдел, то очевидно**, что сократили все отделы, которые ему подчиняются, т.е. приминение каскадного удаления оправдано. А вообще, я думаю, что если нет стопроцентной уверенности в том, что необходимо реализовать каскадное удаление, то лучше от него воздержаться (это будет меньшим сюрпризом, для человека сопровождающего БД, чем его наличие). --- * - стоит упомянуть о третьем (единственно верном случае), когда при увольнении сотрудника из БД не удаляется никакая информация, а просто сотрудник помечается как "уволеный". ** - очевидно мне в данном контексте, но в кажом конкретном случае это нужно уточнять Добавлено @ 22:47
Нет. Это сообщение отредактировал(а) Gluttton - 27.9.2010, 00:34 -------------------- Слава Україні! |
||||
|
|||||
| Fire44 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 17.9.2010 Репутация: нет Всего: -1 |
2Gluttton Спасибо!!
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Ты полагаешь, что это одна и та же логика??? -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
Конечно же нет! Я об этом и хотел написать:
Я хотел сказать, что в обоих случаях есть две одни и те же таблицы и в обоих случаях они имеют одно и то же отношение, но в зависимости от условий бизнес-логики каскадное удаление в одном случае может быть необходимо, а в другом - нет. -------------------- Слава Україні! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
То есть мы об одном и том же.
Я удовлетворён -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
А я каскадные ограничения целостности позволяю себе лишь тогда, когда данные либо задача не представляют ценности и настолько не стоят мороки с ними, что моя совесть останется равнодушной к решению тяп-ляп.
Это сообщение отредактировал(а) Zloxa - 27.9.2010, 14:51 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
Это не может не радовать Я правильно провел аналогию? -------------------- Слава Україні! |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Это мое ИМХО. Я уже писал ранее, мол я предпочитаю чтобы у меня процесс не отработал вовсе, если я что-то не учел, чем отработал не так, как я предполагал. Испльзуя каскадные удаления можно ненароком выкосить то, о чем подумать страшно. Это сообщение отредактировал(а) Zloxa - 27.9.2010, 15:14 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
Я вообще никогда о них и не задумывался (т.е. предпочитал NO ACTION), но однажды Deniz обратил мое внимание, на возможность применения каскадного удаления при рекурсивных связях - это очень изящное и удачное решение! -------------------- Слава Україні! |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Изящное? ну может быть... удачное? кому как. Я лично считаю его ужасным, для меня существует только один вариант удаления - пометка записи как удалённой с последующим переносом её в архив. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Gluttton, ну а теперь представь себе что такого рода систему ты спроектировал не сам, а просто забрал на саппорт и тебе выставили сервисколл "удалить запись c id = 10 - ПОДГУЗНИКИ ВСЯКИЕ" Срок - "вчера". Станешь ли ты анализировать все рефсы на этот ид на предмет каскадности? А базу то ведь можешь выкосить чуть ли не полностью. И доказывай потом заказчику что записи с id = 11,12,13 и все связанные с ними данными, согласно логике приложения, дожны быть выкошены вместе с записью id = 10. Но он ведь, с-ка совсем не то имел в виду.
Это сообщение отредактировал(а) Zloxa - 27.9.2010, 16:08 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 10 Всего: 54 |
??? В контексте поставленной задачи? В двух словах: там решалась задача описания иерархической структуры с разнородными (два вида элементами). В качестве примера мною была выбрана модель файловой системы (описание файлов и директорий). Так вот, для решения задачи удаления папки (я думаю, что в данном контексте необходимость удаления всех ее подпапок и файлов очевидна) мною было предложено следующее решение:
А с использованием каскадного удаления эту задачу можно было решить вот так:
Согласен. Я об этом упомянул: Akina, Zloxa, однозначно у вас большее опыта и я в этой теме прислушаюсь к вашему мнению вопреки своим теоретическим домыслам, но все же мне кажеться, что вы очень категоричны и существуют случаи, когда каскадное удаление оправдано! Если вас не устраивает пример на рекурсивных связях, то, на мой взгляд, еще одним претендентом может быть каскадное удаление из вспомогательной таблицы при обеспечении связи М:М - нафига там это хлам оставлять? О чем он скажет поле удаления master-записи? -------------------- Слава Україні! |
||||
|
|||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Да, когда ценность хранящейся в БД информации равна нулю. Добавлено через 2 минуты и 8 секунд Корзину (и рековерилки для тех, кто удалял мимо или успел почистить) не от хорошей жизни придумали... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |