Quantcast
Channel: SQL.ru: Firebird, InterBase
Viewing all articles
Browse latest Browse all 1677

Каскады

$
0
0
шалом

исходные:
2.5.7
автоматизация закрытия прошлых периодов.
что-то удаляется, что-то актуальное остается, но должно ссылаться (если ссылалось) на прошлые периоды.
таблиц много. около 500.

disclamer:
да, нуллы - это зло
да, обходные пути существуют и несколько штук я знаю

внимание, вопрос:
возможно ли при удалении записей из мастера, через каскады, установить заданное ссылочное значение в слейве, не порушив при этом NULL?
в руки просится on delete SET DEFAULT VALUE -99, но такой конструкции нет :(
default на поле приписывает неверные ссылки.


delete from MASTER where ID > 0;

должно перевести все записи, кроме двух, на -99.


create domain PK bigint not null;
create domain FK bigint not null;
create domain FK_NULL bigint;
create domain Dao_De_Jing varchar(5000);

create table MASTER(
ID PK,
COMMENT Dao_De_Jing,
constraint MASTER
 primary key(ID)
);

insert into MASTER( ID, COMMENT) values ( -99, 'Было такое');
insert into MASTER( ID, COMMENT) values ( 0, 'Непознанное');
insert into MASTER( ID, COMMENT) values ( 1, 'Непознаваемое');
insert into MASTER( ID, COMMENT) values ( 2, 'Актуальное');

create table SLAVE(
ID PK,
ID_MASTER FK_NULL,
COMMENT Dao_De_Jing,
constraint SLAVE
 primary key(ID),
constraint SLAVE_MASTER
 foreign key(ID_MASTER)
 references MASTER(ID)
 on delete SET DEFAULT
);

insert into SLAVE(ID, ID_MASTER, COMMENT) values (1, 1, 'Дао');
insert into SLAVE(ID, ID_MASTER, COMMENT) values (2, 0, 'Дэ');
insert into SLAVE(ID, ID_MASTER, COMMENT) values (3, 2, 'Человеколюбие');
insert into SLAVE(ID, ID_MASTER, COMMENT) values (4, 2, 'Справедливость');
insert into SLAVE(ID, ID_MASTER, COMMENT) values (5, 2, 'Ритуал');
insert into SLAVE(ID, ID_MASTER, COMMENT) values (6, 2, 'Смута');
insert into SLAVE(ID, COMMENT) values (7, 'А это не мастер говорил');

Viewing all articles
Browse latest Browse all 1677

Trending Articles