- •Федеральное агентство связи
- •Государственное образовательное учреждение высшего
- •Профессионального образования
- •«Поволжская государственная академия телекоммуникаций и информатики»
- •Разработка и эксплуатация удаленных баз данных
- •Конспект лекций
- •Введение
- •Раздел 1. Теория проектирования удаленных баз данных архитектуры удаленных бд Структурная схема терминов
- •Архитектуры бд
- •Локальная
- •Архитектура "файл-сервер"
- •Архитектура удаленных бд ("клиент-сервер")
- •Достоинства и недостатки различных архитектур приложений бд
- •Основные технологии доступа к данным Технология com (component object model)
- •Создание распределенных приложений на базе dCom
- •Технология corba (общая архитектура брокеров объектных запросов)
- •Технология midas
- •Доступ к данным по технологии ado
- •Технология com (component object model)
- •Составные части технологии com
- •Создание распределенных приложений на базе dCom
- •Технология midas
- •Доступ к данным по технологии ado
- •Введение в работу с удаленными бд
- •Организация сеанса связи с удаленной бд
- •Сервер interbase
- •Физическая организация базы данных формата InterBase
- •Типы данных в таблицах InterBase Типы столбцов таблиц формата InterBase
- •Организация сеанса связи с удаленной бд
- •Физическая организация удаленной бд
- •Создание и модификация таблиц Операции с таблицами
- •Операции с индексами
- •Графическое проектирование структуры бд Просмотры View
- •Создание бд
- •Создание и использование доменов
- •Компоненты доступа к данным. Запросы на выборку данных
- •Компоненты для доступа к данным и их отображения
- •Формирование запросов на выборку данных
- •Запросы на изменение данных Структурная схема терминов
- •Работа с записями
- •Методика изменения данных при помощи компонент
- •Использование хранимых процедур
- •Понятие и назначение хранимых процедур
- •Язык хранимых процедур
- •Использование триггеров и генераторов
- •Понятие триггера
- •Команды создания, изменения и удаления триггера
- •Генераторы - назначение, создание, установка начального значения
- •Функции, определяемые пользователем – назначение, создание, применение, порядок работы с ними
- •Сортировка, поиск и фильтрация в бд и выборках
- •Сортировка
- •Фильтрация записей
- •Организация данных в бд InterBase
- •Поиск в наборах данных
- •Манипулирование данными в выборках
- •Управление транзакциями и кэширование памяти
- •Механизм транзакций
- •Механизм кэшированных изменений
- •Перехват исключительных ситуаций и обработка ошибок
- •Понятие исключительных ситуаций
- •Обработка исключений
- •Формирование и вывод отчетов
- •Назначение и виды отчетов
- •Компоненты для формирования отчетов
- •Особенности проектирования клиентской части приложения в различных технологиях доступа
- •Особенности проектирования клиентской части приложения в различных технологиях доступа
- •Установка привилегий доступа к данным
- •Понятие привилегии, привилегии по умолчанию
- •Состав параметров при установлении привилегий
- •Назначение привилегий пользователю и группам пользователей
- •Отмена привилегий
- •Копирование, перенос и восстановление данных Создание резервной копии и восстановление бд
- •Восстановление транзакций
- •Регистрация новых пользователей
- •Копирование клиентской части приложения бд Структурная схема терминов
- •Утилита Install Shield
- •Определение файлов, объектов и элементов среды
- •Задание диалога при разархивировании
- •Создание прообраза копии диска
- •Создание копии на дискетах
Создание и использование доменов
Домен представляет собой именованное описание столбца и, по сути, является аналогом типа данных. После определения домена его имя можно использовать при описании других столбцов. Домен удобен в тех случаях, когда несколько столбцов, в том числе принадлежащих различным таблицам, имеют одинаковое описание. Перед использованием домена его нужно создать с помощью оператора:
CREATE DOMAIN <имя домена>[AS]<описание домена>
Пример:
CREATE DOMAIN D_Position AS varchar (20) not null;
CREATE TABLE Position (code integer not null primary key,
Position D_Position note varchar(50));
Описание домена, как и описание столбца, может включать различные ограничения, но, в отличие от описания столбца, имя домена не должно присутствовать в выражениях для ограничений: вместо имени домена в них используется слово VALUE.
Пример:
CREATE DOMAIN D_PRICE AS FLOAT CHECK(VALUE>0)
Компоненты доступа к данным. Запросы на выборку данных
Структурная схема терминов
Компоненты для доступа к данным и их отображения
Состав клиентского приложения одинаков при работе с локальными и удаленными БД. Используются одни и те же визуальные компоненты, компоненты TDataSource для связи визуальных и не визуальных компонентов, однако при работе с невизуальными компонентами есть ряд отличий.
Компонент TTable не желательно использовать, т.к. этот компонент требует передачи всех данных результата выполнения запроса к серверу всех данных, а не только визуализуемых.
Изменение записей БД следует производить не методами insert, delete, edit, cancel и т.д., а при помощи SQL-операторов INSERT, UPDATE, DELETE.
Нужно отрабатывать транзакции и выбирать соответствующий потребностям приложения уровень изоляции транзакции TIBTransaction.
Желательно использовать не более одного компонента TIBDatabase, TDatabase, и явно определить его в приложении для управления параметрами соединения (имя пользователя, пароль, и т.д.).
Бизнес-правила следует переносить на сервер, разгружая клиентское приложение.
Для обращения к хранимым процедурам на сервере следует использовать компонент TStoredProc.
Следует минимально загружать сетевой трафик путем явного старта и подтверждения транзакции. В компоненте TDatabase есть запуск транзакции Start From Transaction и завершение Commit.
Следует оптимизировать запросы к БД (операторы Select).
Компонент TIBEvent применяется для доступа к удаленным данным, чтобы получить от сервера уведомление о событии.
Формирование запросов на выборку данных
SELECT – оператор для выборки данных.
SELECT <список полей> FROM <таблица>
[WHERE<условие отбора> ORDER BY<список полей> [GROUP BY <список полей для группировки>]
[HAVING <Условия группирования>];]
Пример 1
SELECT Fam, Name, Year_b FROM Pers;
Пример 2
SELECT * FROM Pers;
При работе с InterBase использование русских символов, имен полей, переменных, таблиц недопустимо.
В выражении для полей могут использоваться строковые константы и операция "конкатенация".
Пример
SELECT "Отдел:" ||DEP, "ФИО:" ||FAM, "год рождения:" ||CAST (Year_b as char (4)) FROM Pers
Функция CAST преобразует число в строку.
Условие отбора WHERE может включать логические операции отношения (AND, OR, NOT, =, <, > и т.д.). Кроме того, в условия отбора может входить операция LIKE, которая проверяет наличие заданной последовательности символов строке.
Пример
SELECT Fam FROM Pers WHERE Fam LIKE 'Иванов%'
SELECT Fam FROM Pers WHERE Fam LIKE '%ван%'
В условии может также использоваться функция BETWEEN, задающая для указанного поля диапазон отбираемых значений:
BETWEEN значение1 and значение2
Пример
SELECT Fam, Year_b FROM Pers
WHERE Year_b BETWEEN 1950 and 1980
Операция IN определяет соответствие поля одному из элементов заданного множества.
Пример
SELECT Fam, Year_b FROM Pers
WHERE Fam IN ('Иванов',' Петров')
Служебные слова ORDER BY в операторе SELECT используется для задания порядком сортировки записи в выборке. По умолчанию порядок сортировки прямой и ORDER BY можно не писать. Если нужен обратный порядок сортировки, то пишут: ORDER BY <поле> DESC.
В конце операции SELECT могут использоваться следующие ключевые слова:
DISTINCT – означает, что в выборку не включаются повторяющиеся записи;
ALL – включаются все записи.
По умолчанию используется именно ALL и его можно не писать.
Совокупные характеристики
Для вычисления совокупных характеристик выборки используют специальные функции:
COUNT (<Условие>)
Пример
SELECT COUNT (*) FROM Pers;
Кроме того, есть функции, вычисляющие минимум, максимум и сумму.
Min (<поле>), Max (<поле>), Sum(<поле>);
Пример
SELECT min (Year_b), max (Year_b) FROM Pers;
Смешивание характеристик в одном операторе возможно при использовании GROUP BY;
Пример
SELECT Dep, COUNT (*) FROM Pers GROUP BY Dep
Вложенные запросы
SELECT может включать в себя другой SELECT
Пример 1
SELECT Fam, Year_b FROM Pers
WHERE Year_b>= ALL (SELECT Year_b from Pers1)
Поиск сотрудников в таблице Pers не старше любого из Pers1.
Пример 2
SELECT Fam, Year_b FROM Pers
WHERE Year_b >= ANY (SELECT Year_b from Pers1)
Поиск сотрудников в таблице Pers моложе хотя бы одного из Pers1.
В предложении where перед вложенным запросом могут использоваться ключевые слова:
EXISTS (SELECT …) – вложенный запрос возвращает True, если возвращено непустое множество значений;
SINGULAR (SELECT …) – вложенный запрос возвращает True, если при отборе возвращено только одно значение.
Объединения таблиц основаны на взаимно однозначном соответствии записей в этих таблицах. Можно строить запрос сразу по нескольким таблицам.
Пример 1
SELECT p1.Fam, p2.Fam, p1.Year_b FROM Pers p1, Pers p2
WHERE(p1.Year_b= p2.Year_b) and (p1.Fam: = p2.Fam)
Запрос, выбирающий ровесников так, чтобы избежать дублирования данных (чтобы один сотрудник не отображался как ровесник самого себя).
Пример 2
SELECT * FROM Pers, Dep
WHERE (Pers.Dep = Dep.Dep) AND (Dep.Proizv <> 'п');
Внешние объединения
Левое объединение LEFT OUTER join … on включает все записи первой таблицы.
Пример
SELECT * FROM Pers LEFT OUTER join
Chef on Pers.Fam=Chef.Fam;
Правое объединение RIGHT OUTER join … on включает все записи второй таблицы, если даже в первой их нет.
Пример
SELECT * FROM Pers RIGHT OUTER join
Chef on Pers.Fam = Chef.Fam;
Полное объединение FULL OUTER join … on включает объединение записи обеих таблиц, независимо от их соответствия.
Пример
SELECT * FROM Pers FULL OUTER join
Chef on Pers.Fam=Chef. Fam;
Выполнение SCRIPT-файлов (файлы сценария)
Операторы создания БД, таблиц, процедур, триггеров можно хранить и выполнять из файла. Файл создается в текстовом редакторе, по мере необходимости редактируется, а запускается из утилиты WISQL через основное меню File/Run SQL Script.
Тогда в начале файла необходимо использовать оператор SET TERM. Этот оператор используется для назначения нового разделителя вместо ";".
Пример
SET TERM ###;
CREATE PROCEDURE FIND_MAX_KOL(IN_TOVAR VARCHAR(20))
BEGIN
SELECT MAX (KOL) FROM RASHOD
WHERE TOVAR = :IN_TOVAR
INTO: MAX_KOL;
SUSPEND;
END###
SET TERM ; ## #