Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.07.2012, 17:14
tadalex tadalex вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 21
Репутация: 10
По умолчанию Организация хранения данных

Подскажите, пожалуйста, как правильно и лучше организовать таблицу, для хранения информации о тарифах?
Есть тариф на определенную услугу (в денежном выражении), есть поставщик (или постащики услуги), у которых величина тарифа может быть разной. Кроме этого, со временем, возможны изменения тарифа (стал дороже или вдруг подешевел). Как правильно сформировать хранение и отображение данных о величине тарифа конкретного поставщика в какой-то определенный момент времени? Услуг может быть несколько, как и поставщиков. База локальная (на данный момент).
Ответить с цитированием
  #2  
Старый 22.07.2012, 18:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Чтоб небыло избыточности.
надо завести несколько таблиц и увязать их по ключам.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
tadalex (23.07.2012)
  #3  
Старый 22.07.2012, 19:10
tadalex tadalex вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 21
Репутация: 10
По умолчанию

У меня предусмотрены таблицы: Поставщики, Виды услуг и Тарифы. Этого достаточно? Если да, то что должно быть в таблице Тарифы? У меня пока ID Тарифа, Наименование, Величина (??? она же может изменяться), ID Поставщика, Дата регистрации, Дата изменения. Такое построение правильное или нет?
Спасибо за отзыв!
Ответить с цитированием
  #4  
Старый 22.07.2012, 20:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Зависит от того, надо ли тебе отслеживать историю изменения тарифа.
Ну с таблицами Поставщики и Услуги все понятно. У них есть ID и разная информация. Теперь о таблице Тарифы. В простейшем случае, когда ничего отслеживать не надо, то достаточно иметь ссылки на соотв. поставщика и услугу. Ну и текущую цену. Если история изменения нужна, то еще надо добавить даты начала и окончания действия услуги. Для текущей стоимости дата окончания будет NULL - это надо учитывать и в программе (когда будешь вводить изменение в эту базу, новую цену, тебе надо будет "закрыть" текущую запись и добавить новую) и во всех запросах. Кстати, для разрешения конфликтов, когда по какой-то причине периоды пересекаются, неплохо бы ввести время внесения последних изменений (считаем, что запись с макс. временем обновления более правильная).
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
tadalex (23.07.2012)
  #5  
Старый 22.07.2012, 21:15
tadalex tadalex вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 21
Репутация: 10
По умолчанию

Спасибо!
Суть вопроса в том, что мне нужно организовать учет и начисление по коммунальным услугам жильцам многоквартирного дома (точнее 3 дома).
Иногда возникает необходимость вернуться к старым значениям например, того же тарифа (предположим на тепло).
Вариант учета регистрации начала действия тарифа и его окончания в таблицу я ввел изначально, но пока не соображу, так же это все же будет работать?
Ответить с цитированием
  #6  
Старый 23.07.2012, 00:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от tadalex
Вариант учета регистрации начала действия тарифа и его окончания в таблицу я ввел изначально, но пока не соображу, так же это все же будет работать?

А в чем проблема?
Когда ты делаешь начисление, то тебе надо найти некоторый тариф на некоторую услугу. Допустим, нам известны: 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  
Старый 23.07.2012, 00:45
tadalex tadalex вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 21
Репутация: 10
По умолчанию

Спасибо! Завтра попробую. Вроде понятно.
Ответить с цитированием
  #8  
Старый 23.07.2012, 10:33
tadalex tadalex вне форума
Прохожий
 
Регистрация: 15.12.2010
Сообщения: 21
Репутация: 10
По умолчанию

Можно еще вопрос?
Я уже говорил выше, что мне нужно создать БД рассчета и учета коммунальных платежей в нескольких жилых домах. Я создал 10 таблиц:
Собственности,
Объекты,
Улицы (на перспективу расширения),
Виды услуг,
Поставщики услуг,
Тарифы,
Владельцы (владельцы Собственности или Объекта),
Счета,
Платежи,
Должники (??? нужна ли отдельная таблица?).
Скажите, правильный ли будет такой подход или я что упустил?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter