Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / посмотрите плизз на структуру / 13 сообщений из 13, страница 1 из 1
20.01.2005, 17:48
    #32875612
масяня
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Tariffs - справочник тарифов
ServiceProviders - провайдеры услуг
Services - услуги
Abonents - абоненты
Providers_Services - связь между провайдерами и услугами
AbonentsServices - центральная сущность отражающая абонентов подписанных на определенные услуги по выбраному тарифу у определенных провайдеров.

Покритикуйте плизз ...
...
Рейтинг: 0 / 0
20.01.2005, 18:00
    #32875642
somebody___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
tariff_qualifier
tariff_uom
tariff_uom_conversion
service_qualifier
...
Рейтинг: 0 / 0
20.01.2005, 18:54
    #32875743
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Ну и чо...
Вы б хоть каки-нить SELECTы привели (в основном используемые), объяснение небольшое чиркнули. А то не хрена не понятно, чо смотреть, то.
...
Рейтинг: 0 / 0
20.01.2005, 19:20
    #32875782
масяня
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Ок, моя цель добиться ссылочной целосности.
бизнес транзакция такова:
происходит открытие счета:
логически:
вводятся данные абонента,
выбирается провайдер,
выбирается услуга провайдера,
выбирается один из тарифов услуги (тариф без услуги существовать не может)
->открыть счет
добавляется запись в Abonents (данные о абоненте)
добавляется запись в AbonentsServices - клиент подписался на услугу по определенному тарифу у выбранного провайдера.

оптимальна ли данная структура для такой ситуации ?
...
Рейтинг: 0 / 0
20.01.2005, 19:50
    #32875808
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Уважаемый Масяня
На мой скромный вгляд така схема неопитмальна. Вы попробуйте SELECTы пописать, сразу усе поймете. Если я захочу узнать например, какой провайдер у данного абонента, мне нужно щаращить череэ ээ... дайте посчитать... 5 таблиц. А более-менее оптмальном варианте 2-х было бы достаточно. Вот как Вы описали

Масяня
происходит открытие счета:
логически:
вводятся данные абонента,
выбирается провайдер,
выбирается услуга провайдера,
выбирается один из тарифов услуги (тариф без услуги существовать не может)
->открыть счет
добавляется запись в Abonents (данные о абоненте)
добавляется запись в AbonentsServices - клиент подписался на услугу по определенному тарифу у выбранного провайдера.


Так таблички и стройте...
...
Рейтинг: 0 / 0
20.01.2005, 20:16
    #32875831
масяня
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
andrushokВы попробуйте SELECTы пописать, сразу усе поймете. Если я захочу узнать например, какой провайдер у данного абонента, мне нужно щаращить череэ ээ... дайте посчитать... 5 таблиц.
Вы имеете ввиду
Код: plaintext
1.
2.
3.
4.
5.
select все что нужно по абоненту и по провайдеру from Abonents abn 
inner join (select AbnAccount, SrvProvider, ServiceID from AbonentsServices where AbnAccount =  1 ) abs
on abn.AbnAccount = abs.AbnAccount
inner join ServiceProviders sp
on sp.SrvProvider = abs.SrvProvider
?
...
Рейтинг: 0 / 0
20.01.2005, 20:49
    #32875856
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Не а,
Как например узнать какие абоненты у данного провайдера? Может я и не въехал где-то, или у Вас стрелочек на схеме не хватат...
...
Рейтинг: 0 / 0
20.01.2005, 20:52
    #32875859
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Да еще,
А что за поле тако Abonents int в табличке провайдеров. Число абонентов? Если так то странно - а что select count(*) ... низя пользовать?
...
Рейтинг: 0 / 0
20.01.2005, 20:59
    #32875864
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
И еще один момент - к конкретной схеме отношения не имеюший. Неплохо бы иметь табличку типа log, кудыб вся инфа складывалась, о том когда какой абонент какой сервис пользовал, чо менял, от чего отказывался. Потом пригодится сможет, если всяки дядьки/тетки из маркетинга (али из компетентных органов) наедуть...
...
Рейтинг: 0 / 0
21.01.2005, 09:35
    #32876225
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Что-то меня пугает большое количество составных первичных ключей. Подумайте, что у Вас будет с базой, когда в T_Providers_service что-либо изменится.У вас пойдет каскадный update по T_RefsTariff, T_abonentservice. Не исключено, что после этого база и ляжет.Неплохо бы, чтобы названия полей для простых смертных типа нас и по-русски были -):
...
Рейтинг: 0 / 0
21.01.2005, 13:08
    #32877034
масяня
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
2 andrushok
авторНе а,
Как например узнать какие абоненты у данного провайдера? Может я и не въехал где-то, или у Вас стрелочек на схеме не хватат...
Так в чем проблема - таблица T_AbonentsServices
по идентификатору провайдера:
Код: plaintext
select AbnAccount from T_AbonentsServices where SrvProvider =  10 
по названию провайдера:
Код: plaintext
1.
2.
select AbnAccount from T_AbonentsServices where SrvProvider = (select SrvProvider from T_ServiceProviders sp
inner join (select ContrAgentID from T_REF_ContrAgents where ContrgAgentName = "Название_Провайдера_1") ca
on  sp.ContrAgentID = ca.ContrAgentID)
авторДа еще,
А что за поле тако Abonents int в табличке провайдеров. Число абонентов? Если так то странно - а что select count(*) ... низя пользовать?
можно пользовать - узнаете сколько абонентов у определенного провайдера :)
но Вы ставили задачу:
авторузнать какие абоненты у данного провайдера
2 Shtock
автор... что у Вас будет с базой, когда в T_Providers_service что-либо изменится
в этой таблице ПК изменяться не будут, как и в родительских, однако именно составные ПК помогли обеспечить ссылочную целосность, ... хотя признаюсь именно кол-во составных ПК меня настораживало в схеме ...

По назв. полей: я могу все описать но нужно ли это ? интересуют именно отношения между таблицами, названия первичных ключей вроде понятно (в T_Abonents поле AbnAccount - ПК - счет абонента).
В T_ServiceProviders поле Abonents да кол-во абонетов, в T_Providers_Services поля SubscCnt, UnSubscCnt кол-во подписавшихся/отписавшихся от услуги, все остальные поля не суть важны (на самом деле я просто их забыл убрать)
...
Рейтинг: 0 / 0
22.01.2005, 00:39
    #32878281
andrushok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
Угу, посмотрел.
Вопрос такой - а шо один абонент может сразу иметь несколько сервичов у одного (или даже нескольких) провайдеров? Даже, если так, можно повторить записи об таком абоненте несколько раз (с разными ID разумеется). Если такой случай редкий - денормализация не повредит, а схема станет на порядок проще...
...
Рейтинг: 0 / 0
24.01.2005, 16:06
    #32880498
mef
mef
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
посмотрите плизз на структуру
тут ошибка в схеме - AbonentService должна вязаться к списку сервисов, тогда хопов не больше трёх в любую сторону. Плюс сотавные первичные ключи не нужны ИМХО вообще
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / посмотрите плизз на структуру / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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