Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как реализовать хранение по периодам? / 11 сообщений из 11, страница 1 из 1
15.12.2010, 10:17
    #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
15.12.2010, 10:41
    #37015193
lLocust
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать хранение по периодам?
Нафааня,

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

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

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
Норма расхода
Код
Название периода
Дата начала
Дата окончания
Значение
...
Рейтинг: 0 / 0
15.12.2010, 11:47
    #37015412
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать хранение по периодам?
Норма расходаКодНазвание периодаДата началаДата окончанияЗначение
...
Рейтинг: 0 / 0
15.12.2010, 15:30
    #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
15.12.2010, 17:01
    #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
15.12.2010, 18:46
    #37016835
Нафааня
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать хранение по периодам?
SERG1257Как раз этого делать не надо
В моей задаче норма расхода ГСМ это оценочное значение (например на основании статистики за прошлые года). Нормы могут вводиться на будущий год, причем их надо вводить на год, отдельно на каждый квартал и на каждый месяц. Все нормы вводятся и рассчитываются операторами/специалистами. И ситуация когда сумма норм за 12 месяцев <> сумме норм за 4 квартала <> норме за год вполне нормальна(для данной задачи). Поэтому интервалы могут пересекаться.
...
Рейтинг: 0 / 0
16.12.2010, 07:25
    #37017301
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как реализовать хранение по периодам?
Нафааня И ситуация когда сумма норм за 12 месяцев <> сумме норм за 4 квартала <> норме за год вполне нормальна(для данной задачи). Поэтому интервалы могут пересекаться.Да пофиг что там чему-то что-то не равно. Вопрос был как вы собираетесь использовать (запрашивать) эти интервалы. Я предположил (см пример) что разные запросы (по месяцам, по кварталам или по годам) запрашивают свои интервалы, lLocust предположил что в случае пересечения интервалов действуют к.л. приоритеты - т.е. фильтр делающий из нескольких записей одну.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как реализовать хранение по периодам? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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