powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Каскады
14 сообщений из 14, страница 1 из 1
Каскады
    #39602194
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
шалом

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

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

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


Код: sql
1.
delete from MASTER where ID > 0;


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


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
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, 'А это не мастер говорил');
...
Рейтинг: 0 / 0
Каскады
    #39602197
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

дык должно быть так

Код: sql
1.
2.
3.
4.
5.
create table SLAVE(
ID PK,
ID_MASTER FK_NULL DEFAULT -99,
COMMENT Dao_De_Jing,
...



и таки null это не зло
...
Рейтинг: 0 / 0
Каскады
    #39602198
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

насколько я помню, чтобы default в FK работал, у столбца должно быть определено DEFAULT-значение. А раз туда в приведенных метаданных втыкается null, можно попробовать триггером null поменять на -99. Но тогда "не порушив null" не получится.
...
Рейтинг: 0 / 0
Каскады
    #39602202
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

а ещё требуемую логику можно заложить в AFTER DELETE триггере или удалять через ХП и заложить логику туда
...
Рейтинг: 0 / 0
Каскады
    #39602207
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorавтоматизация закрытия прошлых периодов.
что-то удаляется, что-то актуальное остается,А может не надо удалять?
...
Рейтинг: 0 / 0
Каскады
    #39602214
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисpastor,

дык должно быть так

Код: sql
1.
2.
3.
4.
5.
create table SLAVE(
ID PK,
ID_MASTER FK_NULL DEFAULT -99,
COMMENT Dao_De_Jing,
...



и таки null это не зло

исходное сообщениеdefault на поле приписывает неверные ссылки.
...
Рейтинг: 0 / 0
Каскады
    #39602221
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

ну так если тебе надо чтобы туда NULL шёл при вставке прописывай NULL явно
...
Рейтинг: 0 / 0
Каскады
    #39602224
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskypastorавтоматизация закрытия прошлых периодов.
что-то удаляется, что-то актуальное остается,А может не надо удалять?

то, что надо, уходит в анналы резервных копий.
удаляется то, что старше 3-5 лет.

был чек 31.12.2012 - в мусор
по нему был возврат 05.01.2013. - еще должны хранить.

ну и много такого.
...
Рейтинг: 0 / 0
Каскады
    #39602227
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисpastor,

ну так если тебе надо чтобы туда NULL шёл при вставке прописывай NULL явно

мегатонны старого кода
скрижали.
бремя совместимости.

человеко-эоны на тестирование. :(
...
Рейтинг: 0 / 0
Каскады
    #39602238
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

ну тогда триггеры тебе в руки или удаление через ХП с нужной логикой.
Каскадами ты этого не добьёшься
...
Рейтинг: 0 / 0
Каскады
    #39602384
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисpastor,

ну тогда триггеры тебе в руки или удаление через ХП с нужной логикой.
Каскадами ты этого не добьёшься

пуркуа бы и не па?

яда, обходные пути существуют и несколько штук я знаю
...
Рейтинг: 0 / 0
Каскады
    #39602392
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor,

ну раз знаешь, то и вопрос сей не к чему. Нет в сервере других путей и не будет
...
Рейтинг: 0 / 0
Каскады
    #39602402
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastorIvan_Pisarevskyпропущено...
А может не надо удалять?

то, что надо, уходит в анналы резервных копий.
удаляется то, что старше 3-5 лет.

был чек 31.12.2012 - в мусор
по нему был возврат 05.01.2013. - еще должны хранить.


Можно сделать удаление только тех для которых нет возврата, который надо хранить. А тот что мусор, но на него есть возврат, только помечать на удаление.
...
Рейтинг: 0 / 0
Каскады
    #39602409
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисМожно сделать удаление только тех для которых нет возврата, который надо хранить. А тот что мусор, но на него есть возврат, только помечать на удаление.

спасибо, КО

этож ав-то-ма-ти-за-ция.

сущностей этих - как говна за амбаром
я месяц только критерии удаления выбирал/пробовал. на базах разных.
если еще и на тонкости взаимосвязей в предметных областях заложиться - караул. не доживу.
а еще все тестить надо :(

за спрос денег, вроде, не взяли.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Каскады
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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