Реализация распределенной базы данных с удаленным доступом

Автор работы: Пользователь скрыл имя, 30 Ноября 2011 в 00:17, курсовая работа

Краткое описание

В дипломном проекте рассмотрены общие подходы к реализации распределенных систем обработки данных на базе технологии клиент-сервер, а также задача создания действующей информационной системы на примере системы автоматизации расчетов с абонентами АО «Связьинформ» РМ. Актуальность построения этой системы обусловлена резким ростом количества предоставляемых услуг связи, а также переходом некоторых районов на повременную систему тарификации разговоров.
В процессе написания дипломной работы автором велась разработка архитектуры информационной системы, механизма репликации данных, средств удаленного доступа и удаленного администрирования системы, структуры БД, а также некоторых компонентов клиентской части системы (справочной службы и картотеки абонентов).

Содержание работы

ВВЕДЕНИЕ 4
1. ОСНОВНЫЕ ПОДХОДЫ К ПРОЕКТИРОВАНИЮ РАСПРЕДЕЛЕННЫХ БАЗ ДАННЫХ 6
1.1 ОСНОВНЫЕ ПОНЯТИЯ ТЕОРИИ РЕЛЯЦИОННЫХ БАЗ ДАННЫХ 6
1.2 СЕРВЕР БАЗЫ ДАННЫХ 10
1.2.1 Технология и модели "клиент-сервер" 10
1.2.2 Механизмы реализации активного ядра 19
1.2.3 Хранимые процедуры 20
1.2.4 Правила (триггеры) 21
1.2.5 Механизм событий 21
1.3 ОБРАБОТКА РАСПРЕДЕЛЕННЫХ ДАННЫХ 22
1.4 ВЗАИМОДЕЙСТВИЕ С PC-ОРИЕНТИРОВАННЫМИ СУБД 30
1.5 ОБРАБОТКА ТРАНЗАКЦИЙ 33
1.6 СРЕДСТВА ЗАЩИТЫ ДАННЫХ В СУБД 37
1.7 ПРИМЕНЕНИЕ CASE-СРЕДСТВ ДЛЯ ИНФОРМАЦИОННОГО МОДЕЛИРОВАНИЯ В СИСТЕМАХ ОБРАБОТКИ ДАННЫХ . 41
2. РЕАЛИЗАЦИЯ РАСПРЕДЕЛЕННОЙ БАЗЫ ДАННЫХ С УДАЛЕННЫМ ДОСТУПОМ 43
2.1 АНАЛИЗ СУЩЕСТВУЮЩЕЙ СИСТЕМЫ 44
2.2 НОВАЯ СХЕМА ОБМЕНА ИНФОРМАЦИЕЙ 45
2.3 ВЫБОР ОПЕРАЦИОННОЙ СИСТЕМЫ 47
2.4 ВЫБОР СЕРВЕРА БАЗ ДАННЫХ 48
2.5 ВЫБОР СРЕДСТВ РАЗРАБОТКИ 55
2.6 ОРГАНИЗАЦИЯ ВЗАИМОДЕЙСТВИЯ МЕЖДУ СЕРВЕРАМИ 56
2.6.1 Выбор модели распределенной базы данных 56
2.6.2 Модель взаимодействия 56
2.6.3 Использование слоя RPC для распределенной обработки данных на платформе Windows NT 57
2.6.4 Компоненты Microsoft RPC 57
2.6.5 Механизм работы RPC 58
2.6.6 Организация логического канала передачи данных 61
2.7 ОРГАНИЗАЦИЯ ДОСТУПА УДАЛЕННЫХ ПОЛЬЗОВАТЕЛЕЙ 61
2.7.1 Необходимость удаленного доступа 61
2.7.2 Использование слоя RAS для удаленного доступа на платформе Windows NT 61
2.7.3 Обеспечение информационной безопасности при удаленном доступе 63
2.8 ПРОЕКТИРОВАНИЕ СТРУКТУРЫ БАЗЫ ДАННЫХ 63
2.9 СХЕМА РЕПЛИКАЦИИ ДАННЫХ 65
2.10 ПРОЕКТИРОВАНИЕ КОММУНИКАЦИОННОГО СЕРВЕРА 67
2.10.1 Постановка задачи 67
2.10.2 Архитектура коммуникационного сервера 68
2.10.3 Вспомогательное программное обеспечение 70
3. ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ 71
3.1 ПЛАН ВЫПОЛНЕНИЯ ДИПЛОМНОГО ПРОЕКТА 71
3.2 РАСЧЕТ ОЖИДАЕМОЙ ПРОДОЛЖИТЕЛЬНОСТИ ВЫПОЛНЕНИЯ РАБОТ И ИХ ДИСПЕРСИЙ 73
3.3 ПОСТРОЕНИЕ ЛЕНТОЧНОГО ГРАФИКА ВЫПОЛНЕНИЯ РАБОТЫ 74
3.4 ОПРЕДЕЛЕНИЕ ПЛАНОВОЙ СЕБЕСТОИМОСТИ НИР 76
ЗАКЛЮЧЕНИЕ 79
СПИСОК ЛИТЕРАТУРЫ 80

Содержимое работы - 1 файл

РЕАЛИЗАЦИЯ РАСПРЕДЕЛЕННОЙ БАЗЫ ДАННЫХ С УДАЛЕННЫМ ДОСТУПОМ.doc

— 1.41 Мб (Скачать файл)

ALTER TABLE TalksPay

       ADD FOREIGN KEY (Phone)

                             REFERENCES PhonesKeys; 
 

ALTER TABLE UslCat

       ADD FOREIGN KEY (PKey)

                             REFERENCES UslCatKeys; 
 

ALTER TABLE UslDivisions

       ADD CONSTRAINT R_63

              FOREIGN KEY (PKey)

                             REFERENCES UslDivisionsKeys; 
 

ALTER TABLE UslLgots

       ADD CONSTRAINT R_50

              FOREIGN KEY (Property)

                             REFERENCES UslPropsKeys; 
 

ALTER TABLE UslLgots

       ADD FOREIGN KEY (Usl)

                             REFERENCES UslsKeys; 
 

ALTER TABLE UslLgots

       ADD FOREIGN KEY (Category)

                             REFERENCES UslCatKeys; 
 

ALTER TABLE UslProps

       ADD CONSTRAINT R_51

              FOREIGN KEY (PKey)

                             REFERENCES UslPropsKeys; 
 

ALTER TABLE Usls

       ADD CONSTRAINT R_64

              FOREIGN KEY (Division)

                             REFERENCES UslDivisionsKeys; 
 

ALTER TABLE Usls

       ADD FOREIGN KEY (UslType)

                             REFERENCES UslTypes; 
 

ALTER TABLE Usls

       ADD FOREIGN KEY (PKey)

                             REFERENCES UslsKeys; 
 

CREATE PROCEDURE PrGenUslPropsKeys

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslPropsKeys, 1); 

END ^ 

CREATE PROCEDURE PrGenUslProps

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslProps, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesRegions

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesRegions, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesStations

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesStations, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesStreets

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesStreets, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesBanks

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesBanks, 1); 

END ^ 

CREATE PROCEDURE PrGenTalksPay

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genTalksPay, 1); 

END ^ 

CREATE PROCEDURE PrGenTalks

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genTalks, 1); 

END ^ 

CREATE PROCEDURE PrGenNach

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genNach, 1); 

END ^ 

CREATE PROCEDURE PrGenNachBillings

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genNachBillings, 1); 

END ^ 

CREATE PROCEDURE PrGenNachBillDates

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genNachBillDates, 1); 

END ^ 

CREATE PROCEDURE PrGenNachConstUsl

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genNachConstUsl, 1); 

END ^ 

CREATE PROCEDURE PrGenUslDivisions

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslDivisions, 1); 

END ^ 

CREATE PROCEDURE PrGenUslLgots

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslLgots, 1); 

END ^ 

CREATE PROCEDURE PrGenUslsKeys

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslsKeys, 1); 

END ^ 

CREATE PROCEDURE PrGenUsls

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUsls, 1); 

END ^ 

CREATE PROCEDURE PrGenUslCatKeys

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslCatKeys, 1); 

END ^ 

CREATE PROCEDURE PrGenUslCat

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslCat, 1); 

END ^ 

CREATE PROCEDURE PrGenPhones

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhones, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesOwnersKeys

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesOwnersKeys, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesOwners

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesOwners, 1); 

END ^ 

CREATE PROCEDURE PrGenSysSettings

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genSysSettings, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesKeys

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesKeys, 1); 

END ^ 

CREATE PROCEDURE PrGenPlat

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPlat, 1); 

END ^ 

CREATE PROCEDURE PrGenPhonesPostStations

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genPhonesPostStations, 1); 

END ^ 

CREATE PROCEDURE PrGenSysLog

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genSysLog, 1); 

END ^ 

CREATE PROCEDURE PrGenUslTypes

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslTypes, 1); 

END ^ 

CREATE PROCEDURE PrGenUslDivisionsKeys

RETURNS (ACode INTEGER)

AS

BEGIN

ACode = GEN_ID(genUslDivisionsKeys, 1); 

END ^ 

  ^ 
 

CREATE PROCEDURE TalksExamineOwner (APhoneNmb CHAR(7),  ADate DATE)

