powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Услуги по тарифам и без них
5 сообщений из 5, страница 1 из 1
Услуги по тарифам и без них
    #37504732
LexNext
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день!
Контрагентам могут оказываться услуги, как по тарифам так и без тарифов, т.е. стоимость услуги забивает в самом заказе. И вот что получается,
таблица заказа без тарифов:
Код: plaintext
1.
2.
3.
4.
order_id (p.k)
service_id (f.k.)
person_id (f.k.)
cost 
quantity ; количество оказанных услуг.

таблица заказов с тарифами:
Код: plaintext
1.
2.
3.
4.
5.
order_id(p.k.)
service_id(f.k.)
tariff_id(f.k.) ; добавляется это поле идентификатор
person_id(f.k.)
quantity 
и вот возникает дикий соблазн забить на нормализацию и объединить эти таблицы. Если услуга идет по тарифу, то поле cost остается пустым, если без тарифа, то поле tariff_id - остается пустым.
Или второй вариант, сделать общую таблицу с полями, а от неё унаследовать, те таблицы с различающимися полями.
Что подскажете?
...
Рейтинг: 0 / 0
Услуги по тарифам и без них
    #37504736
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexNextВсем добрый день!
Контрагентам могут оказываться услуги, как по тарифам так и без тарифов, т.е. стоимость услуги забивает в самом заказе. И вот что получается,
таблица заказа без тарифов:
Код: plaintext
1.
2.
3.
4.
order_id (p.k)
service_id (f.k.)
person_id (f.k.)
cost 
quantity ; количество оказанных услуг.

таблица заказов с тарифами:
Код: plaintext
1.
2.
3.
4.
5.
order_id(p.k.)
service_id(f.k.)
tariff_id(f.k.) ; добавляется это поле идентификатор
person_id(f.k.)
quantity 
и вот возникает дикий соблазн забить на нормализацию и объединить эти таблицы. Если услуга идет по тарифу, то поле cost остается пустым, если без тарифа, то поле tariff_id - остается пустым.
Или второй вариант, сделать общую таблицу с полями, а от неё унаследовать, те таблицы с различающимися полями.
Что подскажете?

Т.к. не знаю полностью не знаю всей задачи, но предлагаю оставить только первую таблицу.
Т.е. не разделять заказ по тарифу и без.
Тариф используется только как справочник для заполнения поля cost.
Соображения следующие - тарифы могут меняться, а суммы в заказах уже нет.
Заказ не должен зависеть от тарифов, т.к. некоторые работы могут быть как и по тарифу, так и не по нему.
...
Рейтинг: 0 / 0
Услуги по тарифам и без них
    #37504756
LexNext
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mad_nazgul Тариф используется только как справочник для заполнения поля cost.

Довольно-таки четкое и просто решение.
автор тарифы могут меняться, а суммы в заказах уже нет.
К сожалению, нет. Предположим месяц работали, работали, потом клиенту выставляется счет за оказанные услуги, и тут выясняется, что менеджер по клиентам ошибся в некоторых тарифах и их нужно поменять. При изменении тарифов нужно пройти все записи заказа с этим клиентом и поменять значение cost. Хотя с другой стороны все эти записи все равно придется обходить для изъятия поля quantity для вычисления итоговой стоимости.
...
Рейтинг: 0 / 0
Услуги по тарифам и без них
    #37505409
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexNextК сожалению, нет. Предположим месяц работали, работали, потом клиенту выставляется счет за оказанные услуги, и тут выясняется, что менеджер по клиентам ошибся в некоторых тарифах и их нужно поменять. При изменении тарифов нужно пройти все записи заказа с этим клиентом и поменять значение cost. Хотя с другой стороны все эти записи все равно придется обходить для изъятия поля quantity для вычисления итоговой стоимости.

На крайний случай можно сделать внешнюю таблицу (id заказа, id тарифа) (многие ко многим)
Т.к. в заказе могут быт несколько работ (например).
Но опять же это справочная информация. Только для удобства.

Хотя ценообразование, по моему, лучше делать в чем-нибудь вроде 1С, где уже реализован принцип двойной записи.
Счета и прочее.
...
Рейтинг: 0 / 0
Услуги по тарифам и без них
    #37505809
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LexNext При изменении тарифов нужно пройти все записи заказа с этим клиентом и поменять значение costИ вы меняете прошлое задним числом? (вырезана непереводимая игра слов с использованием местных идиоматических выражений)Честнее и прозрачнее будет оставить прошлое как есть и выставить еще один счет(или возврат)
По сабжу.
Хорошее годное решение, только не забудьте повесить CHECK ограничение на заполненность только одного из двух полей (tariff_id или cost)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Услуги по тарифам и без них
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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