Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Каскады / 14 сообщений из 14, страница 1 из 1
15.02.2018, 10:49
    #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
15.02.2018, 10:56
    #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
15.02.2018, 10:57
    #39602198
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскады
pastor,

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

а ещё требуемую логику можно заложить в AFTER DELETE триггере или удалять через ХП и заложить логику туда
...
Рейтинг: 0 / 0
15.02.2018, 11:06
    #39602207
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскады
pastorавтоматизация закрытия прошлых периодов.
что-то удаляется, что-то актуальное остается,А может не надо удалять?
...
Рейтинг: 0 / 0
15.02.2018, 11:17
    #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
15.02.2018, 11:24
    #39602221
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Каскады
pastor,

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

спасибо, КО

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

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

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


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