powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионные данные. Как?
21 сообщений из 21, страница 1 из 1
Версионные данные. Как?
    #33291531
Михаил Бор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Задача - заказчик хочет видеть версии записей всех основных таблиц. Скажем есть справочник товаров - первичный ключ артикул. Нужно иметь артикул и версия - все варианты этого артикула с указанием кто корректировал плюс все поля. Получается задача - все первичные ключи меняются на старые первичный ключ плюс версия. Внешние ключи теперь ссылаются на первичный ключ плюс версия и так далее. Нет ли методик построения таких схем данных?
Спасибо, Михаил
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33291615
Тяп-ляп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНужно иметь артикул и версия - все варианты этого артикула с указанием кто корректировал плюс все поляДля решения этой задачи
не нужно менять первичные ключи. При изменении строки сохраняй старый вариант в таблице истории (версии). Текущая версия - это из самого справочника.

P.S.
Артикул, к которому имеет доступ пользователь - очень плохой кандидат на первичный ключ.
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33291691
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33291866
Михаил Бор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! Артикул был выбран для примера! Примущества и недостатки суррогатных лючей известны. Содавать ещё архивную таблицу в которой всё равно придётся держать внешние ключи( на что - на то на архив мастера то на его архив?) Это только не решение!
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292248
Проходимец
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.rsdn.ru/article/db/dbhistory.xml


вот интересная статья...
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292459
Тяп-ляп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если тебе не хватает внешних ключей, я могу поделиться
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292487
Михаил Бор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем! За ссылки спасибо! Но должно быть простое решение. Давайте порассуждаем. В структуре бызы есть справочники и документы (всем понятно что это такое). В связанных справочниках хранятся ссылки на значения из других справочников. В документах сами значения. Пример - если в справ. товаров есть поле валюта, то в этом поле хранится значение внешнего ключа на спр. валют. Если произошло изменние названия валюты с "USD" на "Баксы" то при показе полбзователю строки товаров появятся баксы вместо usd. И это для справочников правильно. Для документа важно как называлась валюта в момент заполнения. Если мы в первичный ключ внесём номер версии, то в документе будет хранится ссылка на ключ спр. товаров (товар+версия) и всех справочников на которые он ссылается! Вроде не плохо получается! Почему этим никто не воспользуется?
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292510
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил

Если мы в
МБ> первичный ключ внесём номер версии, то в документе будет хранится
МБ> ссылка на ключ спр. товаров (товар+версия) и всех справочников на
МБ> которые он ссылается! Вроде не плохо получается! Почему этим никто не
МБ> воспользуется?

На мой взгляд протоколирование лучше иметь как отдельную состовляющую,
а не внедрять в рабочие структуры, хотя бы из соображений быстродействия.

--
Dik76

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292701
Михаил Бор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заводить архивную таблицу плохо и вот почему. Позиция документа должна содержать данные из справочника на момент оформления документа. То есть если эта позиция в справочнике была отредактирована, то ссылаться документ должен на старое значение. Если эти значения хранить в отдельной таблиице то построение внешних ключей не возможно - его (внешний ключ)нельзя "перекидыввать" с таблица на таблицу!
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292743
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил
То есть если эта позиция в справочнике была отредактирована, то ссылаться
МБ> документ должен на старое значение.
А как различать было сделано исправление ошибки оператора или произошло изменение данных?

--
Dik76

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292882
Михаил Бор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это хороший вопрос! Получется что в предлагаемом случае надо оператору руками (находясь в твердой памяти..) надо откорректировать и все документы где этот справочник юзался!
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33292944
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил
МБ> Это хороший вопрос! Получется что в предлагаемом случае надо оператору
МБ> руками (находясь в твердой памяти..) надо откорректировать и все
МБ> документы где этот справочник юзался!
Вот поэтому я и говорю о разделении.
Весь аудит изменений хранить в отдельной структуре,
а для актуальных данных предусмотреть изменение характеристик с указанием даты изменения.

Есть правда еще один вариант... хранить сформированный до изменения документ со всеми
старыми реквизитами, но это только мысли...

--
Dik76

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33293026
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил БорПочему этим никто не воспользуется?Поэтому:
авторА как различать было сделано исправление ошибки оператора или произошло изменение данных?

--
Dik76
Запись <с 15го числа для Id=14 название ="баксы" >
также может редактироваться, - ой т.е. "мегабаксы" .

В свое время Snodgrass один из организаторов центра темпоральных БД ввел для темпоральных данных поняти двух осей времени - назовем их предметной и административной. Предметная отражает события внешнего мира, а административная отвечает на вопрос кто и когда сказал мяу.
Предметную ось естественно отрабатывать в приложении.
Например в документе ссылка на валюту Id=14. В одних отчетах требуется показывать наименование валюты на дату документа, в других на дату изменения статуса документа, в третьих на дату начала периода отчета и т.д. Поэтому в документе не делают еще одно поле дата валюты, а используют одну из уже имеющихся дат для динамической связи запросами с историей наименований валюты.
Административную можно логами, или полями в справочниках, в простейшем случае
<с 15го числа для Id=14 название ="баксы", последним правил USER 25числа >
Очень важно понять, с какой осью вы в том или ином случае имеете дело.
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33293339
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А как различать было сделано исправление ошибки оператора или произошло
> изменение данных?

Легко.

> В свое время Snodgrass ввел для темпоральных данных поняти двух осей
> времени - назовем их предметной и административной.

