диплом (1094861), страница 4
Текст из файла (страница 4)
Реляционная алгебра является замкнутой, т.к. в качестве аргументов в реляционные операторы можно подставлять другие реляционные операторы, подходящие по типу:
, (2.2)
В реляционных выражениях можно использовать вложенные выражения сколь угодно сложной структуры.
Каждое отношение обязано иметь уникальное имя в пределах базы данных. Имя отношения, полученного в результате выполнения реляционной операции, определяется в левой части равенства. Однако можно не требовать наличия имен от отношений, полученных в результате реляционных выражений, если эти отношения подставляются в качестве аргументов в другие реляционные выражения. Такие отношения будем называть неименованными отношениями. Неименованные отношения реально не существуют в базе данных, а только вычисляются в момент вычисления значения реляционного оператора.
Теперь рассмотрим реализацию БД БИС посредством операторов реляционной алгебры.
Таблица 2.5.
Отношение БАЗА_ОШИБОК
Проблема | Решение | Код ошибки | Описание |
Вход запрещен | Сброс пароля | 6 | Неправильный пароль |
Нет соединения | Включить модем | 635 | Отсутствие подключения |
Ошибка соединения | Перезапустить модем | 612 | Превышен таймаут соединения |
Отношение А
Таблица 2.6.
Отношение БАЗА_НАСТРОЕК
Проблема | Решение |
Вход запрещен | Сброс пароля |
Нет соединения | Включить модем |
Ошибка соединения | Перезапустить модем |
Отношение В
Таблица 2.7.
Отношение БАЗА_КОДОВ
Код ошибки | Описание |
6 | Неправильный пароль |
635 | Отсутствие подключения |
612 | Превышен таймаут соединения |
Отношение С
Проекцией отношения А по атрибутам X,Y,Z, где каждый из атрибутов принадлежит отношению A, называется отношение с заголовком (X,Y,Z) и телом, содержащим множество кортежей вида (x,y,z), таких, для которых в отношении A найдутся кортежи со значением атрибута X равным x, значением атрибута Y равным y, …, значением атрибута Z равным z.
Синтаксис операции проекции:
A[X,Y,Z]
Замечание. Операция проекции дает "вертикальный срез" отношения, в котором удалены все возникшие при таком срезе дубликаты кортежей.
Для отношений, нормализованных таким образом, исходный запрос реализуется следующей последовательностью операторов:
1. R1(ПРОБЛЕМА,РЕШЕНИЕ) = R2[ПРОБЛЕМА,РЕШЕНИЕ]
2. R1(КОД_ОШ,ОПИСАНИЕ) = R3[КОД_ОШ,ОПИСАНИЕ]
На языке SQL такой запрос реализуется одной командой:
SELECT БАЗА_ОШ.ПРОБЛЕМА, БАЗА_ОШ.РЕШЕНИЕ
FROM БАЗА_ОШ
WHERE
БАЗА_НАСТРОЕК.ПРОБЛЕМА= БАЗА_ОШ.ПРОБЛЕМА
AND БАЗА_НАСТРОЕК. РЕШЕНИЕ= БАЗА_ОШ.РЕШЕНИЕ;
Выводы по главе
Согласно требованиям, предъявляемым к разрабатываемому модулю, были разработаны:
-
Интерфейс, позволяющий реализовывать БД в доступном и понятном виде, а также доступно выводить информацию о результатах диагностики сетевого подключения с сервером данных.
-
Схема информационных потоков, позволяющая судить о связях между базами данных, с целью эффективно реализовать доступ к ним.
-
Алгоритмы сетевой диагностики различных уровней с целью представления информации пользователям разных категорий.
ГЛАВА 3. РЕАЛИЗАЦИЯ МОДУЛЯ БИС НА ОСНОВЕ ИНСТРУМЕНТАРИЯ MS VISUAL C++
3.1. Реализация подключения базы данных через использование ODBC – драйвера
Если приложению необходимо общаться с несколькими источниками данных, для взаимодействия с каждой из баз данных было необходимо написать свой код. Для решения возникшей проблемы Microsoft и ряд других компаний создали стандартный интерфейс для получения и отправки данных источникам данных различных типов. Этот интерфейс был назван open database connectivity, или открытая связь с базами данных.
C помощью ODBC прикладные программисты могут разрабатывать приложения для использования одного интерфейса доступа к данным, не беспокоясь о тонкостях взаимодействия с несколькими источниками.
Это достигается благодаря тому, что поставщики различных баз данных создают драйверы, реализующие конкретное наполнение стандартных функций из ODBC API с учетом особенностей их продукта. Приложения используют эти функции, реализованные в соответствующем конкретному источнику данных драйвере, для унифицированного доступа к различным источникам данных.
ODBC API
ODBC API
Рис.3.1. Архитектура ODBC
MFC (Microsoft Foundation Classes - библиотека на языке C++) усовершенствовала ODBC для разработчиков приложений. Истинный интерфейс ODBC является обычным процедурным API (Интерфейс прикладного программирования - Application Programming Interface). Вместо создания простой оболочки процедурного API, разработчики MFC создали набор абстрактных классов, представляющих логические сущности в базе данных.
Рассмотрим реализацию вставки базы данных через ODBC – драйвер используя CDatabase.
Класс CDatabase представляет собой класс, который обеспечивает связь с источником данных. Под источником данных может пониматься как непосредсвенно файл, в котором находится таблица, например dBase, так и файл с многими таблицами, например Microsoft Access или сервер баз данных Oracle, MS SQL Server и т.д. Для связи с источником данных используется интерфейс ODBC.
Установка соединения
Для работы необходимо включить описание функций, которые находятся в файле afxdb.h:
// пример
#include "afxdb.h"
Для начала работы необходимо, используя класс, создать текст при помощи конструктора. В конструктор нет необходимости передавать параметры. После создания объекта с ним можно проводить различные операции. Например: открывать базу данных, устанавливать таймауты соединения , закрывать и т.д.
// Описание конструктора CDatabase();
// пример
CDatabase cdbMyDB();
У данного класса есть всего один член данных. Это m_hdbc. Он указывает на текущее соединение ODBC. Имеет смысл, только если оно установлено. Эта переменная имеет тип HDBC.
Для установки соединения необходимо вызвать функцию Open:
virtual BOOL Open( LPCTSTR lpszDSN, BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = "ODBC;",
BOOL bUseCursorLib = TRUE );
throw( CDBException, CMemoryException );
Нет необходимости устанавливать все параметры, достаточно установить их только для первого. Первый параметр lpszDSN указывает на имя DNS для связи с источником данных. Эти имена находятся в настройке ODBC в панели управления на вкладке File DNS. Это имя можно установить в NULL, и тогда при выполнении программы будет предложен выбор источника.
// Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
cdbMyDB.Open(NULL);
}
При указании некорректного имени, выходит сообщение о ошибке.
/ Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
cdbMyDB.Open("Bad date source");
}
Для контроля над данной ситуацией необходимо воспользоваться обработкой прерываний VC++. В примере ниже перехватываются все прерывания возможные при открытии источника данных. В ответ на ошибку появится диалоговое окно.
// Пример
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("Bad date source");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
При указании правильного имени процесс установки связи может пойти двумя путями. Если с источником не связан конкретный файл, то появится диалоговое окно с предложением выбрать файл.
// Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}
В случае если с источником данных файл связан, никакой информации отображено не будет. Но установку связи можно проверить, вызвав функцию IsOpen, которая вернет истинное значение в случае успеха. Эта же функция поможет при работе и ответит на вопрос – установлена связь или нет. Например, если появиться потребность в использовании одного класса CDatabase для множества различных соединений.
// Описание BOOL IsOpen( ) const;
// Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen())
AfxMessageBox("Open Base");
else
AfxMessageBox("Not Open");
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}
По завершению работы источник данных необходимо закрыть, используя функцию Close.
// Описание virtual void Close( );
// Пример
void CDatebaseDlg::OnOpen()
{
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database");
if (cdbMyDB.IsOpen())
AfxMessageBox("Ok Open Base");
else
AfxMessageBox("Not Open");
cdbMyDB.Close();
}
catch(...)
{
AfxMessageBox("Error Open DNS");
}
}
Ниже описана процедура открытия с новым параметром и обработкой ошибок.
CDatabase cdbMyDB;
try
{
cdbMyDB.Open("MS Access 97 Database",TRUE);
// Если TRUE не указать, то по умолчанию FALSE
}
catch(CDBException cdbThrow)
{
AfxMessageBox(cdbThrow.m_strError);
}
3.2. Алгоритмы диагностики сетевых подключений
Для запуска подсистем проверки была создана форма функциональных клавиш запуска процедур проверки соединения.
Рис.3.2. Форма запуска проверки соединения
Проверка порта
Существует необходимость проверить какой-либо порт на возможность соединения по нему с указанным IP-адресом. Данную задачу выполнится с помощью следующего алгоритма:
Проверка наличия сетевых хостов
Проверка активности каждого сетевого порта
Вывод информации об активности каждого сетевого порта
Рис.3.3. Алгоритм проверки сетевого порта
Пингование
Еще одним способом проверки доступа к удаленному серверу является отсылка тестовых пакетов данных на шлюз сервера. Ниже представлена блок – схема алгоритма процедуры «пингования»: