powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Периодические реквизиты справочников
5 сообщений из 30, страница 2 из 2
Периодические реквизиты справочников
    #34620660
sqllex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собраны подходы к хранению хронологических данных
http://www.arbinada.com/modules.php?name=News&file=article&sid=91
...
Рейтинг: 0 / 0
Периодические реквизиты справочников
    #34621600
NF
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NF
Гость
Я бы хранил каждый периодический реквизит в отдельной таблице вида

Реквизит(ДатаНачала, ДатаОкончания, IDРодителя, Значение)

Если ДатаОкончания не указана, значит ее или нет, или это ДатаНачала следующего значения минус 1 день (час/минута/секунда зависит от задач).

Например,
Клиент(Ид, НепериодическиеАтрибуты)
НДС(ДатаНачала, ДатаОкончания, ИдКлиента, Значение) - история работы клиентов с НДС (являлись плательщиками, не являлись).
Договора(ИдДоговора, ИдКлиента, ПрочиеАтрибуты) - история договоров (кто-то может сказать, что это не история, а простой справочник договоров, но я отвечу, что в данном случае это одно и то же, ведь договора тоже заключаются на временной шкале, значит имеет место история), в ПрочихАтрибутах я скрыл даты.
Почему мы не включаем все (!) атрибуты договоров сразу в справочник Клиентов? Потому что есть понятие нормализации, и мне даже в голову не приходит складывать все в одну таблицу. А разделяя отношения на более мелкие таблицы мы уходим от избыточности (в справочнике Клиентов лежат данные только о клиентах, записанные единожды и не повторяющиеся из кортежа в кортеж). Уж не знаю сколько милисекунд мы потеряем на соединениях, однако красота схемы заставит нас впасть в нирвану.

Почему бы я выбрал хранение каждого вида реквизита в отдельной таблице? Люблю порядок. Любая сущность реального мира должна быть представлена отдельной сущностью базы данных. И если я захочу выбрать НДС, то посмотрю нужное значение в таблице НДС. А вообще тут зависит от предметной области. Если периодических атрибутов слишком много, то возможно и правда удобнее хранить их в одной таблице, чтобы не загромождать схему, выставив предварительно в отношении признак ТипАтрибута (правда тогда надо будет еще сделать справочник ТипыАтрибутов, опять же чтобы избыточность не плодить).
...
Рейтинг: 0 / 0
Периодические реквизиты справочников
    #34624005
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NFЕсли ДатаОкончания не указана, значит ее или нет, или это ДатаНачала следующего значения минус 1 день (час/минута/секунда зависит от задач).

Будь проще. Прикинь как будут выглядеть SQL запросы со всеми этими заморочками! Заколебёшься предикаты выписывать.

NFПотому что есть понятие нормализации

Нормализация тут не при чём. Ты предлагаешь заменить большой повторяющийся блок данных коротким числом. Это не есть нормализация, поскольку эта процедура не имеет цели устранить какую либо функциональную зависимость. Это кодирование данных с целью уменьшения занимаемого ими объёма памяти и не более того.

NFоднако красота схемы заставит нас впасть в нирвану.

Боюсь, от такой красоты в нирвану впадёт СУБД и будет в ней пребывать неопределённо долго.

NFЕсли периодических атрибутов слишком много, то возможно и правда удобнее хранить их в одной таблице, чтобы не загромождать схему, выставив предварительно в отношении признак ТипАтрибута (правда тогда надо будет еще сделать справочник ТипыАтрибутов, опять же чтобы избыточность не плодить).

Это EAV со всеми вытекающими последствиями.
...
Рейтинг: 0 / 0
Периодические реквизиты справочников
    #34624112
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NFПочему бы я выбрал хранение каждого вида реквизита в отдельной таблице?Про хранение в одной таблице и в многих таблицах - много было сказано здесь
...
Рейтинг: 0 / 0
Периодические реквизиты справочников
    #34625947
AlexTheRaven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
izoldov-roskini<...>1. Все хранить в один столбец с указанием id-реквизита, дата, значение (недостаток, чтобы получить строку со всеми реквизитами, нужно выполнить n-число запросов); Я когда-то использовал именно этот способ. Причём без даты "до". Вполне прилично работало.
izoldov-roskini
2. Хранить все ревизиты как колонки отдельной таблицы id,дата, рекв1,.... рекв-n.( недостаток, увеличение кол-ва данных, если пользователь меняет один реквизит на новую дату, то должны взяться последние до этой даты и продублироваться, зато скорость выше, 1-запрос - вся строка с реквизитами). <...> Если количество и состав реквизитов изначально известны, а реквизиты изменяются все вместе, как курсы валют ММВБ - хороший способ. Если не все вместе, часто, да ещё и количество и состав их изменяется - так себе способ, таблица будет быстро расти. Хотя, учитывая современное железо и СУБД, система даже таким способом сможет хранить информацию за достаточно длительный период времени, может, этого для решения Вашей задачи вполне достаточно.

А вообще Вам нужно поискать по словам "хранение темпоральных данных", "темпоральные БД".
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Периодические реквизиты справочников
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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