Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Касательно архитектуры БД / 25 сообщений из 37, страница 1 из 2
11.07.2017, 08:01
    #39486206
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Стоит задача, спроектировать схему таблиц для хранилища данных.
Требуется отслеживать все изменения в данных, которые будут поступать в базу раз в сутки.
Задача пользователей - просматривать потом эти данные по состоянию на определенную дату.

Вопрос, в каком виде оптимальнее хранить историю? Есть два варианта, как я понимаю

1) Создать одну таблицу с данными (таблица фактов) и делать в нее срезы каждый день. Будет происходить накопление данных, но это может занимать много места.

2) Создать таблицу с данными и к ней таблицу с историей изменения. Минус - более трудоемкий доступ.

Каким образом предпочтительнее хранить историю добавления данных? Может быть, есть еще варианты о которых я не знаю?
...
Рейтинг: 0 / 0
11.07.2017, 08:24
    #39486214
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
...
Рейтинг: 0 / 0
11.07.2017, 09:21
    #39486244
Evgeny2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
По первому варианту - создать таблицу с фактами.
В неё данные будет грузить ETL.
Если доступ (по времени) к ней будет неудовлетворительным, то делается витрина с последними значениями показателей (ну или более крупными агрегатами по времени, например на каждый конец месяца).
...
Рейтинг: 0 / 0
11.07.2017, 09:25
    #39486247
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Некоторую сложность добавляет то, что пользователи хотят возможность указывать причину изменения/добавления записи наряду с датой изменения.
...
Рейтинг: 0 / 0
11.07.2017, 09:36
    #39486257
Evgeny2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
А в чем сложность.
Делаешь возможность пользователю указывать причины операции из справочника и проносишь в свою таблицу фактов причины.
Потом можно делать отдельную витрину с агрегатами по причинам.
Прелесть таблицы фактов, в том что от неё можно делать много различных витрин. Чем полнее и детальнее таблица фактов, тем больше разнородных витрин сможешь сделать.

Если есть время, то можешь посмотреть мануал по WH, там даже картинки нарисовали
http://docs.oracle.com/database/122/DWHSG/introduction-data-warehouse-concepts.htm#DWHSG-GUID-452FBA23-6976-4590-AA41-1369647AD14D
...
Рейтинг: 0 / 0
11.07.2017, 09:45
    #39486267
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Получается что комментарий по изменению нужно будет добавлять не полностью к записи, а к каждому столбцу. Получается в конце дня приходит изменение по 3 колонкам, к каждой - своя причина. А с остальными, неизменными, что делать? Просто оставлять в записи неизменными? не избыточно ли получается...

PS/ время есть, спасибо - изучу-)
...
Рейтинг: 0 / 0
11.07.2017, 11:26
    #39486370
Alexander Ryndin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Mr_MuscleПолучается что комментарий по изменению нужно будет добавлять не полностью к записи, а к каждому столбцу. Получается в конце дня приходит изменение по 3 колонкам, к каждой - своя причина. А с остальными, неизменными, что делать? Просто оставлять в записи неизменными? не избыточно ли получается...

PS/ время есть, спасибо - изучу-)у вас же есть вот это требование "Задача пользователей - просматривать потом эти данные по состоянию на определенную дату.".
В этих условиях это самый правильный пусть - сохранять всю версию сборки.
...
Рейтинг: 0 / 0
11.07.2017, 13:16
    #39486480
dbpatch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Mr_MuscleСтоит задача, спроектировать схему таблиц для хранилища данных.
Требуется отслеживать все изменения в данных, которые будут поступать в базу раз в сутки.
Задача пользователей - просматривать потом эти данные по состоянию на определенную дату.

Вопрос, в каком виде оптимальнее хранить историю? Есть два варианта, как я понимаю

1) Создать одну таблицу с данными (таблица фактов) и делать в нее срезы каждый день. Будет происходить накопление данных, но это может занимать много места.

2) Создать таблицу с данными и к ней таблицу с историей изменения. Минус - более трудоемкий доступ.

Каким образом предпочтительнее хранить историю добавления данных? Может быть, есть еще варианты о которых я не знаю?

для состояния "на определенную дату" у Oracle есть штука Flashback Data Archive https://docs.oracle.com/cd/B28359_01/appdev.111/b28424/adfns_flashback.htm#BJFIEEII

начиная с 11.2 он стал вполне юзабелен - сняли досадные ограничения на DDL.
Задачать период хранения можно в т.ч.

А для "что на что и кем изменилось" - это банальный триггер AFTER INSERT OR UPDATE OR DELETE, который пишет во вторую таблицу данные аудита

