powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как реализовать хранение по периодам?
11 сообщений из 11, страница 1 из 1
Как реализовать хранение по периодам?
    #37015127
Нафааня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Необходимо хранить нормы расхода ГСМ на определенный период (год, квартал, месяц).
Периоды могут пересекаться, то есть на год норма своя, сумма норм по месяцам за этот год не обязательно должна совпадать с нормой за год и тоже самое с кварталом.
+Необходимо хранить историю норм и обеспечить возможность задания норм на будущее.

Сейчас пока 3 идеи:
1)Реализовать с помощью двух дат:
begin_dt и end_dt

2)Создать таблицу period периодов (супертип):
period
-------------
id,
period_name,
period_type

и подтипы:

period_year
--------------------
period_id
year

period_quarter
--------------------
period_id
quarter
quarter_of_year

period_month
--------------------
period_id
month
month_of_year

3)Создать одну таблицу
nomr_on_period
---------------------------
norm
year
quarter
month

И в зависимости от периода заполнять соответствующие поля.
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37015193
Фотография lLocust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафааня,

а какие нормы приоритетнее??
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37015222
Нафааня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
lLocust,

Приоритетов нет. Это не фактические значения, а приблизительные данные(сколько примерно будет расходоваться ГСМ там-то в такой-то период), поэтому нормы нужно показывать используются в зависимости от выбранного периода. В основном это нужно для отчетности.
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37015279
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НафааняНеобходимо хранить нормы расхода ГСМ на определенный период (год, квартал, месяц).
Если это действительно так, могу предложить такой вариант:

ПериодКодНазваниеДата началаДата окончания
Норма расходаКодЗначениеКод периода
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37015345
Нафааня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
krvsa,

Большое спасибо!
Пока больше всех нравится:)
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37015407
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафааня , как вариант, вообще все в одну таблицу записать...

Код: plaintext
1.
2.
3.
4.
5.
6.
Норма расхода
Код
Название периода
Дата начала
Дата окончания
Значение
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37015412
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Норма расходаКодНазвание периодаДата началаДата окончанияЗначение
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37016220
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПериоды могут пересекатьсяКак раз этого делать не надо
Насколько я понял ваша задача в зависимости от даты и например вида топлива подтянуть значение
Проще всего это сделать как
Код: plaintext
1.
2.
create table fuel_consum (fuel_id int, fuel_value int, begin_dt date, end_dt date primary key fuel_id,end_dt)
select * from mytable m
join fuel_consum f  on m.fuel_id=f.fuel_id and m.fuel_date between begin_dt и end_dt
При этом вам надо обеспечить триггерами непересекаемость и/или последовательность интервалов чтобы условию соединения удовлетворяла одна (или ни одной ) запись, выбрать корректное значение самого первого begin_dt и самого последнего end_dt и т.д. ищите по теме хранение истории.
Другой отчет (по годам) будет джойнить с другой таблицей. Парой топиков выше была подробно показана неудачность идеи смешивать мух с котлетами т.е. засовывание разных справочников с одинаковыми полями в одну таблицу (преимуществ не видно, а недостатки могут вылезти).

Поэтому я за вариант 2 упрощенный - супертип нафиг не нужен, наименования периодов тоже, в каждую таблицу стоит добавить begin_dt и end_dt - вычисляемые, или с check на year, quarter или month
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37016569
Фотография lLocust
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257авторПериоды могут пересекатьсяКак раз этого делать не надо
Насколько я понял ваша задача в зависимости от даты и например вида топлива подтянуть значение
Проще всего это сделать как
Код: plaintext
1.
2.
create table fuel_consum (fuel_id int, fuel_value int, begin_dt date, end_dt date primary key fuel_id,end_dt)
select * from mytable m
join fuel_consum f  on m.fuel_id=f.fuel_id and m.fuel_date between begin_dt и end_dt
При этом вам надо обеспечить триггерами непересекаемость и/или последовательность интервалов чтобы условию соединения удовлетворяла одна (или ни одной ) запись, выбрать корректное значение самого первого begin_dt и самого последнего end_dt и т.д. ищите по теме хранение истории.
Другой отчет (по годам) будет джойнить с другой таблицей. Парой топиков выше была подробно показана неудачность идеи смешивать мух с котлетами т.е. засовывание разных справочников с одинаковыми полями в одну таблицу (преимуществ не видно, а недостатки могут вылезти).

Поэтому я за вариант 2 упрощенный - супертип нафиг не нужен, наименования периодов тоже, в каждую таблицу стоит добавить begin_dt и end_dt - вычисляемые, или с check на year, quarter или month

а я за таблицу с периодами (дата начала+дата конца) + приоритет..
т.е. для года он меньший чем, для квартала.. Для квартала он меньший чем, для месяца...
И выбираешь себе число из периода с наибольшим приоритетом. С одним и тем же приоритетом периоды пересекаться не должны.... Тогда все расширяется потом легко до недель, дней, .....
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37016835
Нафааня
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SERG1257Как раз этого делать не надо
В моей задаче норма расхода ГСМ это оценочное значение (например на основании статистики за прошлые года). Нормы могут вводиться на будущий год, причем их надо вводить на год, отдельно на каждый квартал и на каждый месяц. Все нормы вводятся и рассчитываются операторами/специалистами. И ситуация когда сумма норм за 12 месяцев <> сумме норм за 4 квартала <> норме за год вполне нормальна(для данной задачи). Поэтому интервалы могут пересекаться.
...
Рейтинг: 0 / 0
Как реализовать хранение по периодам?
    #37017301
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нафааня И ситуация когда сумма норм за 12 месяцев <> сумме норм за 4 квартала <> норме за год вполне нормальна(для данной задачи). Поэтому интервалы могут пересекаться.Да пофиг что там чему-то что-то не равно. Вопрос был как вы собираетесь использовать (запрашивать) эти интервалы. Я предположил (см пример) что разные запросы (по месяцам, по кварталам или по годам) запрашивают свои интервалы, lLocust предположил что в случае пересечения интервалов действуют к.л. приоритеты - т.е. фильтр делающий из нескольких записей одну.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как реализовать хранение по периодам?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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