Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Принципы хранения тарифов в БД / 15 сообщений из 15, страница 1 из 1
16.01.2007, 18:13
    #34259692
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Посоветуйте какую структуру БД выбрать.
Есть определенные тарифные планы по основной услуге (н-р, подсчет интернет-трафика или еще чего-то), в которых учитываются различные параметры (время получения услуги, абонплата итд). Все это хранится в одной таблице Тарифы с полями Идентификатор тарифа, Абонплата, Цена единицы потребленной услуги днем, Цена единицы потребленной услуги ночью...
Затем появляется новая услуга, н-р, IPTV или игровые сервера. Для пользования ими есть несколько тарифов со своими параметрами (н-р, первый тариф-абонплата за доступ к просмотру видео или второй тариф-без абонплаты, но n руб за час просмотра).
Вопрос, как это реализовать в БД. Дополнить существующую таблицу тарифов данными об доп. услугах или создать новую таблицу для них (и для каждого пользователя выбирать по тариф основной услуги и тарифы по доп услугам, записывая идентификаторы тарифов в отдельные поля)? В первом случае не известно, что ставить для уже подключенных клиентов в поля для доп тарифов и число их увеличится в геометрической прогрессии. Во втором случае придется немного менять логику работы программ рейтинга.
Вопрос, как это правильно реализовать и предусмотреть возможность появления новых услуг.
...
Рейтинг: 0 / 0
16.01.2007, 18:46
    #34259801
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Тарифы - это большой и сложный вопрос. Насколько мне известно, идеальной структуры для тарифов - такой, которая подошла бы хотя бы в 95% случаев случайно выбранных услуг случайно выбранных фирм - никто еще не придумал.

В целом подход - вычленить все существенные показатели тарификации. То есть разобрать существующие тарифы и составить таблицу так, чтобы она позволяла описать любой имеющийся тариф и сколь можно надеяться - новые. После чего, когда маркетологи опять чего-нибудь выдумают, садиться и дополнять.

Скажу еще раз, задача очень и очень непростая. Скажем, представьте себе реализацию таких условий, как "оплата в рублях зачисляется по курсу <источник> на день, следующий за днем оплаты" или "при более чем 400 минутах международных разговоров в месяц на скидка на локальные звонки 30%".
...
Рейтинг: 0 / 0
16.01.2007, 21:05
    #34260036
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
softwarerТарифы - это большой и сложный вопрос. Насколько мне известно, идеальной структуры для тарифов - такой, которая подошла бы хотя бы в 95% случаев случайно выбранных услуг случайно выбранных фирм - никто еще не придумал.

В целом подход - вычленить все существенные показатели тарификации. То есть разобрать существующие тарифы и составить таблицу так, чтобы она позволяла описать любой имеющийся тариф и сколь можно надеяться - новые. После чего, когда маркетологи опять чего-нибудь выдумают, садиться и дополнять.

Скажу еще раз, задача очень и очень непростая. Скажем, представьте себе реализацию таких условий, как "оплата в рублях зачисляется по курсу <источник> на день, следующий за днем оплаты" или "при более чем 400 минутах международных разговоров в месяц на скидка на локальные звонки 30%".
При наличии только одной таблицы тарифов с множеством полей необходимо создавать очень много тарифов. Например, есть

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Тарифы
(тариф, цена Мб инет, абонплата за инет, абонплата за ftp, цена Мб ftp)
  т1         1             0                           0                           0 , 5 
  т2          1            0                           100                       0 
  т3          0            1500                       0                         0 , 5 
  т4          0            1500                       100                      0      
Клиенты
 (идентиф клиента, ид. тарифа)
кл1                          т2
Или
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Тарифы
(тариф, цена Мб инет, абонплата за инет)
  т1         1             0                       
  т4          0            1500                    
Тарифы FTP
(тариф, цена Мб инет, абонплата за инет)
 тфтп1     0                          100 
 тфтп2     0 , 5                        0                       
