|
|
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Столкнулся с трудностями при проектировании ИС для телекоммуникационного бизнеса. Существуют сущность "Инцидент" - простыми словами жалоба от абонента или партнера тел. компании. Также имеются такие сущности как: "Абонент" - абонент телекоммуникационной компании. "Партнер" - компания-оператор, с которой имеется общий канал связи. "Сотрудник" - сотрудник компании. "Инцидент" имеет такие ключевые атрибуты как "инициатор" (тот, от кого поступила жалоба) и "ответственный" (тот, кто будет разбираться с жалобой). Примерная структура этих сущностей: Инцидент column_name data_type comment incident_idintegerID инцидентаinitiator_idintegerID инициатор (FK)initiator_idintegerID ответственного (FK)expltextописаниеstatusintegerстатус FK - наследуемый ключ Абонент column_name data_type comment customer_idintegerID абонентаobject_idinteger ID объектаcontractvarcharномер договораnamevarcharимяaddresstextадрес Партнер column_name data_type comment partner_idintegerID парнтераnamevarcharимя Сотрудник column_name data_type comment employee_idintegerID сотрудникаdep_idintegerID отделаnamevarcharимяphonevarcharтелефон В силу особенностей процесса обработки инцидентов телком. бизнеса "инициатором" может являться любое лицо из "Абонентов" , "Сотрудников" , и "Партнеров" , и в свою очередь, "ответственным" может являться как "Сотрудник" , так и "Партнер" компании. Т.е. моей целью является такой вариант, когда при регистрации инцидента в БД можно назначать "инициатором" и "ответственным" любого из этих лиц, но хранить всех "инициаторов" и "ответственных" в одной таблице было бы нецелесообразно. Я предполагаю что должны появиться отдельный таблицы "инициатор" и "ответственный" , но не могу понять как через них увязывать "партнеров" , "сотрудников" и "абонентов" . Каким образом правильно сформировать структуру БД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2007, 14:05 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Maxim Volkomorov Каким образом правильно сформировать структуру БД? Ну насчет "правильно" - не знаю. Простой вариант - иметь таблицу субъектов, которая заполняется автоматически (триггерами или подобным образом) при модификации абонентов, партнеров, сотрудников и содержит колонки идентификатор и тип. Ну а в инциденте уже ссылаться на нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2007, 16:06 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Вопрос на засыпку: Может ли сотрудник являться одновременно абонентом? Кроме того, под партнером обычно подразумевают юридическое лицо, но инцидент по идее должно формировать физическое лицо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2007, 16:18 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Ну насчет "правильно" - не знаю. Простой вариант - иметь таблицу субъектов, которая заполняется автоматически (триггерами или подобным образом) при модификации абонентов, партнеров, сотрудников и содержит колонки идентификатор и тип. Ну а в инциденте уже ссылаться на нее. Нельзя ли по подробней описать это предложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2007, 17:12 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
ITGOODВопрос на засыпку: Может ли сотрудник являться одновременно абонентом? Кроме того, под партнером обычно подразумевают юридическое лицо, но инцидент по идее должно формировать физическое лицо... Сотрудник не может являться абонентом. Инцидент может быть инициирован любым субъектом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2007, 17:13 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Рассмотрите следующий вариант. Идентификаторы объектов у Вас типа integer. Генерите их уникальными в пределах БД, а затем Код: plaintext 1. 2. 3. 4. Ваша, вполне правильная, идея с «ролевыми» таблицами «инициатор» и «ответственный» тоже требует уникальности идентификаторов объектов в пределах БД. Успехов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 00:12 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
эээ ... не понимаю затруднений, честно говоря ... я бы сделал так: 1. вынес бы общие поля из "Абонентов", "Сотрудников", и "Партнеров" в отдельную таблицу - как можно больше ... кроме ID и Name c огромной вероятностью это могут быть и "адрес" и "телефон" (о возможных проблемах - http://sql.ru/forum/actualthread.aspx?tid=383985&pg=1) 2. завязал бы ее на "Инцидент" на "инициатор" и на "ответственный" ... не понимаю зачем нужны (в том объеме кот был озвучен) таблицы "инициатор" и "ответственный" ... теперь если для на клиенте для отображения информации по инциденту достаточно будет "общих полей" - дело сделано ... если же ты хочешь в каждом отдельном случае вытаскивать фсю информацию либо по "Абонентов", либо "Сотрудников", либо "Партнеров" - приседаний будет больше, но все решаемо ... и лично для меня - легко, и ИМХО это становится больше вопросом пользовательского интерфейса на клиенте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 06:48 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Maxim Volkomorov Нельзя ли по подробней описать это предложение? Создем таблицу: Код: plaintext 1. 2. 3. 4. На таблицы Абонент, Партнер, Сотрудник вешаем триггера, которые при вставке и удалении записей из этих таблиц делают аналогичную операцию с таблицей faces. Заботимся о том, чтобы идентификаторы в таблицах Абонент, Партнер, Сотрудник не совпадали (то есть берем их оз одной последовательности, или выделяем разные диапазоны). Поcле этого в таблице Инцидент прописываем ссылки на таблицу субъекты. При этом обеспечивается ссылочная целостность. Ну а в интерфейсе для выбора инициатора (или ответственного) придется делать что-то специфическое. При желании можно таблицу Субъектов расширить (добавить в нее имя и другие общие реквизиты). Убирать при этом имя из основных таблиц не нужно - в данном случае дублирование данных не вредно. Но надо позаботится об актуализации этого поля триггерами. В этом случае выбор инициатора в интерфейсе можно будет упростить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 09:25 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
TO Bogdanov Andrey: полностью поддерживаю Ваш подход.У нас раньше так было сделано. Правда данный подход не обеспечивает один из базовых принципов разработки современных систем-любая внешняя сторона,каким либо образом взаимодействующая с бизнесом должна быть зарегистрирована единажды и не повторяться, а тут придется их вводить заново абонента, партнера и прочего есл он вдруг станет кем-то другим (например, абонет станет партнером)и как-то с друг другом при последующем анализе объединять,но зато впихнуть в имеющуюся систему очень просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 09:40 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
ShtockПравда данный подход не обеспечивает один из базовых принципов разработки современных систем-любая внешняя сторона,каким либо образом взаимодействующая с бизнесом должна быть зарегистрирована единажды и не повторяться Принцип этот полностью поддерживаю (можно легко предложить и реализацию для данного случая), но к большому сожалению, в реальной жизни выдержать этот принцип не удается. Несмотря на все усилия программистов одно и то же лицо оказывается зарегистрированным дважды, трижды и т.д. (вот прямо сейчас пытаюсь понять, как же мне объединить все записи об одних и тех же лицах, если некоторые из них заведены аж по сорок раз). Честно говоря, мне бы никогда в голову не пришли те способы искарежить наименование, которые используют пользователи. Ну как можно одно и то же название организации (из двух слов) написать восемнадцатью разными способами? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2007, 10:03 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey<...>Принцип этот полностью поддерживаю (можно легко предложить и реализацию для данного случая), но к большому сожалению, в реальной жизни выдержать этот принцип не удается. Несмотря на все усилия программистов одно и то же лицо оказывается зарегистрированным дважды, трижды и т.д.<...> Просто в БД должен быть всего лишь один оператор, которому разрешено заводить новых субъектов (если субъектов много - делить между операторами по территориальному или ещё какому-нибудь принципу). И платить этому оператору нужно как начинающему программисту - просто за аккуратность в рутинной работе. Но при этом он должен быть материально ответственным за порядок в БД. Как вариант - заводить нового субъекта должно быть долго и сложно, а искать среди существующих - быстро и просто. Как ещё один вариант (достаточно сложный в реализации) - система должна переспрашивать при вводе нового оператора: "похожий уже существует, действительно создать?", и выдавать список субъектов, отличающихся всяческими мелочами (с точки зрения человека) - знаками препинания, пробельными символами, названиями форм собственности, городом в названии, транслитом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 13:50 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
AlexTheRaven Просто в БД должен быть всего лишь один оператор, которому разрешено заводить новых субъектов (если субъектов много - делить между операторами по территориальному или ещё какому-нибудь принципу). Ну это вариант только для автоматизации домашнего бизнеса. Например, возмем банк - пришел человек в отделение вклад себе открыть - операционист что должен ждать, когда какой-то "оператор" в головной конторе соизволит физлицо завести? Или все-таки сам заведет? А завтра этот же человек в другое отделение придет (может быть на другом конце страны) и откроет еще один счет? А если отделение в offline работает с последующей репликацией? И для того же "телекоммуникационного бизнеса", который был в заголовке наверняка есть несколько точек продаж услуг абонентам. AlexTheRaven Как вариант - заводить нового субъекта должно быть долго и сложно, а искать среди существующих - быстро и просто. Мысль забавная - специально сделать "сложный" интерфейс заведения субъектов, чтобы никто им не пользовался. Интересно много ли вы программных продуктов продадите со "специально усложненным" интерфейсом? Почему-то большинство производителей наоборот за эргономику борются. Учтите, что в большинстве случаев после неудачного поиска заводить нового субъекта все-равно придется. AlexTheRaven Как ещё один вариант (достаточно сложный в реализации) - система должна переспрашивать при вводе нового оператора: "похожий уже существует, действительно создать?", и выдавать список субъектов, отличающихся всяческими мелочами (с точки зрения человека) - знаками препинания, пробельными символами, названиями форм собственности, городом в названии, транслитом. Это единственный стоящий вариант. Правда сделать достаточно интеллектуальный механизм сравнения строк, да еще достаточно быстрый - непросто. Скажем за какое время вам удастся из базы, содержащей хотя бы сто тысяч юрлиц выбрать все наименование которых отличается не более чем в двух символах? А что делать с физлицами которых у меня вот 2 миллиона? Еще раз повторю - я согласен с принципом не дублировать в базе информацию о субъектах, но не видел ни одной системы, которой удалось бы воплотить этот принцип в жизнь на нормальных объемах данных. Хотя видел системы, которые стремились к этому (к несчастю, пока недостижимому) идеалу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 15:11 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Сейчас как раз переводим на единый реестр субъектов нашу старую систему и пишем как раз ту самую интеллектуальную искалку.система банковская,но только по учету ценных бумаг,поэтому записей субъектов тысяч пять.немного портит жизнь то,что по каждой лицензии у субъекта еще тоже может быть разное наименование, например так он оао "рога и копыта", по депозитарной "Депозитарий АОА "Рога и копыта"" и прочее прочее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2007, 18:24 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Мы использовали для аналогичного решения такой подход: Клиенты, сотрудники и партнеры, которые могут инициировать инцидент - это люди. Даже если партнер или клиент - юридическое лицо, то все равно есть ограниченный круг лиц, которые могут взаимодействовать с вами (уборщица де-юре и де-факто не может генерить инциденты для Вас). Соответсвенно, есть таблица (person), хранящая данные физических лиц (ФИО, тел. и т.п.). Все эти люди, привязаны к некой структуре, которая отображает оргструктуру предприятия (для сотрудников), структуру клиентов, структуру партнеров. Это может быть несколько разных структур. Инициатором может быть кто угодно из person. Кроме того, в person есть связь с пользовательскими аккаунтами, т.о. можно давать доступ к системе клиентам и партнерам (при необходимости). Если у Вас уже работающая система в которой люди отдельно зарегистрированы в клиентах, сотрудниках и партнерах (или похоже), то ситуация не очень хорошая, т.к. при развитии системы можно столкнуться с определенными трудностями. Можно создать рабочую табличку с синхронизацией на тригерах, как описано выше, но это не очень хороший путь. Можно привязать к партнерам/клиентам табличку физических лиц и связывать ее вьюшкой с табличкой сотрудников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 01:15 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Еще. Если интересно, как это делать идеологически правильно - посмотри HP OV ServiceDesk. Поделие, конечно кривое с точки зрения технической реализации, но идеологически очень правильное. Если внимательно его изучить, то можно избежать очень многих граблей при разработке и развитии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 01:20 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyА завтра этот же человек в другое отделение придет (может быть на другом конце страны) и откроет еще один счет? Хе-хе... Если бы я хотел открыть еще один счет в том же самом банке, то очень обиделся бы (на банк), если бы меня "распознали" как уже имеющего один счет. Пример выбран неудачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 12:10 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Не надо мыслить реляционно - начните мыслить объектно (но в рамках реляционной модели) :-) Абонент, Партнер, Сотрудник - объекты порождающие событие "Инцидент" Общее в "Абонент, Партнер, Сотрудник" - это основные объекты в данной преметной области и по крайней мере у каждого объекта однотипный ID Заводим таблицу - реестр объектов ID = ID объекта (Абонент, Партнер, Сотрудник) и тип объекта, т.е. при добавлении, удалении "Абонент", "Партнер", "Сотрудник" добавляется или удаляется запись в этой таблице. Таким образом имея таблицы "Абонент", "Партнер", "Сотрудник" мы можем работать в рамках классической реляционной модели, обрабатывая специфические поля каждой из них "Реестр объектов" (единое пространство объектов предметной области) позволяет при использовании например таблицы "Инцидент" реализовать требуемый бизнес-процесс. Если хорошо подумаете (сгрупируете события и их взаимосвязанные цепочки) то не только этот бизнес-процесс ... ________________________________________________________________________________ ... Как что достать - вторая эскадрилья. А как самолеты сбивать - первая эскадрилья ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 12:42 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey AlexTheRaven<...>(если субъектов много - делить между операторами по территориальному или ещё какому-нибудь принципу). Ну это вариант только для автоматизации домашнего бизнеса. Например, возмем банк - пришел человек в отделение вклад себе открыть - операционист что должен ждать, когда какой-то "оператор" в головной конторе соизволит физлицо завести? А в чём противоречие? Выделяете операциониста, ответственного за порядок при вводе, в каждом отделении. А в БД запоминаем его логин для каждой заведённой записи. Bogdanov Andrey Или все-таки сам заведет? А завтра этот же человек в другое отделение придет (может быть на другом конце страны) и откроет еще один счет? А если отделение в offline работает с последующей репликацией? А если у них совсем компьютеров нет :)? Кстати, на всякий случай: бронировать и продавать билеты умели задолго до компьютеров. "Мы сами знаем, что она не имеет решения. Мы хотим знать, как её решать." (R) Стругацкие Bogdanov Andrey Интересно много ли вы программных продуктов продадите со "специально усложненным" интерфейсом? Почему-то большинство производителей наоборот за эргономику борются. Учтите, что в большинстве случаев после неудачного поиска заводить нового субъекта все-равно придется. Про специальное усложнение - это ваши слова, не мои. Просто поиск должен быть настолько простым, быстрым и надёжным, что заводить нового должно быть долго и сложно по сравнению с использованием существующего. Хотя согласен, слов "по сравнению" я не написал. Невозможно? См. Google. Просто беспорядок - это плохо, даже если естественно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 21:45 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
asudorov А в чём противоречие? Выделяете операциониста, ответственного за порядок при вводе, в каждом отделении. А в БД запоминаем его логин для каждой заведённой записи. Вы видимо плохо представляете себе что такое розничный фронт-офис. Итак клиент хочет открыть счет в банке. Сначала он стоит в очереди к операционисту, который берет у него документы проверяет их, и выясняет что же нужно клиенту. Узнав, что клиент хочет открыть счет его направляют к другому операционисту, который клиентов заводить умеет, потом к третьему, который договора заводит, потом еще к бухгалтеру - тот счета открывает. Ну и наконец к кассиру, который деньги выдает. Видел я банки которые по такому принципу работают. И после 15 минут ожидания ушел в соседний, где мне все сделали за пять минут. Может быть банку это выгодно? И кроме того, если в каждом отделении свой "операционист для ввода клиентов", то как же они между собой отсутствие дублирования обеспечивают. asudorov Про специальное усложнение - это ваши слова, не мои. Просто поиск должен быть настолько простым, быстрым и надёжным, что заводить нового должно быть долго и сложно по сравнению с использованием существующего. Хотя согласен, слов "по сравнению" я не написал. Невозможно? См. Google. Я не могу сказать, что поисковая система Google удобная. Я видел и получше. Но замечу, что в 90% случев (если не чаще) после поиска все равно придется заводить нового. То есть предварительный поиск (каким бы удобным он ни был) это чистое увеличение трудоемкости. asudorov Просто беспорядок - это плохо, даже если естественно. Вопрос не в том плохо или хорошо, а в том какую цену мы готовы заплатить за его устранение. В известных мне случаях эта цена оказывалась выше, чем потери от беспорядка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2007, 23:13 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Вопрос не в том плохо или хорошо, а в том какую цену мы готовы заплатить за его устранение. В известных мне случаях эта цена оказывалась выше, чем потери от беспорядка. С этим не поспоришь. Но беспорядок имеет тенденцию накапливаться, а потери от него – расти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 10:36 |
|
||
|
Проектируем систему учета Инцидентов
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyИтак клиент хочет открыть счет в банке. ... Может быть банку это выгодно? Вы видимо плохо представляете себе что выгодно банку. guest00x Bogdanov AndreyА завтра этот же человек в другое отделение придет (может быть на другом конце страны) и откроет еще один счет? Хе-хе... Если бы я хотел открыть еще один счет в том же самом банке, то очень обиделся бы (на банк), если бы меня "распознали" как уже имеющего один счет. Пример выбран неудачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2007, 12:32 |
|
||
|
|

start [/forum/topic.php?fid=32&tid=1544735]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 478ms |

| 0 / 0 |
