|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Организация хранения данных
Подскажите, пожалуйста, как правильно и лучше организовать таблицу, для хранения информации о тарифах?
Есть тариф на определенную услугу (в денежном выражении), есть поставщик (или постащики услуги), у которых величина тарифа может быть разной. Кроме этого, со временем, возможны изменения тарифа (стал дороже или вдруг подешевел). Как правильно сформировать хранение и отображение данных о величине тарифа конкретного поставщика в какой-то определенный момент времени? Услуг может быть несколько, как и поставщиков. База локальная (на данный момент). |
#2
|
||||
|
||||
Чтоб небыло избыточности.
надо завести несколько таблиц и увязать их по ключам. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
tadalex (23.07.2012)
|
#3
|
|||
|
|||
У меня предусмотрены таблицы: Поставщики, Виды услуг и Тарифы. Этого достаточно? Если да, то что должно быть в таблице Тарифы? У меня пока ID Тарифа, Наименование, Величина (??? она же может изменяться), ID Поставщика, Дата регистрации, Дата изменения. Такое построение правильное или нет?
Спасибо за отзыв! |
#4
|
|||
|
|||
Зависит от того, надо ли тебе отслеживать историю изменения тарифа.
Ну с таблицами Поставщики и Услуги все понятно. У них есть ID и разная информация. Теперь о таблице Тарифы. В простейшем случае, когда ничего отслеживать не надо, то достаточно иметь ссылки на соотв. поставщика и услугу. Ну и текущую цену. Если история изменения нужна, то еще надо добавить даты начала и окончания действия услуги. Для текущей стоимости дата окончания будет NULL - это надо учитывать и в программе (когда будешь вводить изменение в эту базу, новую цену, тебе надо будет "закрыть" текущую запись и добавить новую) и во всех запросах. Кстати, для разрешения конфликтов, когда по какой-то причине периоды пересекаются, неплохо бы ввести время внесения последних изменений (считаем, что запись с макс. временем обновления более правильная). |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
tadalex (23.07.2012)
|
#5
|
|||
|
|||
Спасибо!
Суть вопроса в том, что мне нужно организовать учет и начисление по коммунальным услугам жильцам многоквартирного дома (точнее 3 дома). Иногда возникает необходимость вернуться к старым значениям например, того же тарифа (предположим на тепло). Вариант учета регистрации начала действия тарифа и его окончания в таблицу я ввел изначально, но пока не соображу, так же это все же будет работать? |
#6
|
|||
|
|||
Цитата:
А в чем проблема? Когда ты делаешь начисление, то тебе надо найти некоторый тариф на некоторую услугу. Допустим, нам известны: ID посвтащика услуги, ID услуги и дата. Тогда такой запрос вернет тебе нужный тариф: Код:
SELECT Price FROM Prices WHERE SupplyerID = :SupplyerID AND ServiceID = :ServiceID AND StartDt <= :CurrentDt AND (EndDt >= :CurrentDt OR EndDt IS NULL) ORDER BY UpdateTS DESC LIMIT 1 Если сервер не поддерживает LIMIT, то можно просто получить весь список и просто взять первую запись (если она есть). ЗЫ. LIMIT есть в Oracle и Postgree. В MS SQL Server это TOP, укащываемый, если не ошибаюсь, сразу после слова SELECT. Последний раз редактировалось lmikle, 23.07.2012 в 06:37. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
tadalex (23.07.2012)
|
#7
|
|||
|
|||
Спасибо! Завтра попробую. Вроде понятно.
|
#8
|
|||
|
|||
Можно еще вопрос?
Я уже говорил выше, что мне нужно создать БД рассчета и учета коммунальных платежей в нескольких жилых домах. Я создал 10 таблиц: Собственности, Объекты, Улицы (на перспективу расширения), Виды услуг, Поставщики услуг, Тарифы, Владельцы (владельцы Собственности или Объекта), Счета, Платежи, Должники (??? нужна ли отдельная таблица?). Скажите, правильный ли будет такой подход или я что упустил? |