powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка записи в историческую таблицу - что делать с последующими записями?
19 сообщений из 44, страница 2 из 2
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760184
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

вот видете, уже появился update

самое главное, узнайте как устроено в реальной жизни, и от етого исходите

зы
andrey_anonymous 1. НЕ используйте null. Возьмите константу типа date'3000-01-01' - это существенно упростит жизнь.

....
stax
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760186
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxвот видете, уже появился update
Почему "уже"?
update и insert были изначально.
Просто они были внутри merge, в предложениях when matched и when not matched соответственно.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760188
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax1. НЕ используйте null. Возьмите константу типа date'3000-01-01' - это существенно упростит жизнь.
А почему, не могли бы пояснить?
Я и сам об этом задумывался. В случае с MSSQL и вопроса бы такого не возникало, там OR так драматически влияет на запрос, что его желательно избегать при любой возможности.
Но в Oracle выражение (date_end is null or date_end > sysdate) при индексации date_end работает быстро, я не замечал, чтобы оно приводило к снижению производительности.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760215
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариант с указанием диапазона для добавляемой записи не нравится мне вот чем.
На схеме зеленым указаны значения до добавления, голубым после добавления.
И если с первым примером все довольно просто, то второй и особенно третий пример реализовать сложнее.
Нужно или использовать четыре запроса (для каждого из вариантов пересечения диапазонов), либо попытаться все сделать в одном, который получится сложным для понимания и выполнения.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760229
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Staxвот видете, уже появился update
Просто они были внутри merge, в предложениях when matched и when not matched соответственно.
я с мерже плохо дружу, можете привести пример в целях моего ликбеза

зы
уж больно витеевато у меня выйдет

.....
stax
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760237
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

вопрос не стоит нравится/не нравится

что надо пользователю, как оно будет в реальной жизни
если Вы УВЕРЕНЫ что напр правок задним числом не будет, то достаточно и только "с"

зи
насчет null, смысл и в удобстве, Вам почти всюду надо будет лепить or или nvl или через вью

....
stax
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760251
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Alibek B. обычная фильтрация по индексированным полямВ каких случаях поможет индексация второго поля?
Если история очень-очень богатая, то индекс может помочь на выборке актуального среза :)
Хотя в этом случае уместнее partition by dt_end

Alibek B.Если срок действия токена истек, нужно запросить новый. А в таблице хранится их история.
Для решения этой задачи НЕ требуется городить версионность на периодах актуальности записи по типу SCD2.
Скорее даже вредно.
Выбирайте что-то вроде SCD4 и радуйтесь жизни.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760261
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxя с мерже плохо дружу, можете привести пример в целях моего ликбеза
Что-то типа такого.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
merge into t
using (
  with new as (
    select null as item, null as value, null as moment from dual
    union all select 'item1', 10, sysdate from dual
    union all select 'item2', 20, sysdate from dual
  ), d as (
    select null as flag from dual
    union all select 1 from dual
  )
  select new.item, new.value, new.moment, d.flag
  from new, d
) rs on (t.item = rs.item and t.date_beg <= rs.moment and (t.date_end is null or t.date_end > rs.moment) and rs.flag is not null)
when matched then update set t.date_end = rs.moment
when not matched then insert (item, value, date_beg) values (rs.item, rs.value, moment)


Этот запрос предполагает, что из таблицы предварительно удалены все ранее запланированные записи.
Если их не удалять, то в таблице d нужно получать три клона (для добавляемой записи, для действующей записи и для следующей запланированной записи) и предложение when matched будет более сложным.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760264
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВыбирайте что-то вроде SCD4 и радуйтесь жизни.
Не совсем понял этот совет.
SCD4 это ведь SCD2, только не для всех атрибутов, а для выборочных.
Ну так у меня так и есть, я буду хранить версии только токенов доступа.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760448
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.SCD4 это ведь SCD2, только не для всех атрибутов, а для выборочных.
Нет, это отдельная таблица для исторических записей.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760465
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так та таблица, которую я привел в примере, и есть отдельная таблица для исторических записей.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760472
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Так та таблица, которую я привел в примере, и есть отдельная таблица для исторических записей.
Тогда не морочьте мозг, просто вставляйте туда утратившие актуальность записи.
Если очень надо выстроить цепочку версий - то введите суррогатный pk и свяжите либо ссылками, либо просто порядком относительно pk.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760481
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

о, наконец то прочитал что такое SCD

https://habr.com/ru/post/101544/

ps
ето наш xtender?

....
stax
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760504
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxето наш xtender?

Это Саян.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760511
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Возможно подкинет какие-нибудь идеи SCD2 .

SY.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760630
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxето наш xtender?

Это Саян.

незнаком, "Sayan Malakshinov" ето Саян?

просто я не понял идею с триггером
1) мутация
2) в паралельные сессии не увидят изменения

.....
stax
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760642
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYAlibek B.,

Возможно подкинет какие-нибудь идеи SCD2 .

SY.

Код: plsql
1.
2.
3.
Samuel Adams, 6-pack       6.99           13-OCT-11          0
Samuel Adams, 6-pack       7.29 14-OCT-11 03-DEC-11          0
Samuel Adams, 6-pack       7.49 03-DEC-11                    1


до вставки фром - то отличаются на 1, после вставки совпадают так задумано?

.....
stax
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39760963
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
до вставки фром - то отличаются на 1, после вставки совпадают так задумано?


Спасибо, да from должно быть sysdate + 1.

SY.
...
Рейтинг: 0 / 0
Вставка записи в историческую таблицу - что делать с последующими записями?
    #39761144
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYStaxдо вставки фром - то отличаются на 1, после вставки совпадают так задумано?

Спасибо, да from должно быть sysdate + 1.
SY.

В многопользовательской сред с merge лучше поаккуратнее, можно получить wrong results - если, конечно, не пофиксили багу "микроотката".
...
Рейтинг: 0 / 0
19 сообщений из 44, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка записи в историческую таблицу - что делать с последующими записями?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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