|
|
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
Сразу скажу что я не большой специалист в проектировании баз данных, по крайней мере я так понял, когда просмотрел какими понятиями люди оперируют на форуме. Вот такая вот задача: Я начал работать в фирме, которая разрабатывает проекты для агенств по продаже недвижимости. Следовательно, структура базы данных уже существует и пока вопрос о замене и улучшении не стоит. Но, им надо сейчас добавить такие "фишки", как "история изменений", а в будущем "архивации" данных. Данные в базе можно ртазделить на 3 категории: (1). Медленно меняющиеся или вообще не меняющиеся (например адрес объекта). (2). В среднем темпе меняющиеся (раз или 2 в месяц). (3). Быстро меняющиеся (5-10 раз в неделю). Я тут просмотрел форум и решил реализовать такую модель: 1. для (1) и (2) варианта я создам общую таблицу для всех основных таблиц, в которую буду вносить само изменение(старое и новое), имя таблицы и поля, ключ, дату начала и конца. 2. для (3) варианта я буду использовать стандартный подход. Т.е. имеется таблица X, строится дополнительная таблица X_H, но в неё войдут только поля этого варианта, а не все. Так вот вопрос такой: Насколько реален такой подход, исходя из соображений performance? А также важна скорость реализации такой модели. Может для всех случаев использовать 2 вариант? Но надо учитывать, что на данный момент есть таблицы где > 80 полей и только 10% из них (3) варианта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2006, 20:53 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
Эту тему только вчера обсуждали, в ветке Логическое удаление записей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2006, 09:27 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
Сначала надо перейти от таблиц и полей БД к объектам и их атрибутам прикладной области. Вот тогда будет понятно что и как отслеживать. Например: проводка вообще никогда не изменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2006, 09:30 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
nnovЭту тему только вчера обсуждали, в ветке Логическое удаление записей Я читал эту тему вчера и даже поставил её в избранное, но там нет ничего о том что я спрашивал. У меня совсем другой вопрос был. Или... я чего-то не понял о какой части обсуждения ты говоришь. Сейчас приведу простой пример: Допустим у меня есть таблица из 100 полей. Допустим что названия полей такие - А1-А100. А1-А90 меняются очень редко. А91-А100 относительно часто. Есть 2 варианта: 1. 1 таблица, которая копирует структуру оригинальной + поля для журнала; 2. 2 таблица: - копирует только поля А91-А100 + поля для журнала; - общая для всех таблиц: поля для журнала + название таблицы + название поля + поле в котором будет хранится старое значение полей А1-А90. Т.е. на логическом уровне у меня будет небольшие дополнительные затраты по написанию кода. Но меня больше интересует, насколько долго будет выборка, если я, к примеру попытаюсь написать SQL, который принесёт мне все изменения от 1 числа месяца до 1 числа следущего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2006, 18:04 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
Поправка: 2. 2 таблицы: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2006, 18:05 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
модСначала надо перейти от таблиц и полей БД к объектам и их атрибутам прикладной области. Вот тогда будет понятно что и как отслеживать. Например: проводка вообще никогда не изменяется. Извини, но я не совсем понял вопроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.03.2006, 18:06 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragonСейчас приведу простой пример: Допустим у меня есть таблица из 100 полей. Ну во первых такая таблица наводит на мысль что данные не нормализованы GoldDragonДопустим что названия полей такие - А1-А100. А1-А90 меняются очень редко. А91-А100 относительно часто. Есть 2 варианта: 1. 1 таблица, которая копирует структуру оригинальной + поля для журнала; 2. 2 таблица: - копирует только поля А91-А100 + поля для журнала; - общая для всех таблиц: поля для журнала + название таблицы + название поля + поле в котором будет хранится старое значение полей А1-А90. Т.е. на логическом уровне у меня будет небольшие дополнительные затраты по написанию кода. Но меня больше интересует, насколько долго будет выборка, если я, к примеру попытаюсь написать SQL, который принесёт мне все изменения от 1 числа месяца до 1 числа следущего. Напишу еще раз, пока время есть итак если необходимо отслеживать факты изменений то заводи таблицу логов и обвешивай таблицы в которых необходимо отслеживать изменеия тригерами которые будут писать в таблицу логов кто когда и что менял. Если необходимо обеспечить версионность данных то я применяю такой способ. Таблица дополняется полями Date_Begin и Date_End (тип datetime) в которых хранятся значения соответственно начала действия и конца действия объекта При любом изменении атрибутов объекта Создается копия записи об объекте с изменеными данными и новым интервалом действия. Все изменения делаются процедурами. (Я вообще для себя за правило взял, на прямую данные в таблице никто менять не может, все таблицы доступны только по чтению) При таком подходе для получения данных на любой момент времени включая текущий момент времени данные выбираются с условием Date_Begin < now < Date_End Это общий принцип. Если тебе необходимо постоянно работать с историей изменения объекта введи дополнительный уникальный код, который присваивается при создании объекта и неизменяется на протяжении всей жизни. Это облегчит получение выборок по истории изменения объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 09:53 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon модСначала надо перейти от таблиц и полей БД к объектам и их атрибутам прикладной области. Вот тогда будет понятно что и как отслеживать. Извини, но я не совсем понял вопроса Это не вопрос а ответ. Любой объект хранится размноженным с привязкой к дате, т.е дата-состояние объекта на эту дату. + к этому журнал самих изменений по каждому атрибуту в отдельности. Т.о. всегда можно узнать состояние объекта на любую дату + аудит. К таблицам БД это не имеет отношения вообще. Грубо говоря все объекты могут лежать в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 10:18 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon Итого. В принципе я не вижу особых причин отходить от того, что Вы назвали "стандартным вариантом" для всех полей. По сути Вы пытаетесь выполнить некую своеобразную нормализацию исторической таблицы; если довести этот подход до абсурда, получится основная таблица и табличка истории изменений для каждого поля в отдельности. Из общих соображений - я не думаю, что "хранение повторяющихся данных" скажется на производительности сильнее, нежели необходимость строить достаточно сложные связи между таблицами. Относительно первого пункта Вашей модели - можете забыть о таких вещах как скорость и удобство работы с такими данными. Для того, чтобы эта структура была удачной, нужны весьма своеобразные задачи. Итого. Скорее всего я бы сначала оценил "стандартный вариант" - точнее, один из стандартных, с зависимой таблицей версий. Если окажется, что он таки неудачен по скорости выборки, например необходимо копировать большие тексты, я бы посмотрел на следующий вариант: [Таблица текущих данных] <------< [Таблица версий редко изменяемых данных] <------< [Таблица версий часто изменяемых данных] В такой структуре не будет ни большого дублирования, ни сложных связей. Надо будет только помнить одну вещь: при изменении данных, приводящему к появлению новой версии в первой таблице, надо будет также вставить новую запись (может быть, дублирующую старую во всех полях) во вторую таблицу, иначе потеряется сквозная временная ось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 10:21 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
softwarer Итого. В принципе я не вижу особых причин отходить от того, что Вы назвали "стандартным вариантом" для всех полей. По сути Вы пытаетесь выполнить некую своеобразную нормализацию исторической таблицы; если довести этот подход до абсурда, получится основная таблица и табличка истории изменений для каждого поля в отдельности. Из общих соображений - я не думаю, что "хранение повторяющихся данных" скажется на производительности сильнее, нежели необходимость строить достаточно сложные связи между таблицами. Я не совсем согласен с этим. Если бы все так думали, то мы до сих пор бы имели одни телеги. Зачем что-то улучшать если и так работает ;). Ноо.. я понял что ты хотел этим сказать. softwarer Относительно первого пункта Вашей модели - можете забыть о таких вещах как скорость и удобство работы с такими данными. Для того, чтобы эта структура была удачной, нужны весьма своеобразные задачи. Это понятно - поэтому и пытаюсь найти другой softwarer Итого. Скорее всего я бы сначала оценил "стандартный вариант" - точнее, один из стандартных, с зависимой таблицей версий. Если окажется, что он таки неудачен по скорости выборки, например необходимо копировать большие тексты, я бы посмотрел на следующий вариант: [Таблица текущих данных] <------< [Таблица версий редко изменяемых данных] <------< [Таблица версий часто изменяемых данных] Т.е. другими словами (только чтобы убедится что я тебя понял). Построить 2 таблицы для А->АА(10 полей + поля для журнала) и ААА(90 полей + поля для журнала): АА - копирует только поля А91-А100; ААА - копирует только поля А1-А90. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 18:23 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
nnov Это общий принцип. Вот потому что это общий принцип я и писал "поля журнала", имея ввиду то, что написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 18:25 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
nnov Ну во первых такая таблица наводит на мысль что данные не нормализованы Сам знаю что не нормализованны, но пока ничего не могу с этим поделать. Рано или поздно будет менять всю аппликицю, вот тогда и будем говорить о нормализации, а пока это то что есть :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 18:29 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragonЯ начал работать в фирме, которая разрабатывает проекты для агенств по продаже недвижимости. Следовательно, структура базы данных уже существует. кто? И***М? B*******D? коротенько - можно в почту... все может оказаться гораздо проще... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 21:22 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon(3). Быстро меняющиеся (5-10 раз в неделю) все, сам виноват - почел по диагонали на ранее заданный вопрос можно не отвечать. мимо кассы, очевидно - это не те... и не то :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2006, 21:25 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon Данные в базе можно ртазделить на 3 категории: (1). Медленно меняющиеся или вообще не меняющиеся (например адрес объекта). (2). В среднем темпе меняющиеся (раз или 2 в месяц). (3). Быстро меняющиеся (5-10 раз в неделю). Бросайте все это. Данные можно разделить только на 2 категории: "грязные данные", "чистые данные". Между ними стоит а-ля брендмауэр, который решает пускать-непускать. Во многих системах это называется Учетом или Posting. Вся отчетность и принятие решений только на чистых данных. Лучше потратить время на решение проблем планирования, прогноза, расчеты, usability системы и ,в конце концов, логику этого брендмауэра ,чем вычислять периодичность изменения данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2006, 00:51 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
iscrafm Бросайте все это. Данные можно разделить только на 2 категории: "грязные данные", "чистые данные". Между ними стоит а-ля брендмауэр, который решает пускать-непускать. Во многих системах это называется Учетом или Posting. Вся отчетность и принятие решений только на чистых данных. Лучше потратить время на решение проблем планирования, прогноза, расчеты, usability системы и ,в конце концов, логику этого брендмауэра ,чем вычислять периодичность изменения данных. С удовольствием брошу. Как только пойму что ты имел ввиду и какая свызь между тем, что я написал и тем что ты сказал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2006, 02:19 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
я хотел сказать, что заданные тобой вопросы возникают когда данные свалены в одну кучу. Поэтому когда человек видит в отчете совсем не ту цифру, которую он видел вчера - задает вопрос. Избавься от этой проблемы и не будет подобных вопросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2006, 02:46 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
iscrafmя хотел сказать, что заданные тобой вопросы возникают когда данные свалены в одну кучу. Поэтому когда человек видит в отчете совсем не ту цифру, которую он видел вчера - задает вопрос. Избавься от этой проблемы и не будет подобных вопросов. так просто??? а что можно сделать, чтобы избавиться от подобных ответов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2006, 09:25 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
YBW iscrafmя хотел сказать, что заданные тобой вопросы возникают когда данные свалены в одну кучу. Поэтому когда человек видит в отчете совсем не ту цифру, которую он видел вчера - задает вопрос. Избавься от этой проблемы и не будет подобных вопросов. так просто??? а что можно сделать, чтобы избавиться от подобных ответов? YBW, всегда, когда возникают подобные вопросы (постоянная фиксация и хранение изменений) нужно узнавать причину их возникновения. Логирование при любой правке не самое эффективное решение. Поэтому в большинстве случаев помогает устранение самого вопроса. А если уж влез, то и на твой вопрос ответ - пойти смотреть сериалы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2006, 13:20 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
iscrafm, Спасибо тебе за ответы, но я действительно не догоняю, что ты имеешь ввиду. Что именно убрать? Какую проблему? Сидит себе секретарша на телефоне, одним ухом слушает клиента, одним глазаом на телефон, другим на клавиатуру и печатает, то что клиент говорит. После этого - эта же секретарша или другая, связывается с агентом, который должен что-то сделать, неважно что и всё что говорилось между ними тоже заносится в базу данных. Короче, много чего заносится в базу данных и часто это происходит в быстром темпе. И как бы это секретарша не была бы квалифицирована, могут быть ошибки, которые будут исправляться. Изменения в цене на дом тоже могут быть. Многое чего может быть. А ты говоришь, что журнал изменений не нужен, если я правильно тебя понял. А что вместо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 20:10 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragonМногое чего может быть. а все ли из того, что "может быть" нужно хранить в истории изменений? существующая практика такова: 1 секретарь на телефоне не "печатает то, что клиент говорит", а регистрирует обращение клиента, как правило на основе анкеты, анкеты контекстны - по мере получения ответов формируется список последующих вопросов 2 по получении обращения производится первичная обработка обращения, это делает либо агент либо менеджер отдела, в зависимости от статуса клиента (обращения) 3 после предварительной обработки обращеия формируется заявка клиента, в случае необходимости уточняются дополнительные сведения 4 после оформления заявки клиента она размещается в системе учета - и только после этого может возникнуть необходимость сохранять историю изменений - много ли их будет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2006, 22:44 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
denied#land.ru 1 секретарь на телефоне не "печатает то, что клиент говорит", а регистрирует обращение клиента, как правило на основе анкеты, анкеты контекстны - по мере получения ответов формируется список последующих вопросов 2 по получении обращения производится первичная обработка обращения, это делает либо агент либо менеджер отдела, в зависимости от статуса клиента (обращения) 3 после предварительной обработки обращеия формируется заявка клиента, в случае необходимости уточняются дополнительные сведения 4 после оформления заявки клиента она размещается в системе учета - и только после этого может возникнуть необходимость сохранять историю изменений согласен denied#land.ru - много ли их будет? по пункту 1-3 немного - ты прав. А вот по пункту 4 достаточно много. Мы же здесь не говорим о системе учёта товаров, мы говорим о человеческом факторе. Мы говорим здесь об агентах, которые бегают с высунутом языком, чтобы найти продавца дома и стать его агентом. Мы говорим об агентах, который нашёл покупателя на этот дом и хочет продать этот дом с наибольшой выгодой для себя. И не обязательно эти 2 агента работают в 1-й фирме. Мы говорим о клиентах у которых могут быть 7 пятниц на неделе, то он может прийти или показать дом в этот день, то не может. То он здоров, то вдруг заболел, то он согласен на 1 цену, то на другую (из-за какой-то небольшой неполадки в доме) и т.д. и т.п. Поверь мне - этих изменений может быть много. Но, как я уже отмечал, таких полей 10%, а вот другие изменяются очень редко. Поэтому и возник у меня такой вопрос сделать 2 системы учёта: 1 для редкоизменяемых, а других - частоизменяемые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2006, 20:13 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon Поверь мне - этих изменений может быть много. Но, как я уже отмечал, таких полей 10%, а вот другие изменяются очень редко. Поэтому и возник у меня такой вопрос сделать 2 системы учёта: 1 для редкоизменяемых, а других - частоизменяемые. На мой взгляд, экономия нескольких мегабайт в БД не стоит усилий на синхронизацию и анализ исторических данных из 2-х таблиц. Есть еще один подход, вместо/вместе с полной копией записи с указанием что изменил тот-то тогда-то, пробегаться по всем/необходимым полям сравнивать старые и новы значения и писать лог вида: Код: plaintext 1. 2. 3. 4. 5. Используя группировки и сортировки, можно построить отчет, который с первого взгляда позволит понять, кто, что, на что и когда менял. Реализация всего этого достаточно нудная, но может вам и подойдет, чем показывать список исторических копий документов из которых непонятно чего изменилось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2006, 09:45 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
Еще для коллекции: 1) Лог (Estets , слегка изменены данные для сравнимости) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 2)Интервальная история Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Все представления логически эквивалентны. Выбор конечно зависит от набора запросов. Например таблица 4 плюс материализованное представление 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2006, 10:34 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragoniscrafm, Спасибо тебе за ответы, но я действительно не догоняю, что ты имеешь ввиду. Что именно убрать? Какую проблему? Сидит себе секретарша на телефоне, одним ухом слушает клиента, одним глазаом на телефон, другим на клавиатуру и печатает, то что клиент говорит. После этого - эта же секретарша или другая, связывается с агентом, который должен что-то сделать, неважно что и всё что говорилось между ними тоже заносится в базу данных. Короче, много чего заносится в базу данных и часто это происходит в быстром темпе. И как бы это секретарша не была бы квалифицирована, могут быть ошибки, которые будут исправляться. Изменения в цене на дом тоже могут быть. Многое чего может быть. А ты говоришь, что журнал изменений не нужен, если я правильно тебя понял. А что вместо? я тебе предлагаю решить эту задачу через интерфейсную таблицу и процедуру постинга. У тебя есть каталог недвижимости и есть интерфейсная таблица операций с этим каталогом. Между ними находится процедура, которая в зависимости от операции и разных дополнительных условий изменяет каталог. При этом записи в интерфейсной таблице и являются историей (журналом изменений). Введенные данные могут быть приняты и ,соответственно, на их основании выполняется модификация текущего состояния картотеки или отменены, если запись картотеки по каким-то причинам нельзя уже модифицировать. Интерфейсная таблица имеет туже структуру, что и рабочая картотека. Связываются по ID. Если в интерфейсной таблице ID пустое, то это новая запись. Также есть дата актуальности. Это достаточно простое в реализации решение, то оно избавит тебя от многих непредвиденных ситуаций, которые могут возникнуть, если ты будешь выстраивать схему от рабочей картотеки и где-то в тригерах анализировать зачем изменили значение того или иного поля и можно ли было это делать. А если можно и тригер ошибся или логикой пока не предусмотрена возникшая ситуация, а пользователь ввел кучу данных, которые в момент отката бесследно пропали? А так ты получаешь простой интерфейс и простой способ мониторинга изменений состояния картотеки недвижимости. Понятно, что история объекта - это набор записей в интерфейсной таблице связанный с карточкой объекта недвижимости по ID. Отчетность тоже простая. Для большего usabilyty можно поработать над мастером ввода данных, чтобы он предоставлял пользователю только те поля ввода, которые нужны для отражения в системе требуемых изменений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2006, 11:08 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
iscrafm, ModelR, Estets Ребята, честное слово, большое спасибо, что пытаетесь помочь мне. Но... у меня складывается ощущение, что вы не поняли саму суть вопроса или я что-то упускаю. Вернёмся к началу: Есть, то что я называю 2 стандартных решения организации системы учёта: 1. Каждое изменение поля заносится в таблицу + поля самого учёта (это то что вы ModelR, Estets написали в своём варианте). 2. Каждое изменении записи заносится в таблицу + поля самого учёта, как мне кажется - это то что предлагаешь ты, iscrafm. Я не говорил как я буду организовывать это: через тригерры или процедуру - это не важно. Вопрос который я пытался задать был другой: ИМЕЕТ ЛИ СМЫСЛ, использовать оба этих стандартных решения для таблиц или нет, и чем это чревато, кроме как более развёрнутая логика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.04.2006, 18:15 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
использовать, имхо, можно или первый или второй вариант. Во втором, имхо опять же, проще необходимая отчетность получается и им проще управлять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2006, 17:30 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
"По полям" - лучше, когда поля меняюся в разном темпе (дни, годы). Проще ответить когда и кто менял поле. "По записям" - лучше, когда объект рассматривается как целое. Любое изменение рассматриваеися как создающее новую версию; когда чаще запрашивают значения на дату чем дату значения. Т.е это хороший вариант для собственно оперативной работы. Итого, судя по по написанному, я бы взял за основу "По записям" , две таблицы на объект с постоянной и с исторической частью. Есть конечно вопрос, насколько загрузят систему запросы про кто и когда сказал мяу. Но это только Вы можете определить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 10:35 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon Вопрос который я пытался задать был другой: ИМЕЕТ ЛИ СМЫСЛ, использовать оба этих стандартных решения для таблиц или нет, и чем это чревато, кроме как более развёрнутая логика? Теперь я не понял вопрос. Имеет ли смысл использовать оба подхода одновременно ? На это вопрос вам боюсь ни кто не ответит. Поскольку никто не знает "Что и в каком виде" вы хотите получить в результате внедрения "исторического учета" Если надо быстро получить ответ на вопрос кто и когда исправил в договоре "эту сумму на эту", то стоит хранить изменение значений полей. Если нужно показать "договор таким как он был на 01.01.06" то легче хранить изменение всей строки таблицы. Если нужно и то и другое то и хранить надо все. Из своего опыта могу сказать что восновном использую подход описанный iscrafm . Вы судя по всему не совсем поняли что он предлагает, попробую описать как это выглядит у нас. Есть анкеты клиентов, исправление которых закрыто из интерфейса. Приходит клиент, или присылает документ в котором написано "Моя фамилия изменилась с Перова на Васечкина". Оператор вводит документ "Изменение анкеты клиента", гле выбирает действие: "Изменение" и анкету: "Петров А.А." Автоматом заполняются данные которые были в системе на момент внесения изменений. Фамилия "Петров", дата рождения, инн, адреса и пр. Оператор вносит изменение в поле фамилия и сохраняет документ. В данный момент в системе существует два набора данных "Анкета лица" с фамилией "Петров", и "Изменение анкеты" с фамилией "Васечкин". Документ "Изменение анкеты" хранит в себе "ID" изменяемого справочника, оператора, основание, Вх.-Исх. номера, комментарии. Потом происходит то что уважаемый iscrafm назвал "Процедурой постинга", а у нас называется "Подтверждением изменений". Оператор или контролер проверив правильность внесенной информации, подтверждает "Изменение анкеты" и данные переносятся в основную таблицу "Анкеты лиц" простым UPDATE. Вставка новой анкеты производится аналогично только оператор выбирает действие: "Вставка", а новая запись с анкетой вставляется а не изменяется. В результате мы имеем текущие данные в Анкете и историю изменений, из которых можно понять кто когда и на каком основании вставил/изменил/удалил данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 11:44 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
P.S. Не уверен, что для вашего вслучая этот подход подойдет. Это зависит от того как построен документооборот у вас. В нашем случае все внесения изменений данных "законодательно" должны регистрироваться, и воответственно происходят на основании подписанных клиентом документов, имеюжих вхоящую дату и номер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 11:49 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
iscrafmиспользовать, имхо, можно или первый или второй вариант. Во втором, имхо опять же, проще необходимая отчетность получается и им проще управлять. Теперь мы говорим по существу :) Допустим, мы используем 2-й вариант, тогда что у нас получится: 10% полей изменяется часто, другие - очень редко. Некоторые поля вообще имеют тип - ТЕКСТ. Т.е. 1 запись будет в райoне 1-2к. Т.е. в среднем будет добавлятся от 1М до 5М данных в день. Сам посчитай что получится через месяц. А история должна хранится от 5 до 10 лет, зависит от правил штата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 20:15 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
а...ты ж не забывай, что пишутся только изменения. Если текст менялся, то при любом раскладе его нужно записать в базу. А не менялся, то он и не будет место занимать. если тупо в лоб, то примерно это имелось ввиду в процедуре постинга: Код: plaintext 1. 2. 3. 4. т.е. неизменяемые поля заполнять не нужно когда вводится информация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2006, 20:52 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
А как тогда занулить поле? Старое 'xxx' , новое NULL. В источнике придется иметь флаги изменения для каждого поля. В источник также нужно той же транзакцией вернуть временнУю метку/последовательный номер. Т.е по сравнению с простой исторической таблицей технология несколько сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 10:09 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
Наверное обязательно в системе будут такие запросы: покажите мне каким был объект 01.01.2004 в 10:45:33. Или более того, нужно будет соорудить множество всех объектов на заданную точку времени.Если хранить историчность по полям - то это будет просто тихий ужас. Если по строкам - то более-менее все будет ворочаться. Взвесьте сначала какого типа тормоза нужны (и какой сложности) вам в вашей системе нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 10:19 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
ModelRА как тогда занулить поле? Старое 'xxx' , новое NULL. В источнике придется иметь флаги изменения для каждого поля. В источник также нужно той же транзакцией вернуть временнУю метку/последовательный номер. Т.е по сравнению с простой исторической таблицей технология несколько сложнее. я бы так сказал. Это несколько может и сложнее в плане интерфейса, но совсем немного. А зачем метки возвращать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 10:24 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
По-моему, организация хранения исторических данных зависит от самой концепции укладки классов в БД. Можно хранить каждый класс в отдельной таблице (ROT). Тогда хранение исторических данных можно организовать: 1) В виде отдельной "таблице изменений строк", либо "таблицей изменений ячеек" 2) В той же таблице, с признаком "актуальности", "времени действия" 3) Использованием темпоральных расширений выбранной СУБД 4) Теоретически - хитрой работой с журналом. В (1) будет дублирование данных, в (2) - сложная логика работы. (4) - не пробовал, вряд ли решение будет хорошим. Я выбрал бы (3), если не предполагается переходить с одной СУБД на другую. Можно хранить классы в структуре EAV. Тогда всё получается само собой, достаточно в таблице значений атрибутов добавить поля "актуальность" и "дата создания", а вместо изменения значения добавлять новое, а старое объявлять неактуальным. Делал, работает, логика не очень сложная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 12:46 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
iscrafmА зачем метки возвращать?Э.. я так понял, что в данном случае время фактического обновления основной таблицы и есть прикладное время, это же регистрация изменеий характеристик объектов недвижимости в "реальном" времени, а не бух проводки за позапрошлый месяц. Но даже если нет, административное время все равно необходимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 16:09 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
А как насчёт такой модели? Допустим, у нас есть таблица X. Строим 3 таблицы (не буду описывать сами поля, только смысл): X_Dates - хранится информация о времени изменения; X_Fast - только частоизменяемые поля; X_Slow - редкоизменяемые. Связи между ними 1 к 1-му. Я сейчас говорю о варианте, когда вся запись изменяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 23:13 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragonЯ сейчас говорю о варианте, когда вся запись изменяется. Т.е. не каждое изменение, полностью вся запись записывается. Только теперь это будет записываться в 2 таблицы данных и 1 таблица времени изменения. Если никакое поле, которое находится в 1-й из таблиц, не было заменено, то и запись туда не будет заносится, только во другую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 23:22 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
AlexTheRaven Можно хранить классы в структуре EAV. Тогда всё получается само собой, достаточно в таблице значений атрибутов добавить поля "актуальность" и "дата создания", а вместо изменения значения добавлять новое, а старое объявлять неактуальным. Делал, работает, логика не очень сложная. И что это за зверь такой? :) И где его найти можно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2006, 23:25 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragon AlexTheRaven Можно хранить классы в структуре EAV. Тогда всё получается само собой, достаточно в таблице значений атрибутов добавить поля "актуальность" и "дата создания", а вместо изменения значения добавлять новое, а старое объявлять неактуальным. Делал, работает, логика не очень сложная. И что это за зверь такой? :) И где его найти можно? Это такой принцип построения хранилища данных. Запусти в гугле EAV/CR, повываливается много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 10:05 |
|
||
|
Различные способы реализации "истории изменений" в 1-й базе данных?
|
|||
|---|---|---|---|
|
#18+
GoldDragonТ.е. не каждое изменение, полностью вся запись записывается. Только теперь это будет записываться в 2 таблицы данных и 1 таблица времени изменения. Если никакое поле, которое находится в 1-й из таблиц, не было заменено, то и запись туда не будет заносится, только во другую.Логически это тоже вполне нормальный вариант. Но выбор зависит чисто от количественных физических характеристик. Боюсь, что формул не найдете. Экспериментируйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2006, 10:21 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1545325]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 518ms |

| 0 / 0 |
