logo
Разработка автоматизированной информационной системы управления услугами оператора телефонной связи

Заключение по главе

Среди обширного количества существующих СУБД была выбрана Firebird 2.1. так как одним из ее преимуществом является поддержка множество способов доступа, включая: собственные наборы компонент для

C/C++ и Delphi. Так же Firebird поддерживает большие базы данных, которые могут быть расположены в нескольких файлах. В качестве еще одного преимущества Firebird можно отметить многоверсионную архитектуру, обеспечивающую параллельную обработку оперативных и аналитических запросов (это возможно потому, что читающие пользователи не блокируют пишущих), компактность (дистрибутив 5Mb), высокую эффективность и мощную языковую поддержку для хранимых процедур и триггеров.

В качестве среды разработки базы данных была выбрана оболочка IBExpert 2009 так как она обладает рядом достоинств, таких как:

Ш поддержка InterBase версий 4.х, 5.х, 6.х, 7.х; Firebird 1.х, 2.x; Yaffil 1.х;

Ш работа одновременно с несколькими базами данных;

Ш отдельные редакторы для всех объектов БД с синтаксической подсветкой;

Ш мощный SQL редактор с историей запросов и возможностью фонового выполнения запросов;

Ш отладчик хранимых процедур и триггеров;

Ш поиск в метаданных;

Ш полное и частичное извлечение данных и метаданных;

Ш анализатор зависимостей объектов баз данных;

Ш отчеты по метаданным;

Ш менеджеры пользователей и пользовательских привилегий;

Ш экспорт данных в различные форматы.

IBExpert обладает множеством облегчающих работу компонентов: визуальный редактор для всех объектов базы данных, редактор SQL и исполнитель скриптов, отладчик для хранимых процедур и триггеров, построитель области, собственный скриптовый язык, а также дизайнер баз данных и т. д.

В качестве среды разработки ПО использовалась Delphi 2010 так как в она обладает следующими преимуществами:

Ш Быстрота разработки приложения.

Ш Высокая производительность разработанного приложения.

Ш Hизкие требования разработанного приложения к ресурсам компьютера.

Ш Hаращиваемость за счет встраивания новых компонент и инструментов в среду Delphi.

Ш Возможность разработки новых компонент и инструментов собственными средствами Delphi (существующие компоненты и инструменты доступны в исходниках)

Ш Удачная проработка иерархии объектов

Ш Де-факто уже доступно огромное количество визуальных компонентов третьих фирм, часть из которых freeware, часть shareware, часть - коммерческие.

3. Проектирование реляционной базы данных

Данная база данных проектируется на основе ролевой модели.

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

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

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

Несмотря на то, что Роль является совокупностью прав доступа на объекты компьютерной системы, ролевое управление доступом отнюдь не является частным случаем избирательного управления доступом, так как его правила определяют порядок предоставления доступа субъектам компьютерной системы в зависимости от имеющихся (или отсутствующих) у него ролей в каждый момент времени, что является характерным для систем мандатного управления доступом. С другой стороны, правила ролевого разграничения доступа являются более гибкими, чем при мандатном подходе к разграничению.

Так как привилегии не назначаются пользователям непосредственно, и приобретаются ими только через свою роль (или роли), управление индивидуальными правами пользователя по сути сводится к назначению ему ролей. Это упрощает такие операции, как добавление пользователя или смена подразделения пользователем.

3.1 Разработка структуры таблиц

Структура базы данных для АИС "Оператор", представлена на рисунке 4.

База данных состоит из 6 сущностей, таких как:

Ш Abonenti - Данная сущность хранит в себе информацию об абонентах и включает в себя следующие атрибуты: код абонента, фамилия, имя, отчество, дата рождения, паспортные данные, адрес проживания.

Ш Uslugi - данная сущность включает в себя следующие атрибуты: код услуги, описание, примечание, стоимость.

Ш Tarifi - данная сущность включает в себя следующие атрибуты: название тарифа, стоимость входящих вызовов внутри сети, стоимость исходящих вызовов внутри сети, стоимость входящих вызовов с другого оператора, стоимость исходящих вызовов на другой оператор, стоимость входящих с городского телефона, стоимость исходящих на городской телефон стоимость смс и стоимость интернет трафика.

