|
|
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Стоит задача, спроектировать схему таблиц для хранилища данных. Требуется отслеживать все изменения в данных, которые будут поступать в базу раз в сутки. Задача пользователей - просматривать потом эти данные по состоянию на определенную дату. Вопрос, в каком виде оптимальнее хранить историю? Есть два варианта, как я понимаю 1) Создать одну таблицу с данными (таблица фактов) и делать в нее срезы каждый день. Будет происходить накопление данных, но это может занимать много места. 2) Создать таблицу с данными и к ней таблицу с историей изменения. Минус - более трудоемкий доступ. Каким образом предпочтительнее хранить историю добавления данных? Может быть, есть еще варианты о которых я не знаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 08:01 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
По первому варианту - создать таблицу с фактами. В неё данные будет грузить ETL. Если доступ (по времени) к ней будет неудовлетворительным, то делается витрина с последними значениями показателей (ну или более крупными агрегатами по времени, например на каждый конец месяца). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:21 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Некоторую сложность добавляет то, что пользователи хотят возможность указывать причину изменения/добавления записи наряду с датой изменения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:25 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
А в чем сложность. Делаешь возможность пользователю указывать причины операции из справочника и проносишь в свою таблицу фактов причины. Потом можно делать отдельную витрину с агрегатами по причинам. Прелесть таблицы фактов, в том что от неё можно делать много различных витрин. Чем полнее и детальнее таблица фактов, тем больше разнородных витрин сможешь сделать. Если есть время, то можешь посмотреть мануал по WH, там даже картинки нарисовали http://docs.oracle.com/database/122/DWHSG/introduction-data-warehouse-concepts.htm#DWHSG-GUID-452FBA23-6976-4590-AA41-1369647AD14D ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:36 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Получается что комментарий по изменению нужно будет добавлять не полностью к записи, а к каждому столбцу. Получается в конце дня приходит изменение по 3 колонкам, к каждой - своя причина. А с остальными, неизменными, что делать? Просто оставлять в записи неизменными? не избыточно ли получается... PS/ время есть, спасибо - изучу-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 09:45 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleПолучается что комментарий по изменению нужно будет добавлять не полностью к записи, а к каждому столбцу. Получается в конце дня приходит изменение по 3 колонкам, к каждой - своя причина. А с остальными, неизменными, что делать? Просто оставлять в записи неизменными? не избыточно ли получается... PS/ время есть, спасибо - изучу-)у вас же есть вот это требование "Задача пользователей - просматривать потом эти данные по состоянию на определенную дату.". В этих условиях это самый правильный пусть - сохранять всю версию сборки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 11:26 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 13:16 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm/temporal/temporal.html близко, но мимо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 13:18 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
dbpatch, "это банальный триггер" - банальнее и дерьмовее совета дать не мог? тригеры зло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 13:32 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Vintdbpatch, "это банальный триггер" - банальнее и дерьмовее совета дать не мог? тригеры зло. ути пути, ты английские буквы со ссылки выше совсем не осилил? бедняга ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 14:05 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
dbpatch, тебя когда просят вырыть яму метр на метр ты проектную документацию запрашиваеш, команду собираеш, потом план работ пишеш экскаватор заказываешь и приступаеш?) мой коментарий касается сферических коней в вакууме как и твой совет. ты у автора даже не спросил какая у него нагрузка, как грузятся данные построчно или массово а может через апи или еще какими методами.... но совет конечно надо дать. с кучей умных ссылок и кучей ненужной инфы, тебе место в пт.. откуда ты и вылез. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2017, 15:00 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
dbpatchandrey_anonymous http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm/temporal/temporal.html близко, но мимо Серьезно?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 02:23 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Vintdbpatch, тебя когда просят вырыть яму метр на метр ты проектную документацию запрашиваеш, команду собираеш, потом план работ пишеш экскаватор заказываешь и приступаеш?) мой коментарий касается сферических коней в вакууме как и твой совет. ты у автора даже не спросил какая у него нагрузка, как грузятся данные построчно или массово а может через апи или еще какими методами.... но совет конечно надо дать. с кучей умных ссылок и кучей ненужной инфы, тебе место в пт.. откуда ты и вылез. ок, буквы со статьи ты так и не осилил, ну молодец, чо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 10:20 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousdbpatchпропущено... близко, но мимо Серьезно?! да, там рассказано уже про сахарносинтаксисные расширения FDA в 12с (насколько я понял из чтения по диагонали, дальше не вникал, до 12с в продакшине мне еще пару лет), но не про саму FDA. мимо - в смысле странно учить школьника решать системы диффуров, не научив брать производные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 10:24 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleСтоит задача, спроектировать схему таблиц для хранилища данных. Требуется отслеживать все изменения в данных, которые будут поступать в базу раз в сутки. Раз в сутки , это прошлый век. Уже лет 10 как бизнес уходит в реалтайм. А тот кто не уходит, непоспевает за трендами, и потенциальный банкрот. Особенно критично, если это логистика продаж. Как то один топ сети супермаркетов на каком сешине рассказывал , если реалтайм логистика прощелкала сроки годности и допустила затоварку скоропортящехся продуктов, им показательно привозят в офис этих товаров на сумму премии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 10:40 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
А запустые полки в магазинах, когда положенной номенклатуры нет в магазине их просто премии лишают. Чуваки в реалтайме видят , как и какие товары уходят с полок , по факту печати чеков на кассах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 10:44 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
dbpatchда, там рассказано уже про сахарносинтаксисные расширения FDA Гонишь. Там про сахарносинтаксисные расширения обычного SQL над классической "версионной" таблицей, FDA нафиг не нужен для задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 10:49 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Автор, 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 - это может сильно экономить место ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 11:36 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
д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 - это может сильно экономить место Про деление на факты и измерения, все понятно. Мне с аудитом изменений неясно, как бы так хранить аудит изменения по каждой ячейке таблицы фактов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 12:56 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousdbpatchда, там рассказано уже про сахарносинтаксисные расширения FDA Гонишь. Там про сахарносинтаксисные расширения обычного SQL над классической "версионной" таблицей, FDA нафиг не нужен для задачи. странно, а в тексте статьи упоминался пакет из FDA. впрочем, я же говорил - сильно это не копал (недосуг ставить 12.2), ибо приведенный синтаксис мало возбудил в контексте типовой (кстати) задачи ТСа но что-то мне подсказывает, что сахар этот реализован именно через FDA - на ровном месте они врядли бы сделали еще одну реализацию на тему версионированной базы данных (старую еле еле отладили за несколько лет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 13:56 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
dbpatchно что-то мне подсказывает, что сахар этот реализован именно через FDA - на ровном месте они врядли бы сделали еще одну реализацию на тему версионированной базы данных (старую еле еле отладили за несколько лет) Да не, это чисто синтаксический сахарозаменитель - просто лепит в запросы предикаты по начальной и конечной датам. Вести историю DML не умеет - это, как обычно, задача ETL или иного приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 14:02 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleМне с аудитом изменений неясно, как бы так хранить аудит изменения по каждой ячейке таблицы фактов. Так и хранить. https://en.wikipedia.org/wiki/Slowly_changing_dimension ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2017, 14:04 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
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 Не херня ли получается, товарищи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 12:27 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=152&tid=1885515]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
336ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 669ms |

| 0 / 0 |
