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

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

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

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


Так таблички и стройте...
...
Рейтинг: 0 / 0
посмотрите плизз на структуру
    #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
посмотрите плизз на структуру
    #32875856
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не а,
Как например узнать какие абоненты у данного провайдера? Может я и не въехал где-то, или у Вас стрелочек на схеме не хватат...
...
Рейтинг: 0 / 0
посмотрите плизз на структуру
    #32875859
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да еще,
А что за поле тако Abonents int в табличке провайдеров. Число абонентов? Если так то странно - а что select count(*) ... низя пользовать?
...
Рейтинг: 0 / 0
посмотрите плизз на структуру
    #32875864
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще один момент - к конкретной схеме отношения не имеюший. Неплохо бы иметь табличку типа log, кудыб вся инфа складывалась, о том когда какой абонент какой сервис пользовал, чо менял, от чего отказывался. Потом пригодится сможет, если всяки дядьки/тетки из маркетинга (али из компетентных органов) наедуть...
...
Рейтинг: 0 / 0
посмотрите плизз на структуру
    #32876225
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то меня пугает большое количество составных первичных ключей. Подумайте, что у Вас будет с базой, когда в T_Providers_service что-либо изменится.У вас пойдет каскадный update по T_RefsTariff, T_abonentservice. Не исключено, что после этого база и ляжет.Неплохо бы, чтобы названия полей для простых смертных типа нас и по-русски были -):
...
Рейтинг: 0 / 0
посмотрите плизз на структуру
    #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
посмотрите плизз на структуру
    #32878281
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу, посмотрел.
Вопрос такой - а шо один абонент может сразу иметь несколько сервичов у одного (или даже нескольких) провайдеров? Даже, если так, можно повторить записи об таком абоненте несколько раз (с разными ID разумеется). Если такой случай редкий - денормализация не повредит, а схема станет на порядок проще...
...
Рейтинг: 0 / 0
посмотрите плизз на структуру
    #32880498
Фотография mef
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тут ошибка в схеме - AbonentService должна вязаться к списку сервисов, тогда хопов не больше трёх в любую сторону. Плюс сотавные первичные ключи не нужны ИМХО вообще
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / посмотрите плизз на структуру
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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