Ш Abonentskie_uslugi - данная сущность включает в себя следующие атрибуты: код услуги, номер договора, дата подключения, дата окончания действия данной услуги.

Ш Licevoi_schet - данная сущность включает в себя следующие атрибуты: id, номер лицевого счета, дата, время, сумма, номер договора

Ш Zakluchenie_dogovora - данная сущность включает в себя следующие атрибуты: код абонента, номер договора, дата заключения, абонентский номер, тариф, номер лицевого счета.

3.2 Нормализация таблиц

Нормализация - это процесс проверки структуры таблиц на наличие аномалии, если они имеются, то таблицы разбиваются на более мелкие таблицы. Структура нормализации представлена на рисунке 5.

Аномалии - это ситуации при работе с базой данных, которые могут привести к неоднозначной трактовке данных или противоречивым данным. Аномалии возникают в таблицах, содержащих избыточные данные

Рис. 5. "Структура нормализации таблиц"

На начальном этапе проектирования базы данных строится первая нормальная форма (1НФ): Таблица находится в 1 НФ, если на пересечении каждой строки и столбца стоит атомарное значение.

Отношение находится во 2НФ тогда и только тогда, когда отношение находится в 1НФ, и нет, не ключевых атрибутов, зависящих от части сложного ключа. Для того, чтобы устранить зависимость атрибутов от части сложного ключа, нужно произвести декомпозицию отношения на несколько отношений. При этом те атрибуты, которые зависят от части сложного ключа, выносятся в отдельное отношение.

Отношение находится в 3НФ тогда и только тогда, когда отношение находится во 2НФ и все не ключевые атрибуты взаимно независимы.

Атрибуты называются взаимно независимыми, если ни один из них не является функционально зависимым от другого.

Таблица находится в НФБК (Нормальная форма Байса-Кода), если детерминанты всех функциональных зависимостей являются потенциальными ключевыми таблицами

Отношение находится в 4НФ, если отношение содержит 2 многозначные зависимости.

Многозначная зависимость - это такая логическая связь между значениями столбцов А и В при которой для значения А мы можем определить множество значений столбца В.

5НФ применяется к таблицам, имеющим несколько многозначных зависимостей, причем атрибуты, входящие в эти зависимости связаны между собой по смыслу, то есть являются зависимыми друг от друга.

Отношения находятся в ДКНФ (Доменно-ключевая нормальная форма) если каждое ограничение целостности, накладываемое на это отношение является логическим следствием определения доменов и ключей.

Проведем нормализацию таблиц базы данных "Оператор".

Для этого выделим для каждой таблицы функциональные зависимости и проверим на нормальные формы как это показано на рисунке 1. Функциональная зависимость (ФЗ) между столбцами означает логическую связь "Многие к одному" между значениями этих столбцов.

Таблица Abonenti:

Функциональные зависимости :

1. Kod_abonenta > (Familiy, name, otchestvo, data_rogdeniy, seriy_pasporta, nomer_pasporta, kem_vidan, kogda_vidan, address)

2. (seriy_pasporta, nomer_pasporta) > (Kod_abonenta ,familiy, name, otchestvo, data_rogdeniy, kem_vidan, kogda_vidan, address)

3. (Familiy, name, otchestvo, data_rogdeniy, address) > (Kod_abonenta, seriy_pasporta, nomer_pasporta, kem_vidan, kogda_vidan)

Проверка на нормальные формы (НФ):

1НФ прошла, 2НФ прошла, НФБК прошла. Многозначных зависимостей нет. Таблица находится в ДКНФ.

Таблица Uslugi

Функциональные зависимости:

1. Kod_uslugi > (Opisanie, primechanie, stoimost)

1НФ прошла, 2НФ прошла, 3НФ прошла. Многозначных зависимостей нет. Таблица находится в ДКНФ.

Таблица Abonentskie_uslugi

Функциональные зависимости:

1. Kod_uslugi > (Nomer_dogovora, data_podklucheniy, data_okonchaniy)

2. Nomer_dogovora > (Data_podklucheniy, data_okonchaniy)

