Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Каскадное удаление  [new]
DenisVZ
Guest
Добрый день

Подскажите по каскадному удалению в MS SQL 2000

Имеются 2 таблицы

tb_elements
----------------
id guid

tb_sys_types
---------------
id guid
typeId guid

таблицы связаны 2-мя связями
1-я:
FK_tb_sys_types_tb_elements
Primary key table: tb_elements, поле id
Foreign key table: tb_sys_types, поле id

2-я
FK_tb_elements_tb_sys_types
Primary key table: tb_sys_types, поле id
Foreign key table: tb_elements, поле typeId

Соответственно в таблицах может быть такой набор записей:

tb_elements
id
1
2
3
4
5
6
7

tb_sys_types
id typeID
1 3
2 3
3 4
4 5
5 7
6 1
7 3

Вопрос: как обеспечить каскадное удаление записей из этих таблиц, так, чтобы при удалении одной записи из одной таблицы, удалялись соответствующие записи из другой. Нетрудно заметить, что удаление может происходить в несколько этапов: например, мы удаляем запись из tb_sys_types с id=3. Будут удалены записи из tb_elements с id=3 и записи из tb_sys_types с typeId = 3, а затем записи из tb_sys_types с id=1 и 2, что вызовет удаление записи с id=6 и т.д.

Навешивание CASCADE DELETE на связи не помогает, т.к. MS SQL боиться зациклиться. Нужно использоваться триггеры, но первая попытка была не очень успешная.

Если вы знаете, как можно решить эту проблему - подскажите plz.
19 фев 04, 11:42    [542874]     Ответить | Цитировать Сообщить модератору
 Re: Каскадное удаление  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
автор
2-я
FK_tb_elements_tb_sys_types
Primary key table: tb_sys_types, поле id
Foreign key table: tb_elements, поле typeId


А вторая связь не наоброт должна быть? И что-то я не вижу в таблице tb_elements поле typeid. Вы не дерево пытаетесь реализовать?
19 фев 04, 12:00    [542916]     Ответить | Цитировать Сообщить модератору
 Re: Каскадное удаление  [new]
DenisVZ
Guest
блин, я все напутал :-(

вот как правильно

таблицы:

tb_elements
----------------
id guid
typeId guid

tb_sys_types
---------------
id guid

примеры записей:

tb_sys_types
id
1
2
3
4
5
6
7

tb_elements
id typeID
1 3
2 3
3 4
4 5
5 7
6 1
7 3

связи:

1-я:
FK_tb_sys_types_tb_elements
Primary key table: tb_elements, поле id
Foreign key table: tb_sys_types, поле id

2-я
FK_tb_elements_tb_sys_types
Primary key table: tb_sys_types, поле id
Foreign key table: tb_elements, поле typeId

в принципе, элементы в таблице tb_elements представлены в виде дерева, там еще есть поле parentId, но в данном случае, это не имеет значения.
19 фев 04, 12:41    [543038]     Ответить | Цитировать Сообщить модератору
 Re: Каскадное удаление  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
если вы хотите удалять все записи в дереве, включая дочерние, то никакие каскадные связи здесь не подойдут. А про работу с деревьями стока в этом форуме было написано, что осмелюсь порекомендовать вам воспользоваться поиском.
19 фев 04, 12:49    [543066]     Ответить | Цитировать Сообщить модератору
 Re: Каскадное удаление  [new]
Observer123
Member

Откуда: Болгария
Сообщений: 390
https://www.sql.ru/forum/actualthread.aspx?bid=1&tid=605&pg=-1
19 фев 04, 13:20    [543181]     Ответить | Цитировать Сообщить модератору
 Re: Каскадное удаление  [new]
DenisVZ
Guest
нет

удалять дерево мне не надо, про него можно забыть :-)

Мне нужно удалять записи в этих 2-х таблицах в соответствии со связями.
19 фев 04, 13:25    [543202]     Ответить | Цитировать Сообщить модератору
 Re: Каскадное удаление  [new]
DenisVZ
Guest
вот картинка
http://ugp.optima.ru/tables.bmp
20 фев 04, 15:59    [545769]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить