- •Уральский гуманитарный институт
- •Содержание
- •Пояснительная записка
- •Рабочая программа Очная форма
- •Заочная форма
- •Практические задания
- •Цель практической работы:
- •Ожидаемый результат:
- •Цель практической работы:
- •Ожидаемый результат:
- •Тема. Построение моделей информационных систем средствамиrationalrose
- •Цель практической работы:
- •Ожидаемый результат:
- •Тема. Архитектура клиент – сервер. Сервер и база данныхinterbase
- •Цель практической работы:
- •Ожидаемый результат:
- •Дополнительные практикумы*
- •Проектирование информационных систем
Тема. Архитектура клиент – сервер. Сервер и база данныхinterbase
Практическая работа № 1
Тема:
Язык SQL. Программирование основных компонентов СУБД INTERBASE.
Цель практической работы:
Изучить язык SQL. Научить студентов формировать структуру базы данных, запросы, процедуры.
Ожидаемый результат:
Создание базы данных Interbase заданной структуры. Демонстрация работы запросов, процедур, триггеров.
Задача 1.
Формирование структуры БД Interbase.
Установка и запуск сервера InterBase
Сервер InterBase поставляется вместе с выпуском Delphi 7 Enterprise и устанавливается отдельно. Процесс установки этого сервера не сложен — достаточно просто подтверждать параметры, выбранные мастером установки. Единственный выбор мастера, который можно изменить,— это тип установки. Можно выбрать в окне мастера Select Components (Выбор компонентов) сокращенную установку (Compact Installation).
После завершения установки сервера InterBase 6.5 способ его запуска определяется при помощи специальной программы Interbase Manager. Сервер может запускаться либо автоматически при загрузке операционной системы (переключатель Automatic), либо вручную (переключатель Manual).
Приложение IBConsole
Все средства администрирования и работы с базами данных InterBase 6.5 (включая редактор SQL-запросов) находятся в одном приложении — IBConsole. Прежде, чем приступить к работе с этим приложением, убедитесь, что сервер InterBase уже запущен. Запустите приложение IBConsole при помощи меню Пуск или любым другим доступным способом. Внешний вид этого приложения при его первом запуске представлен на рисунке.
1. Выполните команду Server > Register или просто дважды щелкните мышью на корневом элементе древовидной структуры InterBase Servers, чтобы зарегистрировать сервер. В результате на экране появится диалоговое окно регистрации сервера и его подключения.
Здесь следует указать, к какому серверу будет выполняться подключение: к локальному - переключатель Local Server, или к удаленному - переключатель Remote Server. Локальным
является сервер, установленный на компьютере пользователя, а удаленным — сервер, доступ к которому выполняется через сеть. В случае удаленного подключения в поле Server Name указывается сетевое имя сервера или сетевой адрес, соответствующий протоколу, указанному в поле Network Protocol.
2. Щелкните мышью на переключателе Local Server.
В разделе Login Information указывается имя пользователя и пароль, без которых нельзя подключиться ни к одной базе данных.
Для создания баз данных в SQL используется команда CREATE DATABASE.
Создадим базу данных staff. gdb.
Для этого введите и выполните в окне Interactive SQL следующий SQL-оператор:
CREATE DATABASE "e:\programs\staff\base\staff.gdb" USER "SYSDBA" PASSWORD "masterkey" PAGE_SIZE = 4096 LENGTH = 10000 PAGES
В результате в каталоге e:\programs\staff\base будет создан файл базы данных staff.gdb. Размер этой базы данных не может превышать 4 Кбайт * 10000 = 40 Мбайт.
Для создания таблиц используется оператор SQL CREATE TABLE.
CREATE TABLE REGIONS
( Zip integer NOT NULL PRIMARY KEY, Area varchar(30),
Region varchar(30),
City varchar(20) NOT NULL )
В строках этой таблицы содержится следующая информация: почтовый индекс, название региона, название района и название населенного пункта.
Оператор удаления таблицы:
DROP TABLE имя таблицы Если таблица имеет связи с другими таблицами по внешним ключам, тогда команда DROP TABLE выполнена не будет.
Добавление данных
Для добавления строки данных в таблицу используется оператор INSERT. Например, добавим пару строк в таблицу REGIONS базы данных staff.gdb.
INSERT INTO REGIONS
VALUES (8320,'Киевская’,'','Борисполь');
INSERT INTO REGIONS
VALUES (8324,'Киевская','Бориспольский',‘Гора')
Просмотр данных
Для просмотра данных в таблицах используется команда SELECT. В простейшей форме эта команда имеет следующий синтаксис:
SELECT * FROM REGIONS или
SELECT DISTINCT Area From REGIONS
После выполнения этой команды будет выбрана только одна строка. Ключевое слово DISTINCT используется для выбора строк, в которых значения в указанных полях не повторяются.
Ключевое слово WHERE
Ключевое слово WHERE применяется в SQL для наложения условий на значения, выбираемые при помощи оператора SELECT. Выполните следующий оператор:
SELECT * FROM REGIONS
WHERE Zip = 8324
В результате будет выбрана одна строка, у которой в столбце Zip указано значение 8324.
В представленном ниже операторе осуществляется подсчет количества строк таблицы REGIONS, у которых значения столбца REGION начинается с "Борисп":
SELECT COUNT(*) FROM REGIONS
WHERE Region LIKE 'Борисп%'
В результате будет возвращено число 1.
Изменение данных
Для изменения информации, хранящейся в таблицах базы данных, используется команда SQL UPDATE. Рассмотрим примеры использования этой команды.
UPDATE STAFF
SET Salary = Salary + 100
WHERE PosID IN (SELECT PosID FROM POSS
WHERE PosLevel < 3)
В этом операторе значение поля Salary увеличивается на 100 в тех строках, в которых должности сотрудника соответствует уровень не выше 3.
Удаление строк
Для удаления строк таблицы используется команда DELETE. Например, для удаления всех строк таблицы FAMILY необходимо выполнить оператор:
DELETE FROM FAMILY или удаление по условию:
DELETE FROM FAMILY WHERE ID = 0
Задача 2.
Связи таблиц. Хранимые процедуры.
Напоминаем, что для администрирования базы данных InterBase используется программа IBConsole (Или конструктор Interbase Expert). В этой программе открывается окно Interactive SQL. При помощи этого окна можно выполнять SQL- команды, рассматриваемые в данной работе. Кроме того, по ходу изучения представленного материала рекомендуется исследовать изменения, вносимые в базу данных *.gdb, при помощи древовидной структуры главного окна программы IBConsole. Такая методика позволяет лучше разобраться в том, как представленные примеры реализуются на практике, а также лучше освоить основы администрирования баз данных InterBase.
Генераторы
Генератор (generator) — это последовательно возрастающее число, которое может автоматически вставляться в столбец при помощи функции GEN_ID(). Генераторы часто используются для формирования уникальных значений столбцов, входящих в первичный ключ. База данных InterBase может содержать любое количество генераторов, и они могут использоваться или обновляться в любой транзакции.
Создадим в базе данных staff.gdb генератор, который будут использоваться для занесения значений в первый столбец (столбец идентификатора) таблицы STAFF.
Выполните следующие команды SQL:
CREATE GENERATOR STAFF_ ID_GEN;
В результате в базе данных будет создано три генератора. Для того чтобы убедиться в этом, перейдите в основное окно программы IBConsole и выделите в древовидной структуре элемент Interbase Servers > Local Server > Databases > STAFF.GDB > Generators
Триггеры
Триггер (trigger) - это программа на языке SQL, которая выполняется при определенной операции над конкретной таблицей. Триггеры включаются при выполнении таких операций, как вставка (INSERT), обновление (UPDATE) и удаление (DELETE) данных. Создадим несколько триггеров в базе данных staff.gdb.
создадим триггер для таблицы STAFF, вызывающий функцию GENID для увеличения текущего значения соответствующего генератора.
SET TERM ^ ;
CREATE TRIGGER STAFFInsert FOR STAFF
BEFORE INSERT POSITION 0
AS BEGIN
NEW.ID = GEN_ID(STAFF_ID_GEN, 1);
END
Ключевое слово POSITION используется для определения порядка выполнения нескольких триггеров, связанных с одной и той же операцией. В данном случае POSITION 0 означает, что триггер выполняется первым среди всех триггеров, связанных с операцией INSERT.
В триггере в поле идентификатора добавляемой строки (NEW.ID) вносится значение соответствующего генератора, увеличенное на единицу.
Первичный ключ
В первичном ключе определены столбцы, которые содержат значения, уникальные для каждой строки таблицы. Для одной таблицы можно определить только один первичный ключ. Например, для таблицы REGIONS первичный ключ был установлен следующим образом:
CREATE TABLE REGIONS
( Zip integer NOT NULL RIMARY KEY),
В данном случае в первичный ключ входит только столбец zip.
Кроме того, для изменения структуры, включая наложение ограничений, можно после создания таблицы использовать команду ALTER TABLE:
ALTER TABLE REGIONS
ADD PRIMARY KEY (Zip)
Внешние ключи
Внешний ключ (foreign key) определяет столбец одной таблицы, значения которого должны существовать во второй таблице, которая называется внешней. В отличие от первичного ключа, внешний ключ не является уникальным индексом строки. Уникальными являются ключевые столбцы во внешней таблице. Добавление в таблицу внешнего ключа приводит к автоматическому созданию вторичного индекса по ключевым столбцам.
Также как и первичный, внешний ключ можно определять в команде CREATE TABLE или после создания таблицы при помощи команды ALTER TABLE ADD
FOREIGN KEY.
1. Создадим внешний ключ для таблицы STAFF:
ALTER TABLE STAFF
ADD FOREIGN KEY (PosID) REFERENCES POSS
Это ограничение назначает столбец PosID внешним ключом, который ссылается на аналогичный столбец таблицы POSS. Это означает, что введенные в таблице STAFF идентификаторы должностей должны существовать в таблице POSS, а также, что идентификаторы, использующиеся в таблице STAFF, нельзя удалить из таблицы POSS. Такая возможность закрепления связи между двумя таблицами называется ссылочной целостностью (referential integrity). Обеспечение целостности ссылок таблиц друг на друга выполняется при их создания или объявлении на уровне сервера базы данных, а не на уровне приложения.
Хранимые процедуры
Хранимая процедура (stored procedure) — это скомпилированная программа произвольной длины на языке SQL, которая хранится в базе данных вместе с другими объектами. Хранимые процедуры InterBase подразделяются на две основные разновидности: процедуры выбора (select procedure) и выполняемые процедуры (executable procedure). Процедуры выбора используются в операторе SELECT вместо таблицы, и, следовательно, должны возвращать наборы данных, тогда как для выполняемых процедур это не обязательно.
Хранимые процедуры создаются командой CREATE PROCEDURE, а удаляются командой DROP PROCEDURE.
Процедуры выбора
Создадим в базе данных staff.gdb процедуру формирования списка подчиненных подразделений. В данном случае подразумевается, что предприятие имеет иерархическую структуру подразделений. В таблице DEPS в столбце ParentDeptID указывается идентификатор "родительского" подразделения. Если родительского подразделения не существует (элементы на вершине иерархии), тогда в поле ParentDeptID содержится значение 0.
SET TERM ^ ;
CREATE PROCEDURE ChildDeptsList (pDeptID integer)
RETURNS (rDeptFullName varchar(100))
AS BEGIN
FOR SELECT DeptFullName FROM DEPS WHERE ParentDeptID = :pDeptID
INTO :rDeptFullName
DO SUSPEND;
END
В эту процедуру передается параметр pDeptlD, соответствующий идентификатору "родительского" подразделения, а в качестве результата возвращается список подчиненных подразделений.
В процедурах выбора возвращаемые данные определяются при помощи ключевого слова RETURNS. Параметры, перечисленные после имени процедуры, называются входными (input), а перечисленные после ключевого слова RETURNS — выходными (output). При обращении как к входным, так и к выходным параметрам в теле процедуры (между ключевыми словами BEGIN и END) перед их именами ставится символ ":".
Для возвращения строк результата в вызывающую программу используется конструкция FOR SELECT ... DO. Команда SUSPEND приостанавливает выполнение процедуры до следующего запроса. Перед приостановкой выполнения возвращаются значения, присвоенные выходным параметрам.
Выполняемые процедуры
Выполняемые процедуры отличаются от процедур выбора только тем, что в них может не использоваться оператор RETURNS. Создадим процедуру для удаления данных о сотруднике.
SET TERM ^
CREATE PROCEDURE DeleteEmp (pEmpID integer)
AS BEGIN
DELETE FROM STAFF
WHERE ID =:pEmpID;
END
Объявление переменных
В хранимых процедурах можно объявлять переменные. Для этого используется следующий синтаксис:
CREATE PROCEDURE имя_процедуры
AS
VARIABLE имя_переменной тип_данных [, ...] BEGIN
Обращение к переменным в теле процедуры осуществляется так же, как и к параметрам — через двоеточие.
Выполнение хранимых процедур
Выполнимые процедуры выполняются по команде EXECUTE PROCEDURE. Так, для удаления из базы данных информации о сотруднике с идентификатором 5 можно воспользоваться следующей командой:
EXECUTE PROCEDURE DELETEEMP 5
Обратите внимание на то, что при выполнении процедуры список параметров отделяется от названия процедуры пробелом.
Напишем еще одну процедуру, которая вычисляет сумму заработной платы сотрудников по столбцу SALARY каждый раз, когда в таблицу STAFF вносится новая строка.
SET TERM ^ ;
CREATE PROCEDURE "PROC_CALC_SUM"
(
"ID_STAFF" INTEGER
)
AS
BEGIN
UPDATE STAFF SET ST_SUM = (SELECT SUM (SALARY) FROM STAFF) WHERE (ID = :ID_STAFF);
SUSPEND;
END
Здесь введена переменная ID_STAFF, чтобы обновлялось значение только в одной добавляемой строке. Проверка индекса производится оператором WHERE. В таблице STAFF при этом добавляется еще один столбец ST_SUM, в который и вносится сумма заработных плат.
Теперь нужно создать триггер, который будет запускать эту процедуру при каждом вводе новой записи в таблицу STAFF:
SET TERM ^ ;
CREATE TRIGGER "TRIG_STAFF" FOR "STAFF"
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
EXECUTE PROCEDURE PROC_CALC_SUM (NEW.ID);
END
Триггер запускает процедуру PROC_CALC_SUM при внесении новой записи и передает в нее в качестве параметра идентификатор новой записи NEW.ID.
Внешние функции
В InterBase пользователи могут расширять диалект SQL путем введения собственных функций. Функции определяются в совместно используемых внешних библиотеках (в системе Windows это динамические библиотеки типа DLL). Эти функции объявляются для использования в базе данных InterBase с помощью команды DECLARE EXTERNAL FUNCTION. С этого момента функция помещается в базу данных и ведет себя точно также как любая другая внутренняя функция. Приведем пример исходного кода библиотеки DLL с определением функции конкатенации (слияния) двух строк.
library StrFLib;
uses SysUtils, Classes, System;
function ConcatStr(var Strl, Str2: string): string;
far cdecl export;
begin
Result := Strl + Str2;
end;
exports ConcatStr;
begin
end.
Рассмотрим пример команды SQL, которая делает описанную функцию доступной для использования в InterBase.
DECLARE EXTERNAL FUNCTION ConcatStr varchar(100), varchar(l00)
RETURNS varchar(200) BY VALUE
ENTRY_ POINT 'ConcatStr' MODULE_ NAME 'StrFLib.dll'
Теперь функцию ConcatStr можно использовать, например, так:
SELECT * FROM TABLE1
WHERE Columnl = ConcatStr(Column2,Column3)
Для удаления объявления внешней функции из базы данных используется команда DROP EXTERNAL FUNCTION.
Контрольные вопросы
Какие операторы языка SQLсоздают базу данных, таблицу, определяют типы переменных.
Какие операторы языка SQLпозволяют внести данные в поля таблицInterbase.
Как создать первичный ключ таблицы данных.
Как создать внешний ключ таблицы данных.
Что такое хранимая процедура, триггер.
Как создать и выполнить хранимую процедуру.