3. (Nomer_dogovora, data_podklucheniy > (Data_okonchaniy)

1НФ прошла, 2НФ прошла, 3НФ прошла. Многозначных зависимостей нет. Таблица находится в ДКНФ.

Таблица Tarifi

Функциональные зависимости:

1. Nazvanie_tarifa > (St_vh_vn_s, st_ish_vn_s, st_vh_dr_op, St_ish_na_dr_op, st_vh_s_gor_tel, st_ish_na_gor_tel,st_sms, internet_trafic)

1НФ прошла, 2НФ прошла, 3НФ прошла. Многозначных зависимостей нет. Таблица находится в ДКНФ.

Таблица Licevoi_schet

Функциональные зависимости:

1. Id > (Nom_licevogo_scheta, data, vremya, summa, nomer_dogovora)

2. Nom_licevogo_scheta > (Id, data, vremya, summa, nomer_dogovora)

3. (Nom_licevogo_scheta, data) > (vremya, summa)

4. Nomer_dogovora > Nom_licevogo_scheta

1НФ прошла, 2НФ прошла, 3НФ прошла. Многозначных зависимостей нет. Таблица находится в ДКНФ.

Таблица Zakluchenie_dogovora

Функциональные зависимости:

1. Kod_abonenta > (Nom_dogovora, data_zaklucheniy, abonents_nom,tariff, nom_licevogo_sheta)

2. Nom_dogovora > (Kod_abonenta, data_zaklucheniy, abonents_nom,tariff, nom_licevogo_sheta)

3. Abonents_nom > Nom_licevogo_sheta

1НФ прошла, 2НФ прошла, 3НФ прошла. Многозначных зависимостей нет. Таблица находится в ДКНФ.

Таким образом, все обнаруженные аномалии обновления устранены. Реляционная модель, состоящая из отношений, находящихся в третьей нормальной форме, является адекватной описанной модели предметной области.

3.3 Проектирование ограничений целостности

Таблица 1. "Abonenti"

Имя столбца

Тип

Null/not null

Primary key/unique

Check

Foreign key

Примечания

Kod_abonenta

Integer

not null

Primary key

Код абонента

Familiy

Varchar (25)

not null

Фамилия абонента

Name

Varchar (15)

not null

Имя абонента

Otchestvo

Varchar (25)

not null

Отчество абонента

Data_rogdeniya

Date

null

Дата рождения абонента

Seriya_pasporta

Integer

not null

Серия паспорта

Nomer_pasporta

Integer

not null

Номер паспорта

Kem_vidan

Varchar (35)

not null

Кем выдан

Kogda_vidan

Date

not null

Когда выдан

Adress

Varchar (85)

null

Адрес абонента

Таблица 2. "Uslugi"

Имя столбца

Тип

Null/

not null

Primary key/unique

Check

Foreign key

Примечания

Kod_uslugi

Integer

not null

Primary key

Код услуги

Opisanie

Varchar(150)

not null

Описание услуги, ее название

Primechanie

Varchar(150)

null

Примечания,

Stoimost

Float

not null

Стоимость услуги

Таблица 3. "Abonentskie_uslugi"

Имя столбца

Тип

Null/

not null

Primary key/unique

Check

Foreign key

Примечания

Kod_uslugi

Integer

not null

Foreign key

Код услуги

Nomer_dogovora

Integer

not null

Foreign key

Номер договора

Data_Podklucheniy

Date

not null

Дата подключения услуги

Data_okonchaniy

Date

null

Дата окончания услуги

Таблица 4. "Zakluchenie_dogovora"

Имя столбца

Тип

Null/

not null

Primary key/unique

Check

Foreign key

Примечания

Kod_abonenta

Integer

not null

Foreign key

Код абонента

Nom_dogovora

Integer

not null

Primary key

Номер договора

Data_zaklucheniy

Date

not null

Дата заключения договора

Abonents_nom

Integer

not null

Абонентский номер

Tarif

Varchar (45)

not null

Foreign key

Тарифный план

Nomer_Licevogo scheta

Integer

not null

Foreign key

Номер лицевого счета абонента

Таблица 5. "Licevoi_schet"

Имя столбца

Тип

Null/not null

Primary key/unique

Check

Foreign key

Примечания

Id

Integer

not null

Primary key

Порядковый номер

Nomer_licevogo_scheta

Integer

not null

Номер лицевого счета

Data

Date

not null

Дата

Vremya

Time

not null

Время

Summa

Float

not null

Сумма

Nomer_dogovora

Integer

not null

Номер договора

Таблица 6. "Tarifi"

Имя столбца

Тип

Null/

not null

Primary key/unique

Check

Foreign key

Примечания

Nazvanie_tarifa

Varchar

(45)

not null

Primary key

Название тарифа

St_vh_vn_s

Float

not null

Стоимость входящих вызовов внутри сети

St_ish_vn_s

Float

not null

Стоимость исходящих вызовов внутри сети

St_vh_dr_op

Float

not null

Стоимость входящих вызовов с другого оператора сотовой связи

St_ish_na_dr_op

Float

not null

Стоимость исходящих вызовов на другой оператор сотовой связи

St_vh_s_gor_tel

Float

not null

Стоимость входящих вызовов с городского номера телефона

St_ish_na_gor_tel

Float

not null

Стоимость исходящих вызовов на городской номер телефона

St_sms

Float

not null

Стоимость смс

Internet_trafic

Float

not null

Стоимость интернет трафика за мегабайт

3.4 Разработка операций выборки данных

Разработка операции выборки данных представлена в таблице 7.

Таблица 7. "Разработка операций выборки данных"

№п/п

Описание действия

Входные параметры (имя, тип)

Выходные параметры (имя, тип)

Алгоритм выполнения

1

Добавление нового абонента (процедура ADD_NEW_ABONENT)

KOD_ABONENTA integer FAMILIY varchar(25) NAME varchar(15), OTCHESTVO varchar(25), DATA_ROGDENIYA date, SERIY_PASPORTA integer, NOMER_PASPORTA integer,

KEM_VIDAN varchar(35), KOGDA_VIDAN date, ADDRESSvarchar

(85)

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Abonenti человек с такими же кодом абонента, если да то выйти с кодом ошибки 0, если нет то добавить новую строку с данными о новом клиенте в таблицу и отправить значения выходных параметров на выход с кодом 1

2

Редактирование данных об абоненте (процедура UPDATE_DANNIE_OB_ABONENTE)

KOD_ABONENTA integer FAMILIY varchar(25) NAME varchar(15), OTCHESTVO varchar(25),DATA_ROGDENIYA date, SERIY_PASPORTAinteger,NOMER_PASPORTA integer,KEM_VIDAN varchar(35), KOGDA_VIDAN date,ADDRESSvarchar(85)

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Abonenti человек с таким же кодом абонента, то изменяем нужные данные и выходим с параметром 1, если нет то выходим с кодом ошибки о.

3

Удаление абонента (процедура DELETE_ABONENT)

KOD_ABONENTA integer

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Abonenti человек с таким же номером абонента, если да, то удалить строку с его данными, если нет, то выйти с кодом ошибки 0.

4

Добавление нового договора (процедура ADD_DOGOVOR)

KOD_ABONENTA integer, NOM_DOGOVORA integer, DATA_ZAKLUCHENIY date, ABONENTS_NOM bigint, TARIF varchar(45), NOM_LICEVOGO_SCHETA integer

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Zakluchenie_dogovora номер договора, совпадаемый с вводимым, если да, то выйти с кодом ошибки 0, если нет, то добавить новую строку со всеми данными в таблицу и отправить значения выходных параметров на выход с кодом 1

5

Удаление договора (процедура DELETE_DOGOVOR )

NOM_DOGOVORA integer

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Zakluchenie_dogovora номер договора, совпадаемый с вводимым, если да, тогда удалить строку из таблицы, если нет, то выйти с кодом ошибки 0.

6

Добавление нового тарифного плана (процедура ADD_NEW_TARIF)

NAZVANIE_TARIFA varchar(45),

ST_VH_VN_S float,ST_ISH_VN_S float,ST_VH_DR_OPfloat,ST_ISH_NA_DR_OP float, ST_VH_S_GOR_TEL float, ST_ISH_NA_GOR_TEL float ST_SMS float, NTERNET_TRAFIC float

Код ошибки - integer:

0- ошибка

Проверить существует ли в таблице Tarifi тариф с таким же названием, если да, то выйти с кодом ошибки 0, если нет то добавить строку с информацией о тарифе в таблицу и отправить значения выходных параметров на выход с кодом 1

7

Изменение данных о тарифе (процедура UPDATE_DANNIE_O_TARIFE)

NAZVANIE_TARIFA varchar(45), ST_VH_VN_S float,ST_ISH_VN_S float,ST_VH_DR_OPfloat,ST_ISH_NA_DR_OP float, ST_VH_S_GOR_TEL float, ST_ISH_NA_GOR_TEL float ST_SMS float, NTERNET_TRAFIC float

Код ошибки - integer:

0- ошибка

Проверить существует ли в таблице Tarifi тариф с таким же названием, если да, то изменяем данные и отправить значения выходных параметров на выход с кодом 1, если нет, то выходим с кодом ошибки 0

8

Удаление тарифа (процедура DELETE_TARIF)

NAZVANIE_TARIFA varchar(45)

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Tarifi тариф с таким же названием, если да, тогда удаляем строку из таблицы, иначе выходим с кодом ошибки 0.

9

Добавление новой услуги (процедура ADD_NEW_USLUGA)

KOD_USLUGI integer, OPISANIE varchar(150), PRIMECHANIE varchar(150), STOIMOST float,SPOSOB_PODKLUCHENIY varchar(200)

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Uslugi услуга с таким же кодом услуги, если да, то выйти с кодом ошибки 0, если нет, то добавить строку с информацией об услуге в таблицу и отправить значения выходных параметров на выход с кодом 1

10

Изменение сведений об услугах (процедура UPDATE_DANNIE_OB_USLUGAH)

KOD_USLUGI integer, OPISANIE varchar(150), PRIMECHANIE varchar(150), STOIMOST float,SPOSOB_PODKLUCHENIY varchar(200)

Код ошибки - integer:

0- ошибка

Проверить существует ли в таблице Uslugi услуга с таким же кодом услуги, если да, то изменяем данные и отправить значения выходных параметров на выход с кодом 1, если нет, то выходим с кодом ошибки 0

11

Удаление услуги (процедура DELETE_USLUGA)

KOD_USLUGI integer

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Uslugi ресурс с таким же кодом услуги, если да, то удаляем строку с данными, иначе выходим с кодом ошибки 0

12

Добавление лицевого счета (процедура ADD_NEW_LIC_SCHET)

ID integer, NOM_LICEVOGO_SCHETA integer,

DATA date,

VREMYA time, SUMMA float,

NOMER_DOGOVORA integer

Код ошибки - integer:

0- ошибка

Проверить существует ли в таблице Licevoi_schet клиент с запрашиваемым id, если да, то выходим с кодом ошибки 0, иначе добавляем данные в таблицу и отправляем значения выходных параметров на выход с кодом 1

13

Удаления лицевого счета (процедура DELETE_LIC_SCHET)

ID integer

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Licevoi_schet клиент с запрашиваемым id, если да, то удалить строку с данными, иначе выйти с кодом ошибки 0

14

Изменение вносимой суммы (процедура UPDATE_SUMMA)

NOM_LICEVOGO_SCHETA integer, SUMMA float,

Код ошибки - integer: 0- ошибка

Проверить существует ли в таблице Licevoi_schet клиент с запрашиваемым id, если да, то изменяем сумму и отправляем на выход значение 1, иначе выходим с кодом ошибки 0

3.5 Выдача прав доступа

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

s - право на чтение (select);

i - право на добавление строк (insert);

u - право на редактирование строк (update);

d - право на удаление строк (delete);

e - право на запуск хранимых процедур (execute).

Таблица 8. "Выдача прав доступа"

Объект БД

Роли:

Adnin

manager

Prodavec

Таблица abonenti

siud

s

suid

Таблица Uslugi

siud

suid

s

Таблица Abonentskie_uslugi

siud

s

siud

Таблица Tarifi

siud

suid

s

Таблица Licevoi_schet