![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Каскадное удаление в 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]
триггеры на удаление написать в каждой таблице