Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
каскадное удаление (MS SQL) Ответьте, пожалуйста, кто-нибудь как осуществлять какскадное удаление в связанных по внешнему ключу таблицах. Почитав help, обнаружил, что в триггере удаления этого делать нельзя, поскольку он выполняется после(!!!) того, как происходит проверка ссылочной целостности, которая и не позволяет удалить строку с первичным ключом, если с ней связаны строки в другой таблице ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2002, 07:49 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Смотря какая версия сервера. SQL2000 поддерживает каскадные обновления и удаления. Все что ниже - нет. С тригера это обработать действительно не получится - он всегда выполняется после проверки сервером целостности. В этом плане всегда нравилась фича в Interbase - тригеры Before, выполняющиеся до всех операций проверки. К сожалению в MSSQL наверное нам такое не светит - насколько я знаю у Interbase и MSSQL абсолютно разная модель транзакций. Так что если у вас не SQL2000 то выход один - самому удалять дочерние данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2002, 20:33 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
2 вова: Если у Вас sql2k, используйте ON DELETE CASCADE при определении foreign key. Если все-таки Вам больше подходит триггер, попробуйте instead of trigger. Он срабатывает до (и вместо) удаления/вставки/изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2002, 13:48 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Каскадное удаление в MSSQL 70 Alter TRIGGER "tblNameUnit_DTrig" ON tblNameUnit FOR DELETE AS SET NOCOUNT ON /* * КАСКАДНЫЕ УДАЛЕНИЯ В 'tblUnit' */ DELETE tblUnit FROM deleted, tblUnit WHERE deleted.IdName = tblUnit.IdName Таблица tblNameUnit на стороне Один, триггер к этой же таблице, ключ - IdName. Все прекрасно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 00:36 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
А можно уточнить, зачем вообще понадобилось каскадное удаление? Ответ на этот вопрос интересен тем, что если каскадное удаление нужно как штатное средство для пользователя, то возникает подозрение о плохой структуре БД (или как минимум неээфективной структуре) или неправильной постановке ТЗ, а если это нужно как единичные административные мероприятия, то вообще смысла не имеет. Желающих поспорить отсылаю к здавому смыслу, подправленному наблюдением: нужды каскадного удаления-обновления требуются исключительно людям с маленьким опытом создания БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 08:43 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев >Желающих поспорить отсылаю к здавому смыслу, подправленному наблюдением: нужды каскадного удаления-обновления требуются исключительно людям с маленьким опытом создания БД. Не согласен я однако, простой пример - необходимость удалить внесенный в базу заказ, это то с чем я сталкивался, вообще то могут быть еще примеры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 08:53 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Во-во, и целостность хочется блюсти на сервере (мсскл7.0) и каскадное удаление. Так что фраза про плохое проектирование непонятна. Хочется при удалении шапки документа удалять и строки его содержимого, однака ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 09:14 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Ух ты, что-то стоящее,- настоящий спор. 2 Глеб Уфимцев: Банковское приложение. Покупка/продажа валюты порождает какое-то количество бухгалтерских проводок + аналитика. Удаление заявки подчищает бухгалтерию. И все автоматически, вместо ручного "программирования" в delete триггере. Что тут не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 09:15 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Когда я учился RDBMS у меня сложилось впечатление, что автоматическое каскадное удаление это зло,как бы одно из положительных свойств форинкея перечеркивает (невозможность удаления объекта при существовании ссылок на него) и отсутствие такой возможности в MS SQL, я воспринимал как должное и то, что это есть даже в accsess'е меня не растраивало (видел, кстати, как использование этой возможности приносило проблемы), теперь я несколько изменил мнение, считаю, что каскадное удаление бывает полезно, но пользоваться этой фичей нужно как можно осторожней, чтобы не возникало таких ситуаций как например грохнули клиента и вмести с ним грохнулись все его заказы контакты и прочее и одни из этих заказов как раз обрабатывал Вася Пупкин. С уважением, Сергей. з.ы. сам правда каскадным удалением не пользуюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 09:25 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
>что каскадное удаление бывает полезно, но пользоваться этой фичей нужно как можно осторожней Абсолютно согласен. Что касается семерки, то просто нужно решить как его реализовать либо процедурой и оставить DRI, либо триггерами и в триггерах же реализовывать ссылочную целостность. Я бы выбрал процедуры в том случае если нужно организовать какскад на нескольких таблицах, а не на всех, а вот вариант с каскадом по всей базе я как то не могу себе представить, так что в этом смысле могу с Глебом согласиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 09:39 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
По поводу удаления документа (master) и его содержимого (detail) - есть такие возражения: 1. Документ был (факт имел место), значит его отражение в БД не должно удаляться, а помечаться признаком "отклонено" или что-то подобное. Впоследствии это даст возможность иметь информацию, если таковой разговор возникнет, или маркетинговой статистики. 2. Если уж очень надо удалить, то в чем проблема написать процедуру DeleteDocument, которая в одной транзакции сперва удалит detail-информацию, а затем master-информацию. Такая процедура гораздо полезнее в плане организации прав, а также дальнейшего изменения структуры базы (достаточно будет подправить процедуру без перекомпиляции приложения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 10:35 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
...тем более, что такая процедура (а-ля DeleteZakazz) уже, как правило, имеется в приличной системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 10:38 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
2 Глеб Уфимцев: 1. "отражение в БД не должно удаляться, а помечаться признаком "отклонено"" Отражение не удаляется "насмерть", все переписывается в таблицу(ы) аудита. В боевых таблицах чистые данные, не надо спотыкаться обо всякие признаки. 2. "проблема написать процедуру DeleteDocument" Проблемы нет, процедура есть, только она проще, нет ручного программирования по удалению "сперва" и "затем", все удаляется автоматически, в соответствии со схемой данных. Все-таки не понятно, чем ручное удаление лучше автоматического? Кроме совместимости, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2002, 12:28 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Как раз потому, что большой разницы нет, каскадные операции большой ценности не представляют. Зато, отсутствие каскадных возможностей: 1. Тренирует мозги в плане вработке правильного и эффективного решения. 2. Обучает девелопера понимать физику явления, так как все что делают автоматически каскады - пройдет через ручки девелопера. 3. Позволяет не допустить ошибочных катастрофических изменений. А уже только после полного просветления этих моментов рутинным опытом, введение каскадов дает ощущение полета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2002, 06:50 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
К сожалению, каскадное удаление (и обновление тоже) в MsSql2K несколько ограничено: во многих случаях он начинает ругаться, что возможна циклическая ссылка - и до свиданья. Хотя я уверен, что этого не произойдет. Может как-то это ограничение можно обойти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2002, 06:40 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
Абсолютно согласен с MadDog, нафига хранить записи о людях, с которыми ты работать уже не будешь. В боевых таблицах нечего делать "левым" данным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2002, 14:20 |
|
||
|
каскадное удаление
|
|||
|---|---|---|---|
|
#18+
>>Абсолютно согласен с MadDog, нафига хранить записи о людях, с которыми ты работать уже не будешь. В боевых таблицах нечего делать "левым" данным А кто решил, что ты с этими людьми уже не будешь работать (может злая бабка-уборщица или твой злой коллега, имеющие такие же права)? С SQL работаем около 2-х лет и вопрос о каскадном удалении конечно же вставал, но не в коем случае об автомате (или вернее какая разница, что рисовать схему, что SP, что Trigger). На мой взгляд это не принципиальный вопрос, в отличии, скажем от вопроса: "В каких таблицах хранить данные" и т.п. Прошу заметить это лишь мое мнение, темболее, что я не причисляю себя к профи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2002, 06:01 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32021335&tid=1824083]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
71ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 261ms |
| total: | 448ms |

| 0 / 0 |
