Лучший способ хранить цены для операций

Рейтинг: 0Ответов: 1Опубликовано: 21.08.2023

Я делаю систему для учета продаж услуги. Услуга имеет разную длительность (например, 5, 10, 15 минут) и цену (например, 300, 450, 750). Я также храню записи об оплате услуги: дата, время цена услуги. (Упростил для более легкого понимания)

Если я буду хранить цены в отдельной таблице (price_list) и добавлять ссылку на них в таблицу с операциями (operations), то при изменении цены в price_list поменяются все цены в таблице operations и "отчет" по операциям будет некорректен.

Первая мысль была добавить колонку в price_list is_actual, чтобы применять к новым операциям айди актуальной записи с ценой и не терять стоимость предыдущих операций.

Также была мысль не привязываться к айдишнику из price_list, а вписывать стоимость статически в столбец price в таблице operations, но тогда я потеряю информацию о длительности услуги.

Эти подходы кажутся не лучшими из-за избыточности. Что можно придумать лучше в такой ситуации?

Ответы

▲ 1Принят

Нужно понимать, что записи об оплате услуг - это исторические данные, и в них нужно записывать ту цену, которая была фактически уплачена (она даже может не совпадать с ценой услуги на тот момент). При этом никто не мешает сделать ссылку на услугу для получения детальной информации о ней (тут, кстати, нужно учесть, что состав услуги тоже может меняться). "Первая мысль была добавить колонку в price_list is_actual" - это вполне рабочий вариант, тогда таблица с услугами будет хранить их историю. Модификацией этого варианта может быть использование исторических таблиц (temporal).