Клиенты
(идентификатор клиента, идентификатор тарифа за инет, идентификатор тарифа ftp)
кл1                                 т1                                          тфтп2
Какой из вариантов предпочтительнее и почему? В первом варианте при добавлении услуги нужно добавлять поля и присваивать клиентам значения по умолчанию, а он вообще может не нуждаться в этой дополнительной услуге и не подключал ее.
То есть нужно организовать хранение именно тарифов по доп. услугам.
Например, в сотовой связи можно подключить антиАОН и за него будет сниматься абонплата или,н-р, плата за количество срабатываний. Я думаю, они при этом не меняют мне тариф с того, где оба этих параметра были нулями, на кокой-то другой.... Интересует как это реализуется у них.
...
Рейтинг: 0 / 0
17.01.2007, 10:31
    #34260736
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Сейчас склоняюсь ко второму варианту... Также пока еще не решил, стоит ли хранить детализацию списания денег со счета списания производятся каждый час по триггеру на вставку в соответствующие таблицы (н-р,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 2007 - 01 - 17   15 : 00 ,  10  руб, трафик день
 2007 - 01 - 17   15 : 00 ,  0 , 5  руб, абонплата
 2007 - 01 - 17   16 : 00 ,  10  руб, трафик день
 2007 - 01 - 17   16 : 00 ,  0 , 5  руб, абонплата
 2007 - 01 - 17   16 : 00 ,  20  руб, выделение доп. адреса
 2007 - 01 - 17   16 : 30 ,  5  руб, подключение услуги
...
) или просто списывать с лиц. счета (одного для всех услуг) и хранить только детализацию платежей,а не списаний? Сильно ли это нагрузит базу?
PS: может есть у кого-нить ссылка на теорию по этим вопросам?
...
Рейтинг: 0 / 0
17.01.2007, 10:50
    #34260816
velfimov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
у казанных примерах не видно полей где описан диапазон действия тарифа
имхо надо, хотя бы для примерного пересчета при возхможном переходе на новый тариф
...
Рейтинг: 0 / 0
17.01.2007, 11:38
    #34261045
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Должна быть одна таблица с тарифными планами.
К ней одна таблица с самими тарифами, где будут указаны сроки действия, абонплата и т.д. И тип тарифа - чтобы можно было делать что-то специфическое. Хотя тип можно и в планы запихать.
И от тарифов таблица с тарифной сеткой - ну не жесткий же тариф, от суммы/объема может варьироваться, тут это и надо учесть.

======

У нас структура удовлетворяет 90% тарифам на почтовые пересылки всеми возможыми операторами и службами. Единственное - Почта России, вот у них не тарифы, а @#$%^&, да и сами они это слово :)

-- Tygra's --
Мои фотогалереи тут
...
Рейтинг: 0 / 0
17.01.2007, 12:10
    #34261208
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
tygraДолжна быть одна таблица с тарифными планами.
К ней одна таблица с самими тарифами, где будут указаны сроки действия, абонплата и т.д. И тип тарифа - чтобы можно было делать что-то специфическое. Хотя тип можно и в планы запихать.
И от тарифов таблица с тарифной сеткой - ну не жесткий же тариф, от суммы/объема может варьироваться, тут это и надо учесть.

======

У нас структура удовлетворяет 90% тарифам на почтовые пересылки всеми возможыми операторами и службами. Единственное - Почта России, вот у них не тарифы, а @#$%^&, да и сами они это слово :)

-- Tygra's --
Мои фотогалереи тут
Не совсем понял. Можете привести структуру таблиц? Таблица с тарифными планами это как я понял эта таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
Тарифы
(тариф, цена Мб инет, абонплата за инет, абонплата за ftp, цена Мб ftp, цена Мб > 200  и < 300 ,цена Мб > 300 )
  т1         1                    0                           0                            0 , 5          0 , 9            0 , 8 
  т2          1                   0                           100                         0            0 , 9             0 , 8 
  т3          0                   1500                       0                           0 , 5          0 , 9             0 , 8 
  т4          0                   1500                       100                        0            0 , 9              0 , 8 
К ней нужно добавить поля Дата введения тарифа, Срок действия (или дата окончания).
Еще есть таблица
Код: plaintext
1.
2.
3.
4.
Тарифы клиентов (история)
(Идентификатор клиента, тарифн план, даты подключения тарифного плана, дата окончания действия тар плана)
 111       т1             2006 - 01 - 01                    2007 - 01 - 01 
 111       т2             2007 - 01 - 01                   NULL
И таблица клиенты, в которой хранится последний выбранный тариф, чтобы каждый раз из предыдущей таблицы его не искать
Код: plaintext
1.
2.
3.
Клиенты
(Идентиф. клиента, имя клиента, тариф клиента из таблицы Тарифы)
   111 ,                      Иванов И.И.        т2

Что должно храниться в таблица с тарифными планами, только название и идентификатор тарифа, если все описания в др. таблицах?
...
Рейтинг: 0 / 0
17.01.2007, 13:09
    #34261473
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Код: plaintext
1.
Тарифный план:
Название, Дата_С, Дата-По, Тип
Код: plaintext
1.
Тариф:
Тарифный_План, Дата-С, Дата_По, Абонентская_плата (, Тип)
Код: plaintext
1.
2.
3.
4.
5.
Тарифная сетка:
Тариф, Значение_С, Значение_По, Стоимость, Тип (тип - это мегабайты меряете, или время или чего еще в этих расчетах, может оно и не нужно - только для совсем уж универссальных тарифов)
например: 
с  0  Мб по 300Мб -  10  копеек за кб
с  301  Мб по 500Мб -  8  копеек за кб
и т.д.
Что нам это все дает: сам по себе тарифный план, как название (напр. Стандартный) всегда один и тот же, его привязываем к юзеру и он висит на юзере всегда, пока тот его не поменяет. Далее, тарифы ведь меняются со временем - значит в табл. Тариф пишем запись для плана "Стандартный" с периодом действия. Новая стоимость - добавляем еще запись с новым тарифом и периодом действия, в старом тарифе меняем окончание периода. Как дата наступила, действует новый тариф, старый не действует. Менять можно в любое время, юзера никуда не надо перепривязывать - он как был так и остается на своем плане. Ну и для гибкой тарификации в зависимости от объема -это тарифная сетка.


-- Tygra's --
Мои фотогалереи тут
...
Рейтинг: 0 / 0
17.01.2007, 13:10
    #34261475
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Ну е-мое, перенести строку надо было

-- Tygra's --
Мои фотогалереи тут
...
Рейтинг: 0 / 0
17.01.2007, 14:56
    #34261941
velfimov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
tygraДолжна быть одна таблица с тарифными планами.
К ней одна таблица с самими тарифами, где будут указаны сроки действия, абонплата и т.д.
Связать эти таблицы через уникальный идентификатор
...
Рейтинг: 0 / 0
17.01.2007, 15:04
    #34261986
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
postuserТо есть нужно организовать хранение именно тарифов по доп. услугам.
Например, в сотовой связи можно подключить антиАОН и за него будет сниматься абонплата
Да, конечно, я не очень удачно сформулировал, использовать одну таблицу совершенно не обязательно и почти наверняка вредно. Пляшем мы от услуг (например, тот же антиАОН), на каждую услугу свой тариф или альтернативные тарифы. Тарифные планы - группируют услуги и тарифы, там есть свои тонкости, например при присвоении тарифного плана какие-то услуги считаются заведомо выбранными, какие-то подключаются дополнительно и опционально. Часто пользователь может отдельно заказывать услуги, не входящие в общий тарифный план; бывает, что услуга входит в один тарифный, не входит в другой, но может быть подключена к нему дополнительно. Бывает, что услуга не может быть подключена при данном выбранном тарифном плане. Итп.

Реально "тарификация в достаточно общем виде" - это отдельный модуль, большой и сложный. Да еще вдобавок критически важный и зачастую с требованием риалтаймовости - когда нужно, например, отключать предоставление услуги сразу по исчерпании баланса.
...
Рейтинг: 0 / 0
17.01.2007, 16:00
    #34262181
velfimov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
какие то проблемы явно с бизнес-анализом
Почему бы не провести анализ выделить объекты и связи между ними?
Тогда и не будет проблем с тем какие таблицы и сколько их должно быть и как между собой их связать
...
Рейтинг: 0 / 0
17.01.2007, 17:54
    #34262651
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
softwarer postuserТо есть нужно организовать хранение именно тарифов по доп. услугам.
Например, в сотовой связи можно подключить антиАОН и за него будет сниматься абонплата
Да, конечно, я не очень удачно сформулировал, использовать одну таблицу совершенно не обязательно и почти наверняка вредно. Пляшем мы от услуг (например, тот же антиАОН), на каждую услугу свой тариф или альтернативные тарифы. Тарифные планы - группируют услуги и тарифы, там есть свои тонкости, например при присвоении тарифного плана какие-то услуги считаются заведомо выбранными, какие-то подключаются дополнительно и опционально. Часто пользователь может отдельно заказывать услуги, не входящие в общий тарифный план; бывает, что услуга входит в один тарифный, не входит в другой, но может быть подключена к нему дополнительно. Бывает, что услуга не может быть подключена при данном выбранном тарифном плане. Итп.

Реально "тарификация в достаточно общем виде" - это отдельный модуль, большой и сложный. Да еще вдобавок критически важный и зачастую с требованием риалтаймовости - когда нужно, например, отключать предоставление услуги сразу по исчерпании баланса.

Именно это я и имел ввиду. Что есть тарифный план, группирующий услуги и есть услуги, которые не входят в тарифный план, но могут быть подключены.


velfimovкакие то проблемы явно с бизнес-анализом
Почему бы не провести анализ выделить объекты и связи между ними?
Тогда и не будет проблем с тем какие таблицы и сколько их должно быть и как между собой их связать

