Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Услуги по тарифам и без них / 5 сообщений из 5, страница 1 из 1
31.10.2011, 08:23
    #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
31.10.2011, 08:31
    #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
31.10.2011, 09:15
    #37504756
LexNext
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Услуги по тарифам и без них
mad_nazgul Тариф используется только как справочник для заполнения поля cost.

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

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

Хотя ценообразование, по моему, лучше делать в чем-нибудь вроде 1С, где уже реализован принцип двойной записи.
Счета и прочее.
...
Рейтинг: 0 / 0
31.10.2011, 18:55
    #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]