RETURNS (APhone INTEGER)

AS

  DECLARE VARIABLE AStreet                INTEGER; 

  DECLARE VARIABLE NOwner               INTEGER; 

  DECLARE VARIABLE APhoneCode       INTEGER; 

BEGIN 

SELECT PKey FROM Phones WHERE (PhoneNmb = :APhoneNmb) AND (:ADate BETWEEN BegDate AND EndDate)

INTO :APhone; 
 

IF (:APhone IS NULL) THEN

  BEGIN 

    SELECT NullOwner FROM SysSettings INTO :NOwner; 
 

    SELECT Street FROM PhonesOwners

       WHERE (PKey = :NOwner) AND (:ADate BETWEEN PhonesOwners.BegDate AND PhonesOwners.EndDate)

    INTO :AStreet; 
 

    IF (:AStreet IS NOT NULL) THEN

      BEGIN

        EXECUTE PROCEDURE PrGenPhonesKeys RETURNING_VALUES :APhone; 

  

        INSERT INTO PhonesKeys (Code)

         VALUES (:APhone); 

               

        INSERT INTO Phones(Owner, PKey, PhoneNmb, Street, InstallDate, RemoveDate, BegDate, EndDate)

        VALUES (:NOwner, :APhone, :APhoneNmb, :AStreet, :ADate, "12.12.2222", :ADate, "12.12.2222"); 
 

     END

  END

END ^ 

CREATE PROCEDURE TalksGetTax

AS

BEGIN

EXIT; 

END ^ 

CREATE PROCEDURE TalksGetPay  (APhone INTEGER,  ADay   DATE,  ACallTime INTEGER, AHowLong INTEGER)

RETURNS (APay  FLOAT,  ACalculated SMALLINT, IsLgot SMALLINT)

AS

DECLARE VARIABLE  ATax             FLOAT; 

DECLARE VARIABLE  AProcNach   FLOAT; 

DECLARE VARIABLE  ATalksUsl     INTEGER; 

DECLARE VARIABLE  AOwner        INTEGER; 

DECLARE VARIABLE  ANalog         FLOAT; 

BEGIN

ACalculated = 0; 
 

SELECT TimeTalksUsl FROM SysSettings INTO :ATalksUsl; 

 IF (:ATalksUsl IS NULL) THEN EXIT; 
 

SELECT Owner FROM Phones WHERE (PKey = :APhone) AND (:ADay BETWEEN BegDate AND EndDate)

INTO :AOwner; 

IF (:AOwner IS NULL) THEN EXIT; 
 

EXECUTE PROCEDURE UslGetOwnerTax(:AOwner, :ATalksUsl, :ADay)

RETURNING_VALUES :ATax, :AProcNach, :ANalog; 
 

IF (:ATax IS NULL) THEN EXIT; 
 

  APay = ATax*AHowLong*AProcNach/3000; 

  ACalculated = 1;

  

END ^ 

CREATE PROCEDURE TalksCallBilling (APhone INTEGER, ACallDate DATE,  ACallTime INTEGER, AHowLong INTEGER)

RETURNS (ATalksPayCode INTEGER, ACalculated SMALLINT)

AS

DECLARE VARIABLE APay           FLOAT; 

DECLARE VARIABLE PayCode     INTEGER; 

DECLARE VARIABLE IsLgot          SMALLINT; 

DECLARE VARIABLE TTime         INTEGER; 

DECLARE VARIABLE LTime         INTEGER; 

BEGIN

 EXECUTE PROCEDURE TalksGetPay(APhone, ACallDate, ACallTime, AHowLong)

RETURNING_VALUES :APay, :ACalculated, :IsLgot; 
 

SELECT Code FROM TalksPay WHERE (Phone = :APhone)  AND (CallDate = :ACallDate)

INTO PayCode; 
 

IF (:ACalculated = 0) THEN EXIT; 

 

IF (:IsLgot = 0) THEN  BEGIN

   TTime = AHowLong; 

   LTime = 0; 

END

ELSE BEGIN

   LTime = AHowLong; 

  TTime = 0; 

END 

IF (:PayCode IS NULL) THEN   BEGIN

     EXECUTE PROCEDURE PrGenTalksPay RETURNING_VALUES :PayCode; 
 

      INSERT INTO TalksPay (Code, Phone, CallDate, TotalSum, TotalFullTime, TotalLgotTime)

      VALUES (:PayCode, :APhone, :ACallDate, :APay, :TTime, :LTime); 
 

  END

  ELSE BEGIN

     UPDATE TalksPay

     SET TotalSum = TotalSum+:APay,     

Информация о работе Реализация распределенной базы данных с удаленным доступом