А почему две? Осей может быть столько, сколько используется внешних источников. Например, те же валюты. Ввели евро. Изменения в официальном классификаторе валют (логично пользоваться им, поскольку это официальный легко доступный документ) появились позже инструкции ЦБ, которая, в свою очередь, появилась позже документов ЕвроЦБ (или как там он называется?). Вопрос: какую дату в каких случаях считать датой начала обращения евро? Фишка в том, чтобы при регистрации данных или регистрации изменений однозначно идентифицировать источник данных. Это серьезная проблема.
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33294090
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> А как различать было сделано исправление ошибки оператора или произошло
> изменение данных?

Легко.Спросить quot guest_20040621 :) guest_20040621

> В свое время Snodgrass ввел для темпоральных данных поняти двух осей
> времени - назовем их предметной и административной.

А почему две? Осей может быть столько, сколько используется внешних источников. Например, те же валюты. Ввели евро. Изменения в официальном классификаторе валют (логично пользоваться им, поскольку это официальный легко доступный документ) появились позже инструкции ЦБ, которая, в свою очередь, появилась позже документов ЕвроЦБ (или как там он называется?). Вопрос: какую дату в каких случаях считать датой начала обращения евро? Фишка в том, чтобы при регистрации данных или регистрации изменений однозначно идентифицировать источник данных. Это серьезная проблема. Накручивать можно много, в результате поля типа Дата могут составлять 90% полей. На упомянутом сайте полно статей по теме.

Ваш пример интересен, можно пофантазировать:
СправочникВалют(
Код,
ДатаАктуальностиДанных,
Наименование,
ДатаНачалаОбращения,
Основание,
ДатаОбновления,
КтоОбновил
)
UNIQUE (Код, ДатаАктуальностиДанных)

<приказом ... вступившим в силу с. 01-01. установлено, что обращение разрешено с 15-02.>
А затем <письмом ... , вступившим в силу с. 01-05. установлено, что обращение разрешено с 10-02.>
Товарищей, привлеченных к ответственности за нарушение приказа в период с 10-02 по 15-02 отпустить, но милиционеров, их арестовавших не наказывать.

Несомненно, обе даты нам нужны в прикладном смысле и находятся на прикладной оси.
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33294107
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, читать

Товарищей, привлеченных в период с 01-01по 01-05 к ответственности за нарушение приказа в период с 10-02 по 15-02 отпустить, но милиционеров, их арестовавших не наказывать.
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33294269
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Спросить guest_20040621

;) Ну так ведь из контекста понятно, что следует ввести сущность "тип изменения". Или bool поле. Всего и нужно - различать пару типов.

> Накручивать можно много, в результате поля типа Дата могут составлять
> 90% полей.

Понятно, что регистрировать можно все, что угодно. Хочу отметить, что важно понимать: у каждого изменения есть источник.

Был очередной тред о суррогратных ключах (если не путаю), там я пробовал рассказать о гранторах и пр., - на самом деле, близкие темы.

> На упомянутом сайте полно статей по теме.

За ссылку спасибо. На первый взгляд, очень интересно.

> Ваш пример интересен, можно пофантазировать

В Вашем примере Вы не сможете описывать другие валюты так же, как и евро. Т. е. чтобы структура была корректной, необходимы дополнительные сущности, которые принадлежали бы предметной области. О чем, собственно, и речь.

> Несомненно, обе даты нам нужны в прикладном смысле и находятся на
> прикладной оси.

Конечно. Но в одном случае (ВЭД) дата создания будет одной, в другом (наличные) - другой, в третьем (банковские счета; если помните, их можно было открывать, когда наличного евро еще не было) - третьей. Сущность - одна (валюта), а вот регистрировать ее обращение для разных предметных областей придется по разному. Так что одной оси - маловато. И фиксированного количества дат - тоже. ;)
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33294422
Templar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33294778
Dik76
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621

>> Спросить guest_20040621
g>
g> ;) Ну так ведь из контекста понятно, что следует ввести сущность "тип
g> изменения". Или bool поле. Всего и нужно - различать пару типов.

У себя я так и сделал, но гарантии, что тип указан правильно нет поскольку присутствует человеческий фактор.

--
Dik76

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33296113
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> но гарантии, что тип указан правильно нет поскольку присутствует
> человеческий фактор

Это уже вопрос не к структуре данных, а к информационной политике предприятия.
...
Рейтинг: 0 / 0
Версионные данные. Как?
    #33296420
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Несомненно, обе даты нам нужны в прикладном смысле и находятся на
> прикладной оси.

Конечно. Но в одном случае (ВЭД) дата создания будет одной, в другом (наличные) - другой, в третьем (банковские счета; если помните, их можно было открывать, когда наличного евро еще не было) - третьей. Сущность - одна (валюта), а вот регистрировать ее обращение для разных предметных областей придется по разному. Так что одной оси - маловато. И фиксированного количества дат - тоже. ;)Возможно я чего-то не понимаю в валютных делах, но эти даты - разные показатели (то ли атрибуты сущности Валюта, то ли экземпляры сущности СобытиеВалюты - разворачивать их по горизонтали или вертикали -отдельный вопрос). ДатаВЭД ведь не отменяет ДатуНаличных? Аналогично для документа дата регистрации не отменяет дату составления.
Вот если однажды ДатаВЭД для Евро меняется, то это темпоральные данные. Находясь на данной точке темпоральной оси система должна выдать единственное значение любого показателя. Все предшествующие отменены.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионные данные. Как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]