Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Каскадное удаление в Delphi, Interbase [D5, D6, IB5.x, IB6.x]


Andrew2004 ©   (2004-02-12 07:33:00) 

Есть база, работающая через InterBase. В этой базе возьмем 3 таблицы: "Инвентарные номера", "Книги", "Авторы". Так вот, допустим, я удаляю запись из таблицы "Авторы" -> тогда надо удалить все записи из таблицы "Книги", которые ссылаются на удаленного автора, этих книг может быть много -> но и из таблицы "Инв. номера" надо удалить все инвентарные номера, которые содержат ссылку на удаляемую книгу, этих инвентарных номеров также может быть очень много. Т.е. между талицами "Инв. номера" и "Книги" отношение "1-ко-мног.", а между "Книги" и "Авторы" - "мног.-ко-мног.". Как в этом случае реализовать каскадное удаление.
Вот такая заморочка :)).
Естественно это можно сделать длинным способом. Но как это сделать покороче SQL-запросами?
Спасибо всем, кто ответит!!!


Andrew   (2004-02-12 20:31:00) [1]

Всем спасибо... И за юмор тоже... :))
Если есть еще дельные предложение - пишите.

За дельный ответ - отдельное спасибо Deniz(у)©... :))


Anatoly Podgoretsky   (2004-02-12 09:48:00) [2]

Sergey13 © (12.02.04 08:27) [2]
Автор умер, книги в печку.


Вованчик   (2004-02-12 09:43:00) [3]

:)


Johnmen   (2004-02-12 09:39:00) [4]

>Вованчик © (12.02.04 09:32) [5]

В данном контексте это "мног.-ко-1"
:)


Вованчик   (2004-02-12 09:32:00) [5]


> Johnmen © (12.02.04 09:29) [4]

наоборот - для одной книги несколько инвентарных номеров


Johnmen   (2004-02-12 09:29:00) [6]

>Т.е. между талицами "Инв. номера" и "Книги" отношение "1-ко-мног.",

Т.е. один инв. номер для нескольких книг ???


Deniz   (2004-02-12 08:32:00) [7]

Если в базе правильно прописаны внешние ключи по связям:

alter table Книги
add constraint FK_Книги
foreign key (ID_Автора)
references Авторы(ID)
on delete CASCADE

то вообще ничего делать не надо, все само собой удаляется.
Но можно и триггер повесить на таблицу.

create trigger Авторы_BD before delete position 0 as
begin
delete from Книги where Книги.ID_Автора = old.ID
end

ID - пк для авторов в табл Авторы


Sergey13   (2004-02-12 08:27:00) [8]

А зачем вообще удалять автора? Цензура? 8-)
Авторы в твоем случае - это типичный справочник, а удалять из справочника - дурной тон. Списывать (удалять) надо только книги.
ИМХО.


Вованчик   (2004-02-12 08:26:00) [9]

триггеры на удаление написать в каждой таблице


Наверх

Титульная страница Поиск, карта сайта Написать письмо