powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Очередность удаления из таблиц, связанных FOREIGN KEY
3 сообщений из 3, страница 1 из 1
Очередность удаления из таблиц, связанных FOREIGN KEY
    #39256856
Александр Тарасенко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая проблема.
Имеются в наличии таблицы справочников, ну пусть
Код: sql
1.
2.
3.
4.
CREATE TABLE INT.VAL (
  ID	SMALLINT	NOT NULL PRIMARY KEY GENERATED ALWAYS  AS IDENTITY (START WITH 1, INCREMENT BY 1),
  NAME VARCHAR(10) NOT NULL
  ) 


Для каждого справочника есть таблицы с переводами значений NAME на 2 языка.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE INT.VAT_DICT (
  ID	INTEGER	NOT NULL	GENERATED ALWAYS  AS IDENTITY (START WITH 1, INCREMENT BY 1),
  VAL_ID	INTEGER	NOT NULL,
  LANG	INTEGER	NOT NULL,
  NAME	VARCHAR(255)	NOT NULL, 
  CONSTRAINT FK1 FOREIGN KEY(VAL_ID) REFERENCES INT.VAT_DICT(ID)  ON DELETE CASCADE  ON UPDATE RESTRICT ENFORCED  
  ) 
  IN TS_4K;


Также имеется таблица логирования операций. куда при помощи триггеров валятся операции удаления данных.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE INT.HISTORY_DICTIONARY (
  ID	BIGINT	NOT NULL	GENERATED ALWAYS
    AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE,
       NO MINVALUE, NO MAXVALUE, NO CYCLE, NO ORDER),
  DATE_TIME	TIMESTAMP 	NOT NULL	DEFAULT ,
  MESSAGE	varchar(10)	NOT NULL,
  COLUMN_NAME	VARCHAR(100)	NOT NULL,
  OLD_VAL	CLOB(8K)	 INLINE LENGTH 92	LOGGED	COMPACT,
  NEW_VAL	CLOB(8K)	 INLINE LENGTH 92	LOGGED	COMPACT
  ) 


Триггера подвешены на таблицы справочников и таблицы переводов.
Триггера - AFTER DELETE.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 CREATE TRIGGER INT.DEL_LOG
  AFTER DELETE
  ON INT.VAT
  REFERENCING 
    OLD AS OLD_ROW
  FOR EACH ROW
  begin atomic
insert into int.history_dictionary(DATE_TIME,message,COLUMN_NAME,OLD_VAL)
values(CURRENT TIMESTAMP,'FACT','NAME',OLD_ROW.NAME);
  END;


Дальше удаляю данные при помощи
Код: sql
1.
2.
DELETE FROM INT.VAL
WHERE ID = 1


Делаю select из таблицы логирования, и почему-то первыми идут в таблице логирования записи об удалении из таблиц справочников. Потом из таблиц переводов.
Насколько я понимаю, так быть не должно, ведь при таком типе внешнего ключа должны удаляться сначала данные из таблиц справочников?
Подскажите плиз, порядок выведения записей в таблице логирования важен правильный.
...
Рейтинг: 0 / 0
Очередность удаления из таблиц, связанных FOREIGN KEY
    #39257028
m&m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m&m
Гость
Александр Тарасенко,

Почему не должно быть удаления "сверху-вниз" по иерархии ссылок?
По-моему это как-раз логично - начать (в рамках транзакции) с единственного родительского узла.
Дочерних узлов м.б. сколь угодно много со своими иерархиями.
И с какого из них начинать?
...
Рейтинг: 0 / 0
Очередность удаления из таблиц, связанных FOREIGN KEY
    #39257030
m&m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m&m
Гость
т.е. удаление идет с родительского узла и "спускается" по иерархии по всем дочерним уровням.
Если на каком-то из этих уровней возникает невозможность удаления какого-то промежуточного узла,
то транзакция откатывается.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Очередность удаления из таблиц, связанных FOREIGN KEY
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]