или использование фич того-же FDA

как это все делать - показано тут:

http://www.oracle.com/technetwork/issue-archive/2016/16-mar/o26performance-2925662.html
...
Рейтинг: 0 / 0
11.07.2017, 13:18
    #39486483
dbpatch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
...
Рейтинг: 0 / 0
11.07.2017, 13:32
    #39486497
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
dbpatch,
"это банальный триггер" - банальнее и дерьмовее совета дать не мог? тригеры зло.
...
Рейтинг: 0 / 0
11.07.2017, 14:05
    #39486543
dbpatch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Vintdbpatch,
"это банальный триггер" - банальнее и дерьмовее совета дать не мог? тригеры зло.

ути пути, ты английские буквы со ссылки выше совсем не осилил? бедняга
...
Рейтинг: 0 / 0
11.07.2017, 15:00
    #39486595
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
dbpatch,
тебя когда просят вырыть яму метр на метр ты проектную документацию запрашиваеш, команду собираеш, потом план работ пишеш экскаватор заказываешь и приступаеш?)
мой коментарий касается сферических коней в вакууме как и твой совет. ты у автора даже не спросил какая у него нагрузка, как грузятся данные построчно или массово а может через апи или еще какими методами.... но совет конечно надо дать. с кучей умных ссылок и кучей ненужной инфы, тебе место в пт.. откуда ты и вылез.
...
Рейтинг: 0 / 0
12.07.2017, 02:23
    #39487086
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
dbpatchandrey_anonymous http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm/temporal/temporal.html
близко, но мимо
Серьезно?!
...
Рейтинг: 0 / 0
12.07.2017, 10:20
    #39487227
dbpatch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Vintdbpatch,
тебя когда просят вырыть яму метр на метр ты проектную документацию запрашиваеш, команду собираеш, потом план работ пишеш экскаватор заказываешь и приступаеш?)
мой коментарий касается сферических коней в вакууме как и твой совет. ты у автора даже не спросил какая у него нагрузка, как грузятся данные построчно или массово а может через апи или еще какими методами.... но совет конечно надо дать. с кучей умных ссылок и кучей ненужной инфы, тебе место в пт.. откуда ты и вылез.

ок, буквы со статьи ты так и не осилил, ну молодец, чо
...
Рейтинг: 0 / 0
12.07.2017, 10:24
    #39487231
dbpatch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
andrey_anonymousdbpatchпропущено...

близко, но мимо
Серьезно?!

да, там рассказано уже про сахарносинтаксисные расширения FDA в 12с (насколько я понял из чтения по диагонали, дальше не вникал, до 12с в продакшине мне еще пару лет), но не про саму FDA.

мимо - в смысле странно учить школьника решать системы диффуров, не научив брать производные.
...
Рейтинг: 0 / 0
12.07.2017, 10:40
    #39487254
д0kХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Mr_MuscleСтоит задача, спроектировать схему таблиц для хранилища данных.
Требуется отслеживать все изменения в данных, которые будут поступать в базу раз в сутки.


Раз в сутки , это прошлый век.
Уже лет 10 как бизнес уходит в реалтайм.
А тот кто не уходит, непоспевает за трендами, и потенциальный банкрот.
Особенно критично, если это логистика продаж.

Как то один топ сети супермаркетов на каком сешине рассказывал ,
если реалтайм логистика прощелкала сроки годности и допустила затоварку
скоропортящехся продуктов,
им показательно привозят в офис этих товаров на сумму премии.
...
Рейтинг: 0 / 0
12.07.2017, 10:44
    #39487261
д0kХ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
А запустые полки в магазинах, когда положенной номенклатуры нет в магазине
их просто премии лишают.
Чуваки в реалтайме видят ,
как и какие товары уходят с полок , по факту печати чеков на кассах.
...
Рейтинг: 0 / 0
12.07.2017, 10:49
    #39487271
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
dbpatchда, там рассказано уже про сахарносинтаксисные расширения FDA
Гонишь.
Там про сахарносинтаксисные расширения обычного SQL над классической "версионной" таблицей, FDA нафиг не нужен для задачи.
...
Рейтинг: 0 / 0
12.07.2017, 11:36
    #39487322
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Автор,
1) обязательно прочитай рекомендованную ссылку, особенно Facts and Dimensions
http://docs.oracle.com/database/122/DWHSG/data-warehouse-logical-design.htm#DWHSG9234
дальше дели свои входящие данные на Facts \ Dimensions, факты складируй по срезам, измерения делай медленно меняющиеся - https://en.wikipedia.org/wiki/Slowly_changing_dimension типа 2,
джойны факт-измерение будут выглядеть так:

fact.id_dimension = dim.id_dimension
and fact.ddate between dim.start_date and dim.end_date

2) некоторые редко меняющиеся или долго длящиеся факты можно хранить в виде scd type2 - это может сильно экономить место
...
Рейтинг: 0 / 0
12.07.2017, 12:56
    #39487430
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
д0kХMr_MuscleСтоит задача, спроектировать схему таблиц для хранилища данных.
Требуется отслеживать все изменения в данных, которые будут поступать в базу раз в сутки.


Раз в сутки , это прошлый век.
Уже лет 10 как бизнес уходит в реалтайм.
А тот кто не уходит, непоспевает за трендами, и потенциальный банкрот.
Особенно критично, если это логистика продаж.

Как то один топ сети супермаркетов на каком сешине рассказывал ,
если реалтайм логистика прощелкала сроки годности и допустила затоварку
скоропортящехся продуктов,
им показательно привозят в офис этих товаров на сумму премии.

Раз в сутки - это достаточная периодичность для данного случая. Данные будут использоваться для составления отчетности в госорганы.

Alexus12Автор,
1) обязательно прочитай рекомендованную ссылку, особенно Facts and Dimensions
http://docs.oracle.com/database/122/DWHSG/data-warehouse-logical-design.htm#DWHSG9234
дальше дели свои входящие данные на Facts \ Dimensions, факты складируй по срезам, измерения делай медленно меняющиеся - https://en.wikipedia.org/wiki/Slowly_changing_dimension типа 2,
джойны факт-измерение будут выглядеть так:

fact.id_dimension = dim.id_dimension
and fact.ddate between dim.start_date and dim.end_date

2) некоторые редко меняющиеся или долго длящиеся факты можно хранить в виде scd type2 - это может сильно экономить место

Про деление на факты и измерения, все понятно. Мне с аудитом изменений неясно, как бы так хранить аудит изменения по каждой ячейке таблицы фактов.
...
Рейтинг: 0 / 0
12.07.2017, 13:56
    #39487497
dbpatch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
andrey_anonymousdbpatchда, там рассказано уже про сахарносинтаксисные расширения FDA
Гонишь.
Там про сахарносинтаксисные расширения обычного SQL над классической "версионной" таблицей, FDA нафиг не нужен для задачи.

странно, а в тексте статьи упоминался пакет из FDA. впрочем, я же говорил - сильно это не копал (недосуг ставить 12.2), ибо приведенный синтаксис мало возбудил в контексте типовой (кстати) задачи ТСа

но что-то мне подсказывает, что сахар этот реализован именно через FDA - на ровном месте они врядли бы сделали еще одну реализацию на тему версионированной базы данных (старую еле еле отладили за несколько лет)
...
Рейтинг: 0 / 0
12.07.2017, 14:02
    #39487510
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
dbpatchно что-то мне подсказывает, что сахар этот реализован именно через FDA - на ровном месте они врядли бы сделали еще одну реализацию на тему версионированной базы данных (старую еле еле отладили за несколько лет)
Да не, это чисто синтаксический сахарозаменитель - просто лепит в запросы предикаты по начальной и конечной датам.
Вести историю DML не умеет - это, как обычно, задача ETL или иного приложения.
...
Рейтинг: 0 / 0
12.07.2017, 14:04
    #39487515
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Mr_MuscleМне с аудитом изменений неясно, как бы так хранить аудит изменения по каждой ячейке таблицы фактов.
Так и хранить.
https://en.wikipedia.org/wiki/Slowly_changing_dimension
...
Рейтинг: 0 / 0
13.07.2017, 12:27
    #39488248
Mr_Muscle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
andrey_anonymous,

Получается, что мне больше подходит 6 способ

Если есть таблица
----------------------------------------------------------------------------
Supplier_key | Supplier_Code | Supplier_Name | Supplier_State
----------------------------------------------------------------------------
123 | ABC | Acme Supply Co | CA
124 | ABC | A & J Supply Co | IL


То к ней таблица истории с такими колонками:

Supplier_key
Supplier_Code
Supplier_Name
Sup_Name_Start_Date
Sup_Name_End_Date
Sup_Name_Change_Cause
Sup_Name_Change_User
Supplier_State
Supplier_State_Start_Date
Supplier_State_End_Date
Supplier_State_Change_Cause
Supplier_State_Change_User


Не херня ли получается, товарищи?
...
Рейтинг: 0 / 0
13.07.2017, 12:34
    #39488264
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Касательно архитектуры БД
Mr_MuscleНе херня ли получается, товарищи?Воистину.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Касательно архитектуры БД / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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