|
|
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Не я первый, не я последний видимо задаю этот вопрос. Хотелось бы узнать "классические решения" подобных задач. Организовать базу данных, отображающую текущее состояние дел легко. Но как только встает вопрос о том, что бы документ напечатанный 2 года назад и сегодня был бы одинаков то простая структура сразу сильно усложняется, и работа с этой структурой соответственно. Вот простой пример штатного расписания ( чисто теоретический, без подробностей ) tDept - таблица отделов - это дерево (DeptID = ParentID) tPosition - список должностей tStaff - таблица "рабочих мест": DeptID - в каком отделе, PositionID - какой должности, SQty - сколько рабочих мест В нынешнем виде эта структура "моментальной" базы данных т.е. здесь не видно 1. Какова была структура предприятия 2 года назад. ( со всеми вытекающими вопросами - как назывался такой-то отдел 2 года назад, когда переименовали отдел, когда бухгалтерию перевели из подчинения директора в подчинение финансового отдела и т.д) 2. Когда рабочее место "кассира" перевели из бухгалтерии во вновь созданный отдел "обслуживания клиентов" и т.д. т.е. уже к одной таблице отелов много вопросов, не говоря уже о том, что она является "справочником" для таблицы "рабочих мест" Я пока решаю подобные вопросы добавляя 2 поля типда DateTime: BeginDate, EndDate. т.е. Время валидности данной записи, но тогда использование таких таблиц ( тем более связанных друг с другом ) сильно усложняется........ может кто подскажет другие варианты решений подобных задач? Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 00:37 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
по сути требуется ведение истории. Обычно она хранится в отдельном месте. Тут скорее вопрос в другом, вы уверены, что вам нужно знать, где жил кассир 2 года назад ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 10:21 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
karapetyan_aЯ пока решаю подобные вопросы добавляя 2 поля типда DateTime: BeginDate, EndDate. т.е. Время валидности данной записи, но тогда использование таких таблиц ( тем более связанных друг с другом ) сильно усложняется........ может кто подскажет другие варианты решений подобных задач?Кардинально другого - никто не предложит. Присто потому что так и решают эту задачу. Oracle для historical view поступает почти так же. 1) Основная таблица - обычная таблица. 2) К каждой таблице для которой включена история - создается теневая таблица с диапазоном дат, которые определяют значения полей записи в определенный момент времени. При указании даты на которую надо получить данные - Oracle сам решает какие данные откуда взять. А с обычной таблицей можно работать как с текущими данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 11:25 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
karapetyan_aЯ пока решаю подобные вопросы добавляя 2 поля типда DateTime: BeginDate, EndDate. т.е. Время валидности данной записи, но тогда использование таких таблиц ( тем более связанных друг с другом ) сильно усложняется........ может кто подскажет другие варианты решений подобных задач? Ну это просто. А вот изменение самой структуры таблицы во времени как отслеживать ? Я использую EAV с историей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 11:27 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
heyвы уверены, что вам нужно знать, где жил кассир 2 года назад ? Позволю себе пояснить за автора, поскольку вопрос интересен и для меня. Дело в том, что существуют системы, где выдвигается требование "повторяемости отчетов". То есть, если есть отчетная форма, возвращаясь к примеру, "Штатное расписание на указанную дату" с параметром - дата составления, то запросив СЕЙЧАС отчет на "01.01.1999", мы должны получить В ТОЧНОСТИ тот же отчет, что был получен на эту дату в 1999 году, несмотря на все последовавшие реорганизации и переезды кассира. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 11:31 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
karapetyan_aЯ пока решаю подобные вопросы добавляя 2 поля типда DateTime: BeginDate, EndDate Любопытно, как Вы решаете такой вопрос: 1. Если есть таблица должностей, tPosition (PosID PK, PosName), и мы добавим сюда BeginDate, EndDate, то каким станет первичный ключ, и соответственно внешний ключ из tStaff ? 2. Если первичным ключом станет PosID + BeginDate, и соответственно внешним ключом Staff.PosID + Staff.BeginDate, то это сработает лишь в том случае, если дата возникновения рабочего места совпадает с датой возникновения должности. А как быть, есть должность "охранник" добавили давно, а в конкретный отдел рабочее место охранника ввели позже? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 11:43 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
heyпо сути требуется ведение истории. Обычно она хранится в отдельном месте. Тут скорее вопрос в другом, вы уверены, что вам нужно знать, где жил кассир 2 года назад ? где жил, конечно не важно...... а вот какую должность занимал, какой оклад был и т.д вот это вот важно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 14:12 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Bely Oracle для historical view поступает почти так же. 1) Основная таблица - обычная таблица. 2) К каждой таблице для которой включена история - создается теневая таблица с диапазоном дат, которые определяют значения полей записи в определенный момент времени. При указании даты на которую надо получить данные - Oracle сам решает какие данные откуда взять. А с обычной таблицей можно работать как с текущими данными. У нас как раз Oracle, не мобли бы вы поподробнее объяснить ( на примере простейшей таблицы ) что за historical view ? ( ну или послать меня к первоисточнику:) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 14:14 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisherheyвы уверены, что вам нужно знать, где жил кассир 2 года назад ? Позволю себе пояснить за автора, поскольку вопрос интересен и для меня. Дело в том, что существуют системы, где выдвигается требование "повторяемости отчетов". То есть, если есть отчетная форма, возвращаясь к примеру, "Штатное расписание на указанную дату" с параметром - дата составления, то запросив СЕЙЧАС отчет на "01.01.1999", мы должны получить В ТОЧНОСТИ тот же отчет, что был получен на эту дату в 1999 году, несмотря на все последовавшие реорганизации и переезды кассира. Абсолютно верно. спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 14:16 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
karapetyan_aУ нас как раз Oracle, не мобли бы вы поподробнее объяснить ( на примере простейшей таблицы ) что за historical view ? ( ну или послать меня к первоисточнику:) ) Flashback Data Archive (Oracle Total Recall) . Появился в версии 11g ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 17:06 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Bely Flashback Data Archive (Oracle Total Recall) . Появился в версии 11g Спасибо, посмотрю. ( хотя у нас 10-я версия оракла ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 17:34 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
_модkarapetyan_aЯ пока решаю подобные вопросы добавляя 2 поля типда DateTime: BeginDate, EndDate. т.е. Время валидности данной записи, но тогда использование таких таблиц ( тем более связанных друг с другом ) сильно усложняется........ может кто подскажет другие варианты решений подобных задач? Ну это просто. А вот изменение самой структуры таблицы во времени как отслеживать ? Я использую EAV с историей. Если из таблицы поля не удалять (т.е. по сути не удалять данные, без которых старый отчёт не получится), то и старому отчёту болжно быть фиолетово, что в структуре таблицы изменилось. Он просто возьмёт из БД то что ему нужно. Хуже, когда речь идёт о миграции данных в новую схему. Далеко не всегда находятся ресурсы, чтобы дорабатывать унаследованные отчёты и т.п. модули, которые сейчас уже не используются. Остаётся сохранить старую систему, чтобы при нужде вытянуть из неё архивные данные. Вообще говоря, одной даты (или одного диапазона дат) может быть недостаточно. Например, что делать, если нужно исправить ошибку в данных? При одной дате (или паре дат), мы можем заморозить первоначальный отчёт, но не сможем получить исправленный отчёт и наоборот. В этой ситуации полезно разделить операционный и отчётный периоды. Т.е. нужно регистрировать когда состоялся исторический факт и когда он внесён или исправлен (путём внесения дополнительной корректирующей записи) в системе. Тогда мы сможем создавать отчёт и в первоначальном виде, отсекая факты, внесённые в систему позднее, и создавать отчёт за тот же период, но с учётом поздних корректировок. В OLTP системе такой подход противоречит с требованию контролировать ссылочную целостность и уникальность ключей из-за дублирования ключа в корректирующих записях. Но если время от времени выгружать данные из OLTP системы (которая отражает только текущее состояние) в историческую БД, из которой генерить всякоразные отчёты, как аналитические, так и оперативные, а так же делать выгрузки в бухгалтерию и т.п., то ни одно значимое изменение в исходных данных не осанется незамеченным. Все ходы будут записаны. Все временные срезы будут доступны. Наконец "повторяемость" результатов расчёта иногда трактуют неверно. В ряде случаев это означает только то, что на одних и тех же данных, должны получаться одни и те же результаты (тогда и вся эта канитель ни к чему). Если вам нужно просто получить старый отчёт, независимо от того, что БД могла поменяться, то сразу сохраните его в виде файла и не мучайте БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2009, 21:32 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> Присто потому что так и решают эту задачу. Кто "так и решает"? Обкуренные китайские первоклассники-второгодники? Расскажите, как с этим набором атрибутов Вы намерены реализовать [псевдо]транзакционность изменений и дерево версий (даже простое, не трогая структуру данных)? > Oracle Тупят, как это часто бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2009, 11:26 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
флэшбэк не потянет "года 2 назад". а применение стартдаты и конецдаты нормальная практика. транзакционность в пл/скл блоке-коде выделяешь. завел нового человечка, старые данные получили значение конецдаты по текущему времени, а новый человек получил стартдату (прим. конецдата обычно имеет значение будущего времени для корректности select). кто стартдата конецдата инженер1 01.01.2000 31.12.2001 новый 01.01.2002 01.01.2100 select данные from таблица where id=идентификатор and sysdate /*или нужная старая дата*/ between startdate and enddate ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2009, 20:36 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Еще один гуру по имени nexoma? Наверное, тоже ораклоид? > транзакционность в пл/скл блоке-коде выделяешь В течение месяца сто юзеров в пятидесяти филиалах активно редактировали одни и те же данные сложной структуры, причем, логически связанные данные менялись в течение всей недели произвольным образом (у юзеров разные приоритеты и разная производительность). Через месяц выяснилось, что половина изменений была сделана неправильно. Расскажите, пожалуйста, какая транзакционность в каком коде поможет Вам откатить неправильные изменения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 14:08 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
у меня на старой работе стояла база oracle 10g. Вопрос с историей решался так. Ключ состоял из айдишника и версии записи и было поле last - признак последней версии. При редактировании какой-либо записи, last присваивали 0, выставляли дату удаления, и создавали новую, у которой last=1, версия на 1 больше и дата создания sysdate. Таким образом можно было вытащить данные за любой промежуток времени, просмотреть хронологию изменения договора и вообще чего угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 15:12 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> Ключ состоял из айдишника и версии записи Криво. Зачем версию тащить в ключ? > можно было вытащить данные за любой промежуток времени Этого не достаточно. Нужно иметь возможность получать актуальные данные на любой момент времени. Скажем, если DM прекратила существование 01.01.2002, а оператор отразил эти изменения только через три недели, ни в одной связи с 01.01.2002 DM участвовать не должна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 15:25 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Ключ состоял из айдишника и версии записи Криво. Зачем версию тащить в ключ? > можно было вытащить данные за любой промежуток времени Этого не достаточно. Нужно иметь возможность получать актуальные данные на любой момент времени. Скажем, если DM прекратила существование 01.01.2002, а оператор отразил эти изменения только через три недели, ни в одной связи с 01.01.2002 DM участвовать не должна. 1. Если не тащить версию, то первичный ключ может быть одинаковым у 40 записей. Вторая составляющая как раз чтобы разные версии одной и той же записи имели уникальный ключ. 2. Такой ситуации быть не может, потому что из приложения при редактировании вызываются хранимые процедуры, которые автоматически гасят текущую версию и создают новую. Поэтому на конкретный момент времени база - точная копия той, что была когда-то. И чисто практически могу сказать, что никогда не было ситуации чтобы я не мог извлеч нужные мне данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 16:28 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> Если не тащить версию, то первичный ключ может быть одинаковым у 40 записей. Первичный ключ по определению уникален и суррогатен, так что никаких повторений в принципе быть не может. > Такой ситуации быть не может Дорого куплю телепатический модуль от Вашей софтинки. > на конкретный момент времени база - точная копия той, что была когда-то Дружище, я пытаюсь Вас подвести к простой мысли о том, что актуальность базы данных бывает двух видов: 1. база не актуальна потому, что при проектировании бараны-архитекторы не удосужились различать актуальность данных внутренних и внешних источников и 2. база не актуальна потому, что слишком большой объем работы для поддежки ее актуальности. Других состояний у базы данных не бывает. > не было ситуации чтобы я не мог извлеч нужные мне данные Значит, просто не было сложных задач. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 19:22 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher 1. Если есть таблица должностей, tPosition (PosID PK, PosName), и мы добавим сюда BeginDate, EndDate, то каким станет первичный ключ, и соответственно внешний ключ из tStaff ? Первичным ключом станет PosID + BeginDate. А внешнего ключа в таблице tStaff не будет. т.е. в смысле "ограничения" (FK constraint) не будет. Будет "смысловой" внешний ключ. наши даты определяют время "жизни" (валидности) конкретной строки. В связанной таблице тоже существует пара дат(нач. конец). Так вот "логический" внешний ключ определяет, что время жизни "дочерней" записи не может выходить за рамки времени жизни "родительской" записи. Вот эта логика и должна "гарантироваться" триггерами. Вот в этом то и сложность, прежде чем изменить какую-либо запись надо будет проверять много других таблиц.... ведь от таблицы tStaff потом будут зависеть tEmployee........ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 20:59 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Если не тащить версию, то первичный ключ может быть одинаковым у 40 записей. Первичный ключ по определению уникален и суррогатен, так что никаких повторений в принципе быть не может. > Такой ситуации быть не может Дорого куплю телепатический модуль от Вашей софтинки. > на конкретный момент времени база - точная копия той, что была когда-то Дружище, я пытаюсь Вас подвести к простой мысли о том, что актуальность базы данных бывает двух видов: 1. база не актуальна потому, что при проектировании бараны-архитекторы не удосужились различать актуальность данных внутренних и внешних источников и 2. база не актуальна потому, что слишком большой объем работы для поддежки ее актуальности. Других состояний у базы данных не бывает. > не было ситуации чтобы я не мог извлеч нужные мне данные Значит, просто не было сложных задач. Про первичный ключ я имею ввиду (1,1) (1,2), где первое поле собственно сам ключ, а второе - версия. Если убрать версию, то из чего тогда будет состоять ключ? Насчет актуальности не выехал, приведи пример, пожалуйста. А задачи решались очень сложные. Вся информация из базы хранилась на бумаге в архивах в 3 зданиях. Несколько десятков миллиардов томов. Для составления отчетов держали целый отдел SQL программеров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2009, 06:13 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> Если убрать версию, то из чего тогда будет состоять ключ? Обычный суррогатный идентификатор. Версия в ключе не допускает параллельных версий сущности, которые объективно существуют в разных экземплярах базы данных. Ваша реализация предполагает единый независимый генератор версий либо кривые "диапазонные" суррогаты версий для каждого экземпляра базы данных. > Насчет актуальности не выехал Для любой базы данных можно гарантировать актуальность только тех данных, в отношении которых владелец выступает вендором, т. е. самостоятельно их генерирует. У данных всех внешних источников актуальность имеет другую природу. А поскольку невозможно представить себе базу данных без ссылок на внешние данные, то и говорить об актуальности можно очень условно и с кучей оговорок. > Несколько десятков миллиардов томов. Простите за столь категоричную оценку, но ничего глупее не могу себе представить. Базы данных и существуют как альтернатива данным на бумаге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2009, 15:30 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
daunito Вся информация из базы хранилась на бумаге в архивах в 3 зданиях. Несколько десятков миллиардов томов. Миллиардов? Вы ошибаетесь на несколько (немало) порядков, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2009, 17:24 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
mcureenab, 1. Исправление ошибок вообще не проблема. 2. Самое сложное - изменение именно структуры данных когда меняется n-арность отношений (был атом стал список). Программа должна поддерживать как новую так и старую струтктуру. 3. Хранилище проблему не решает - ведь его стр-ра тоже может меняться во времени - тут скорее проблема только усугубляется. 4. Хранить готовые отчеты конечно можно, но нужен-то новый отчет на старых данных. Такое впечатление, что необходим инструмент встроенный в СУБД, который будет хранить версии БД вместе с версиями софта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 11:10 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
_мод 2. Самое сложное - изменение именно структуры данных когда меняется n-арность отношений (был атом стал список). Программа должна поддерживать как новую так и старую струтктуру. А что здесь сложного? Прежний атом остается, список добавляется, прежний програмный код остается, новый добавляется, и указывается, с какого периода его задействовать. Было: ID NAME PHONE_NUM1ИВАНОВ12-34-56 Отчет форма Ф-1: SELECT NAME, PHONE_NUM FROM T1 С 01.01.2009 стало: ID NAME PHONE_NUM1ИВАНОВ12-34-56 ID PHONE_NUM_NEW112-34-56165-43-21 Отчет форма Ф-1: IF date > 01.01.2009 // границы нововведений структуры можно отмечать в специальных классах-селекторах, или опять же завести времязависимую таблицу с перечнем алгоритмов (классов, методов) и сроками их актуальности, и сделать селектор на ее основе... THEN SELECT NAME, PHONE_NUM_NEW FROM T1, T2... новый текст ELSE прежний (inherited, CASE - по вкусу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 11:51 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Если убрать версию, то из чего тогда будет состоять ключ? Обычный суррогатный идентификатор. Версия в ключе не допускает параллельных версий сущности, которые объективно существуют в разных экземплярах базы данных. Ваша реализация предполагает единый независимый генератор версий либо кривые "диапазонные" суррогаты версий для каждого экземпляра базы данных. > Насчет актуальности не выехал Для любой базы данных можно гарантировать актуальность только тех данных, в отношении которых владелец выступает вендором, т. е. самостоятельно их генерирует. У данных всех внешних источников актуальность имеет другую природу. А поскольку невозможно представить себе базу данных без ссылок на внешние данные, то и говорить об актуальности можно очень условно и с кучей оговорок. > Несколько десятков миллиардов томов. Простите за столь категоричную оценку, но ничего глупее не могу себе представить. Базы данных и существуют как альтернатива данным на бумаге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 17:00 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Крайне содержательное сообщение, daunito, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 18:09 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Мне эта кажущаяся простота задачи от заказчика чем-то напоминает задачу: "Давай во всех сущностях добавим колонку "Удалено", чтобы не удалять их, а ПОМЕЧАТЬ на удаление". ... Валидность данных во времени, да ещё и валидность-историчность структуры данных - усложняют задачу в разы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 18:27 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> Валидность данных во времени, да ещё и валидность-историчность структуры данных - усложняют > задачу в разы. Ничего радикально сложного в задаче нет. Важна изначально правильная постановка задачи и четкое формулирование граничных условий. Желательно также избегать каши понятий: версионность - гораздо более гибкий механизм, чтобы использовать ее только как генератор ключей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2009, 19:21 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Дык какой же все-таки окончательный вердикт-то будет? Окончательной таблетки: как организовать унифицированное/масштабируемое хранение истории атрибутов любой сущности Х? я - не увидел. Все очень бурно началось, и скоропостижно на пол-дороге скончалось. Впрочем, как и сдесь ... _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2009, 16:28 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Ex_SoftДык какой же все-таки окончательный вердикт-то будет? Могу только повторить: EAV с историей + метаописание с историей полностью решает проблему ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2009, 16:41 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
обратитесь в раздел olap, там специалисты сразу должны увидеть паттерн ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2009, 18:40 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
prompt обратитесь в раздел olap Если я правильно понимаю, то у меня OLTP -приложение... _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2009, 22:45 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Ex_SoftДык какой же все-таки окончательный вердикт-то будет? Окончательной таблетки: как организовать унифицированное/масштабируемое хранение истории атрибутов любой сущности Х? я - не увидел. Все очень бурно началось, и скоропостижно на пол-дороге скончалось. Впрочем, как и сдесь ... _________________ "Helo, word!" - 17 errors 56 warningsОкончательного вердикта не будет. Есть несколько вариантов: 1) во все таблицы вставить две даты, все запросы строить по принципу "данные на указанную дату". 2) К каждой таблице, для которой нужна история - создать "теневую таблицу", в которой хранить старые данные + диапазон действия значения. В обычной работе - использовать текущую таблицу, для истории - использовать обе. 3) Если у вас Oracle 11g - используйте Total Recall. Он будет сохранять всю историю автоматом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 12:34 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Хранение старых фактов - прерогатива olap технологии, хотя физически они могут храниться в oltp базе.Все-таки это редко использеумая функция - посмотреть данные на прошлую дату, в основном применяемая в отчетах.Одним из обязательных измерений в OLAP считается дата регистрации факта, по-моему, то что Вам надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 13:39 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
promptХранение старых фактов - прерогатива olap технологии, хотя физически они могут храниться в oltp базе.Все-таки это редко использеумая функция - посмотреть данные на прошлую дату, в основном применяемая в отчетах.Одним из обязательных измерений в OLAP считается дата регистрации факта, по-моему, то что Вам надоOLAP и история - вещи разные (Объем продаж по квартально/помесячно <> напечатать проведенную платежку с реквизитами годичной давности). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 15:03 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
если в olap данных сохранен факт проведения оплаты с соответствующими реквизитами, то на его основе можно выдать как информацию по 1 транзакции, так и консолидированную, например сумму проведенную для данного клиента за месяц.Разве не так? Дело ведь в гранулярности факта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 15:30 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Bely Окончательного вердикта не будет /me думает: это - радует Bely 1) во все таблицы вставить две даты, все запросы строить по принципу "данные на указанную дату". Это уже обмусолилось... Практически со всех сторон. IMHO, камнем преткновения при таком подходе является интерпретация граничных значений. Bely 2) К каждой таблице, для которой нужна история - создать "теневую таблицу", в которой хранить старые данные + диапазон действия значения. В обычной работе - использовать текущую таблицу, для истории - использовать обе. Ну... В историографии нуждаются не только данные, как таковые, но и НСИ, которая меняется очень часто на протяжении жизненного цикла того же договора. Так что при таком подходе добавляется еще одна головная боль: как различить "где играем, где не играем, а где рыбу заворачивали"? Bely 3) Если у вас Oracle 11g Не... Мы - попроще (Sybase ASE, FB) _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 17:46 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Ex_SoftНу... В историографии нуждаются не только данные, как таковые, но и НСИ, которая меняется очень часто на протяжении жизненного цикла того же договора.Who is этот НСИ? (Неадекватный Системный Изменяльщик? :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 18:02 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Н ормативно С правочная И нформация _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 18:18 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Ex_Soft Н ормативно С правочная И нформацияЕсли у вас НЕ МЕНЯЕТСЯ структура БД, то это лечится так же. Включается история не только на данные, но и на справочники. программа должна просто уметь доставать нужные данные и из справочников (на определенную дату). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 18:47 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> программа должна просто уметь доставать нужные данные и из справочников (на определенную дату) Вы забыли присовокупить блок-схему телепатического устройства для такой базы данных. Г-н _мод уже сказал все, что можно сказать по теме. Любые другие варианты реализации, включая оракловые приблуды, - поделки обкуренных китайских первоклассников-второгодников. Обсуждать имеет смысл достаточно узкие вещи: критерии выбора метамодели, набор атрибутов, совместное использование версий и истории и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 20:07 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Г-н _мод уже сказал все, что можно сказать по теме guest_20040621 EAV с историей + метаописание с историей полностью решает проблему Это? guest_20040621 Любые другие варианты реализации, включая оракловые приблуды, - поделки обкуренных китайских первоклассников-второгодников /me думает: суров... _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2009, 23:46 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
> Г-н _мод уже сказал все, что можно сказать по теме Причем, все сказанное обсуждалось не раз и не два, легко найдете поиском. > суров... При чем здесь "суров"? Тема возникает регулярно. И регулярно одни и те же люди дают одни и те же ответы. Причем, и неправильные ответы дают тоже регулярно и тоже одни и те же люди. Вас бы не задолбало читать ахинею? Абстрагируйтесь от задачи. Просто словами сформулируйте то, что хотите получить. Легко увидите, что, в противовес фактологическим базам данных, Вы формулируете требования к регистрации процессов. Разница в проектировании заключается в том, что в каждый момент времени Вы хотите иметь актуальную суперпозицию состояний процессов. Причем, заранее не всегда известно, какому именно процессу сопоставлена сущность. Процесс в данном случае - это не соответствие нотации или правилам, а наличие факта изменяемости сущности во времени. Теперь посмотрите на это с другой стороны: для работы с такими изменяющимися сущностями Вы имеете метамодель SQL-2003 (конкретные особенности или модель зависят от СУБД). Просто внешне, без детального анализа, попробуйте оценить, как в этой метамодели реализовать приведенные выше требования к сущностям? Легко увидите, что никак. По счастью, многие СУБД имеют расширенную метамодель (Oracle уже назывался), но даже и эта расширенная метамодель ничто иное, как костыли для SQL-2003. Какой вывод из сказанного? У Вас есть два варианта решения задачи: либо реализовать соответствующую темпоральную модель (причем, понимая, какие ограничения несет эта реализация), либо использовать комбинацию метамодель + модель (о чем г-н _мод и пишет). Все, никаких других вариантов в принципе нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 09:18 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
promptесли в olap данных сохранен факт проведения оплаты с соответствующими реквизитами, то на его основе можно выдать как информацию по 1 транзакции, так и консолидированную, например сумму проведенную для данного клиента за месяц.Разве не так? Дело ведь в гранулярности факта. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:26 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
karapetyan_aНе я первый, не я последний видимо задаю этот вопрос. Почитайте в книге «Проектирование баз данных» (Дейв Энсор, Йен Стивенсон) раздел, касающийся работы с временнЫми данными (temporal data) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 14:20 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Чтобы определиться с принципом структурирования временных данных, прежде всего нужно знать сценарии их использования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 14:30 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
SQL*Plus Почитайте в книге «Проектирование баз данных» (Дейв Энсор, Йен Стивенсон) раздел, касающийся работы с временнЫми данными (temporal data) Дык, насколько видно - это в контексте Оракла и его конкретных заточек. А если другая СУБД ? _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 14:35 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Ex_Soft SQL*Plus Почитайте в книге «Проектирование баз данных» (Дейв Энсор, Йен Стивенсон) раздел, касающийся работы с временнЫми данными (temporal data) Дык, насколько видно - это в контексте Оракла и его конкретных заточек. А если другая СУБД ?Там излагается общий подход, который можно применить не только с использованием Oracle. Почитайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 14:52 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
promptесли в olap данных сохранен факт проведения оплаты с соответствующими реквизитами, то на его основе можно выдать как информацию по 1 транзакции, так и консолидированную, например сумму проведенную для данного клиента за месяц.Разве не так? Дело ведь в гранулярности факта. Почитайте. авторВ-третьих, убедитесь в том, что внешние ключи в таблице фактов представляют собой правильные СУРРОГАТНЫЕ КЛЮЧИ. Другими словами, они должны иметь не тип даты/времени SQL, а быть бессмысленными целыми числами. Сопротивляйтесь любому искушению вложить какой-либо смысл или порядок сортировки в эти ключи!Про какую дату мы тогда говорим в OLAP? Я понимаю, что можно вставить дату в таблицу фактов, но это больше глупость, чем реальность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 16:58 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
To Bely У меня нет сомнения в том, что дата, какую бы она роль не играла, должны быть представлена в факте ТОЛЬКО посредством ссылки на размерность ДАТА. Когда писалось о реализации факта в данной задаче, имелась ввиду содержательная часть факта без уточнения деталей реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 17:36 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
SQL*Plus Там излагается общий подход, который можно применить не только с использованием Oracle. Почитайте. Глава 7. "Обработка временных данных" ? Дык все ж это уже озвучено. Ничего нового лично для себя я там не подчерпнул. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:29 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
promptTo Bely У меня нет сомнения в том, что дата, какую бы она роль не играла, должны быть представлена в факте ТОЛЬКО посредством ссылки на размерность ДАТА. Когда писалось о реализации факта в данной задаче, имелась ввиду содержательная часть факта без уточнения деталей реализации.А я говорю о том, что вы путаете задачи. Да, в обоих задачах есть понятие "срез по времени". Но это будут разные задачи и им требуются РАЗНЫЕ механизмы реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:31 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Ex_SoftГлава 7. "Обработка временных данных" ? Дык все ж это уже озвучено. Ничего нового лично для себя я там не подчерпнул.А вы думаете, что придете на форум, зададите вопрос, и вам сразу придумают супер прорыв в технологиях? Я об этом писал в 3 посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:35 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
To Bely: Укажите, пожалуйста, место в вопросе, которое однозначно отвергает решение через OLAP-методику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:39 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
Bely А вы думаете, что придете на форум, зададите вопрос, и вам сразу придумают супер прорыв в технологиях? Да не... Просто проверялось насколько то, что мы придумали согласуется с общепринятыми/общеприменяемыми подходами. Лисапет, конечно, не изобрели, но, как оказалось, шли в правильном направлении. Что и требовалось доказать. _________________ "Helo, word!" - 17 errors 56 warnings Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:42 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
promptTo Bely: Укажите, пожалуйста, место в вопросе, которое однозначно отвергает решение через OLAP-методику.авторtDept - таблица отделов - это дерево (DeptID = ParentID)хоть вот это. Дерево крайне плохо согласуется со STAR схемой. Да и цели у задач разные, что самое главное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:46 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
To Bely: Дерево может быть трансформировано в star схему. У OLAP цель - зарегистрировать исторический факт. Она противоречит цели этой задачи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:54 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
promptTo Bely: Дерево может быть трансформировано в star схему. У OLAP цель - зарегистрировать исторический факт. Она противоречит цели этой задачи?цель OLAP - проведение многомерного анализа. Регистрацией факта (транзакции) занимается OLTP. Цель задачи - получить состояние системы на любую указанную дату. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2009, 12:54 |
|
||
|
Адекватность данных во времени.......
|
|||
|---|---|---|---|
|
#18+
в olap есть понятие - Transaction-level fact tables (The DataWarehouse Toolkit, page 134). Они как раз и помогут решить поставленную здесь задачу. Там же описаны цели OLAP/DW - дать пользователю такую информацию и в таком представлении, чтоб он/она могли принять решение в отношении бизнеса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2009, 18:03 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1543381]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
157ms |
get tp. blocked users: |
2ms |
| others: | 221ms |
| total: | 486ms |

| 0 / 0 |
