|
|
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleНе херня ли получается, товарищи?Воистину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2017, 12:34 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Пока что думаю остановиться на такой структуре. Чтобы была возможность получить доступ к текущим либо историческим значениям параметров продавца, покупателя. А так же в случае необходимости узнать кто и зачем их менял, пусть не поколоночно.... Снизим уровень детализации. Авторизация на уровне приложения, поэтому будет ссылка на таблицу с пользователями. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Аналогично - другие таблицы, на которые может ссылаться Deals. Для вывода всего этого делать витрины данных по запросу. Так не очень хернёй выглядит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 08:06 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_Muscleхернёй выглядит? Выглядит. Со ссылками - точно оно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 11:17 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousMr_Muscleхернёй выглядит? Выглядит. Со ссылками - точно оно. А почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 11:45 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleА почему? Исторические записи id={5,6} куда ссылаются? А id={1,2}? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 11:51 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousMr_MuscleА почему? Исторические записи id={5,6} куда ссылаются? А id={1,2}? Ну, на SELLER_ID {1,2} и соответственно BUYER_ID {5,6} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 11:56 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleНу, на SELLER_ID {1,2} и соответственно BUYER_ID {5,6} Пора уже что-нибудь почитать из теории реляционных БД. Хотя бы основы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 11:58 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousMr_MuscleНу, на SELLER_ID {1,2} и соответственно BUYER_ID {5,6} Пора уже что-нибудь почитать из теории реляционных БД. Хотя бы основы. Читаю-читаю много, пока видимо не помогает! пожалуйста, объясните что здесь не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 13:49 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleЧитаю-читаю много, пока видимо не помогает! пожалуйста, объясните что здесь не так. Начнете запросы к этой... гм... структуре писать - поймете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2017, 14:31 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousMr_MuscleЧитаю-читаю много, пока видимо не помогает! пожалуйста, объясните что здесь не так. Начнете запросы к этой... гм... структуре писать - поймете. А почему одно на одно и то же измерение не могут сслылаться несколько разных столбцов фактов? Как это влияет на запросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2017, 23:26 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Не внял что-то...andrey_anonymousпропущено... Начнете запросы к этой... гм... структуре писать - поймете. А почему одно на одно и то же измерение не могут сслылаться несколько разных столбцов фактов? Как это влияет на запросы? Хороший вопрос!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 06:19 |
|
||
|
Касательно архитектуры БД
|
|||
|---|---|---|---|
|
#18+
Mr_MuscleСтоит задача, спроектировать схему таблиц для хранилища данных. тогда лучше было задать вопрос в ветке про DWH стандартное решение - измерение времени и класть данные в таблицу фактов на соответствующие уровни ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2017, 18:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=52&tid=1885515]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
394ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 738ms |

| 0 / 0 |