Попробую подробнее описать, что нужно.
Есть тарифные планы с предоплатой и есть кредитные тарифные планы (которые со скидками в зависимости от наработанных Мб в месяц).
Допустим есть тарифы:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Тарифный план "Стандартный"
Абонентная плата (включает в себя 100Мб трафика)  200  руб/мес
трафика в месяц, Мб	                      101 - 200  	 201 - 500  	 501 - 1000  	> 1000  	Свыше  10000  
дневного трафика с  06 - 00  до  00 - 00              2 , 90  	 2 , 20             2 , 10  	         1 . 2               1 . 1 
ночного трафика с  00 - 00  до  06 - 00  часов, руб/Мб	 1 , 2 

Доп. услуга "Игровой сервер"
Название                            Цена Мб               Абонплата
Game с абонплатой               0 , 1                           100 
Game без абонплаты              2                               0 
То есть параметры это:
Трафик (101-200,...,>1000)
Время
Абонплата

Цена Мб игрового трафика
Абонплата игрового трафика
Возможно, что отдел маркетинга введет ночные скидки на игровом, тарифицировать будут и вх и исх трафик и некоторые др. параметры.

Кроме этого еще нужно хранить стоимость перехода с одного тарифного плана на другой, стоимость подключения услуги (возможно с привязкой к тарифу, например, переход на Стандартный стоит 20 руб, переход на Выгодный 30 руб). И самое главное предусмотреть подключение новых услуг, которых изначально нет в тарифном плане.
...
Рейтинг: 0 / 0
17.01.2007, 20:34
    #34263016
mcureenab
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
Видел у других и сам дела так.

Создал таблицу крассификации данных вида (атрибут, критерий, порог, индекс, предок). PK(предок, порог).

Атрибут - имя атрибута услуги, который требуется классифицировать.
Критерий - индекс метода сравнения фактического значения атрибута услуги со значениями порогов в подчинённых записях. Метод возвращает значение поля индекс подходящей записи среди прямых потомков текущей записи.
Порог - пороговое значение атрибута для которого действует данный индекс.
Индекс - класс значений атрибута.
Предок - ссылка на родительскую запись.

Как это работает.

Находим в классификаторе корневую запись, которая не имеет предка.
Читаем имя атрибута из корневой записи и получаем его значение из CDR.
Применяем критерий. Метод критерия ищет среди прямых потомков подходящую запись, сохраняет её индекс в вектор и делает её текущей корневой записью и переходит к п.2.

В итоге получаем вектор индексов.

Создал таблицу тарифов. (значение индекса 1, ... значение индекса 10, формула, параметр1, ..., параметр10). PK (значение индекса 1, ... значение индекса 10).

Используя полученный на этапе классификации вектор индексов нахожу запись в таблице тарифов. В формулу передаю CDR и векрор параметров (параметр1, ..., параметр10). На выходе получаю цену и прочие результаты.

Т.е. сначала выполняем иерархическую классификацию данных услуги (по диапазонам значений), затем матричную (по индексам) и аналитическую (набор встроенных готовых и пользовательских процедур). Полагаю, удобнее иметь возможность чередования этих видов классификации но такую реализацию не видел.
...
Рейтинг: 0 / 0
18.01.2007, 08:30
    #34263434
postuser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Принципы хранения тарифов в БД
tygraНу и для гибкой тарификации в зависимости от объема -это тарифная сетка.
Скорее всего, буду реализовывать ваш вариант. Еще интересуют алгоритмы расчета по тарифной сетке. Это только для кредитных планов можно реализовать или для предоплатных тоже? Ведь в тарифе имеется наработка за месяц (расчетный период) при превышении которой будет считаться по более низкой цене, а в течении месяца это предусмотреть невозможно. Есть вариант каждый раз при скидывании данных в базу суммировать трафик по текущий день и пересчитывать суммы оплаты, но это сильно нагрузит базу (агрегирование по каждому клиенту за месяц). Поэтому думаю, это только для кредитных планов.
И вопрос с подключаемыми услугами, которых изначально нет в тарифном плане (у кого-то они могут быть включенными, у кого-то на этом же тарифе может их не быть, н-р, игровой сервер, потоковое видео итд, а создание отдельных планов, учитывающих все это приведет к сильному разрастанию их кол-ва) остается открытым... Пока в голову ничего не приходит как создание для них отдельных таблиц такой же структуры как и для основных тарифов и хранения в таблице клиентов сразу нескольких тарифных планов:
Код: plaintext
1.
2.
Клиенты
(id клиенты,id основного тарифного плана, id тарифного плана на игровой сервер, id тарифного плана на что-то еще)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Принципы хранения тарифов в БД / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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