|
|
|
Различные способы реализации "истории изменений" в 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 |
|
||
|
|

start [/forum/topic.php?fid=32&startmsg=33633644&tid=1545325]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 456ms |

| 0 / 0 |
