Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по управлению данными.DOC
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
10.79 Mб
Скачать

База данных

Рис. 12

В настоящее время разработано большое число серверов баз данных, к числу которых относятся Interbase, Oracle, Informix, Microsoft SQL, MySQL и другие.

Мы рассматриваем сервер Interbase (версия 6.0). Он имеет ряд преимуществ: не требует больших объемов памяти; кроме того, поставляется в составе пакета CBuilder в виде локальной версии, размещаемой на том же компьютере, что и приложение - клиент, и используемой для отладки, и сетевой версии, размещаемой на компьютере - сервере и используемой для промышленной эксплуатации приложения.

10.1. Серверная часть

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

Пример логической модели:

При переходе к физической модели (Physical) для выбора сервера БД следует выполнить пункт основного меню Databases, Choose Database.

При этом появится окно, в котором следует выбрать нужный сервер (в нашем случае InterBase):

В логической модели рассматриваются отношения и атрибуты, а в физической – таблицы и столбцы.

Если в логической модели имена отношений и атрибутов были написаны по-русски, то необходимо в физической модели переименовать таблицы и столбцы в латинские эквиваленты. После этого следует конкретизировать размеры строковых полей:

Получится следующая физическая модель:

После этого следует выбрать пункт основного меню Tools, Forward Engineer. Появится окно, в котором следует выбрать режимы генерации операторов языка SQL. Рекомендуется отменить генерацию триггеров и исключений (Exception), генерацию видов и процедур. Затем следует нажать кнопку Report. При этом будет сгенерирован текстовый файл с расширением .sql (скрипт).

Корректировка сгенерированного текста скрипта. В результате генерации с помощью ERWIN структуры БД будет создано некоторое количество операторов языка SQL (Structured Query Language).

БД содержит различные объекты, из всего многообразия которых мы будем использовать таблицы, генераторы, исключения, просмотры и хранимые процедуры. Эти объекты называются метаданными.

Для работы с объектами существуют операторы языка SQL.

Рассмотрим эти объекты подробнее:

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

Столбцы. Создание таблицы включает определение ее столбцов. Основные атрибуты столбца: имя столбца, тип данных столбца, разрешение иметь в столбце нулевое (NULL) значение.

Типы данных. Данные в столбцах имеют определенные типы, которые могут быть разбиты на 4 класса: числовые, символьные, даты и BLOB - двоичные данные большого размера (binary large object), которые могут содержать данные неограниченного размера. Они используются для хранения рисунков и других неструктурируемых InterBase данных.

Числовые данные подразделяются на:

  • целые (INTEGER),

  • числа с плавающей точкой(FLOAT).

Символьные данные подразделяются на:

  • данные фиксированного размера (CHAR(n)),

  • данные переменного размера (VARCHAR(n)).

Данные типа даты могут содержать значения от 1-JAN-100 до 11-DEC-5941.

Для создания таблицы БД используется оператор CREATE TABLE, который включается в текст скрипта.

В примере создается таблица JOB из 7 столбцов. Каждый столбец имеет имя и тип. Первичный ключ таблицы содержит три столбца; внешний ключ содержит один столбец JOB_COUNTRY для связи с таблицей COUNTRY по полю COUNTRY. Ограничение CHECK позволяет не пропускать записи таблицы, не удовлетворяющие условию:

CREATE TABLE JOB (JOB_CODE INTEGER NOT NULL, JOB_GRADE INTEGER NOT NULL, JOB_COUNTRY VARCHAR(20) NOT NULL, JOB_TITLE VARCHAR(25) NOT NULL, MIN_SALARY REAL NOT NULL,MAX_SALARY REAL NOT NULL, JOB_REQUIREMENT BLOB,PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_COUNTRY), FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY), CHECK (MIN_SALARY < MAX_SALARY));

В группе CHECK можно определить условие, накладываемое на значения данных во время ввода значений в столбец:

<условие> = {VALUE <оператор> <значение>

| VALUE [NOT] BETWEEN <значение> AND <значение>

| VALUE [NOT] LIKE <значение>

| VALUE [NOT] IN (<значение> [, <значение> ...])

| VALUE IS [NOT] NULL

| VALUE [NOT] CONTAINING <значение>

| VALUE [NOT] STARTING [WITH] <значение>

| (<условие>)| NOT <условие>| < условие > OR < условие >

| < условие > AND < условие >}

<оператор> = = | < | > | <= | >= | !< | !> | <> | !=

Пример:

CHECK ((VALUE IS NULL) OR (VALUE > 1000));

Следующий пример контроля ограничивает вводимые значения четырьмя определенными значениями:

CHECK (VALUE IN ("software", "hardware", "other", "N/A"));

Следующий пример контроля позволяет только городам в Калифорнии быть введенными в столбец:

CHECK (VALUE LIKE "%, CA");

Таким образом, необходимо скрипт, сгенерированный с помощью ERWIN, пополнить операциями контроля.

Скрипт, сгенерированный ERWIN, для примера имеет вид:

/*Операторы создания таблиц с первичными и внешними ключами */

CREATE TABLE Predmet (np INTEGER NOT NULL,

namepred VARCHAR(20),

CONSTRAINT XPKPredmet PRIMARY KEY (np));

CREATE TABLE Teacher (nt INTEGER NOT NULL,

nameteacher VARCHAR(20),

CONSTRAINT XPKTeacher PRIMARY KEY (nt));

CREATE TABLE Class (ncl INTEGER NOT NULL,

nt INTEGER,

nameclass VARCHAR(3),

np INTEGER,

CONSTRAINT XPKClass PRIMARY KEY (ncl),

FOREIGN KEY (nt) REFERENCES Teacher,

FOREIGN KEY (np) REFERENCES Predmet);

CREATE TABLE Pupil (nchi INTEGER NOT NULL,

ncl INTEGER,

namechi VARCHAR(20),

ball INTEGER,

dat DATE,

CONSTRAINT XPKPupil PRIMARY KEY (nchi),

FOREIGN KEY (ncl) REFERENCES Class);

Создание БД на сервере InterBase. Общение с сервером InterBase удобно проводить интерактивно с помощью программы IBExpert. Рассматривается версия IBExpert 2.0.

При вызове на выполнение этой программы появляется окно, в котором прежде всего следует выполнить пункт меню Database, CreateDatabase:

Регистрация БД на сервере

В Interbase существует пользователь SYSDBA с паролем masterkey.

После того, как БД создана, с ней можно установить связь (пункт меню Database, Connect to Database).

После этого в левой части экрана всегда виден список объектов БД:

При выборе пункта меню Tools, Script Executive появится окно:

Следует открыть скорректированный скрипт, сгенерированный ERWIN, и выполнить его с помощью пункта меню Script, Run script.

Для создания различных объектов БД существуют пункты меню или кнопки; при создании объекта его нужно компилировать (пункт Compile) и подтвердить сделанные изменения (кнопка Commit).

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

При нажатии кнопки New Generator появляется окно:

Создание исключений. Исключение – это именованное сообщение, которое вызывается из хранимой процедуры при возникновении какой-либо ситуации. Для создания исключения нужно нажать кнопку New Exception.

Хранимые процедуры. Хранимая процедура - это программа, записанная как процедура в языке процедур InterBase, расширении SQL. Хранимые процедуры могут получать параметры от приложения и возвращать ему значения и могут вызываться из приложения.

Преимущества хранимых процедур:

  • они могут совместно использоваться несколькими приложениями;

  • при корректировке процедуры изменения автоматически отражаются на всех приложениях, использующих ее;

  • они выполняются сервером, а не клиентом, что сокращает сетевой трафик.

Синтаксис хранимой процедуры:

CREATE PROCEDURE имя процедуры [ (параметр тип [, параметр тип …])]

[RETURNS ( параметр тип [, параметр тип …])]

AS

<тело процедуры>;

<тело процедуры> =[ <список объявлений переменных>]

<блок>

< список объявлений переменных > =

DECLARE VARIABLE переменная тип;

[DECLARE VARIABLE переменная тип; …]

<блок> = BEGIN

<составной оператор>

[ <составной оператор> …]

END

При использовании имени переменной или параметра в операторе SQL этому имени предшествует двоеточие; в других операторах хранимой процедуры двоеточие не нужно.

Например, процедура SUB_TOT_BUDGET принимает номер отдела как входной параметр и возвращает сумму, среднее, минимальный и максимальный бюджеты:

CREATE PROCEDURE sub_tot_budget (head_dept CHAR(3))

RETURNS (tot_budget DECIMAL(12, 2), avg_budget DECIMAL(12, 2),min_budget DECIMAL(12, 2), max_budget DECIMAL(12, 2))

AS

BEGIN

SELECT SUM(budget), AVG(budget), MIN(budget), MAX(budget)FROM department WHERE head_dept = :head_dept INTO :tot_budget, :avg_budget, :min_budget, :max_budget;

SUSPEND;

END

Хранимые процедуры делятся на два типа:

  • процедуры выбора, которые должны возвращать один или несколько выходных параметров и могут использоваться в операторе SELECT аналогично таблице или просмотру; для возврата значений в вызывающую программу используется оператор SUSPEND.

Например:

CREATE PROCEDURE GET_EMP_PROJ (emp_no SMALLINT)

RETURNS (emp_proj SMALLINT) AS

BEGIN

FOR SELECT PROJ_ID FROM EMPLOYEE_PROJECT

WHERE EMP_NO = :emp_no INTO :emp_proj

DO

SUSPEND;/* Этот оператор возвращает указанные в SELECT значения для каждого шага цикла FOR */

END

Вызов такой процедуры происходит с помощью оператора вида

SELECT * FROM GET_EMP_PROJ(24);

  • процедуры выполнения, которые вызываются с помощью оператора EXECUTE PROCEDURE с возможной передачей входных параметров как констант. Такие процедуры выполняют действие, но не возвращают значений.

Например, EXECUTE PROCEDURE SUB_TOT_BUDGET (‘stt’);

В теле хранимой процедуры можно использовать операторы:

  • Оператор присваивания

переменная = выражение

  • Переход к последнему оператору END процедуры

EXIT

  • Повторение операторов составного блока, следующих за DO для каждой строки результата оператора SELECT

FOR оператор SELECT DO составной оператор

Пример:

FOR

SELECT DEPT_NO FROM DEPARTMENT WHERE HEAD_DEPT = :dno INTO :rdno

DO

BEGIN

EXECUTE PROCEDURE DEPT_BUDGET :rdno RETURNS :sumb;

tot = tot + sumb;

END

  • Проверка условия

IF (условие)

THEN составной оператор

[ELSE составной оператор]

  • Цикл: пока условие истинно, продолжается выполнение составного оператора.

WHILE (условие) DO составной оператор

Пример:

CREATE PROCEDURE SUM_INT (i INTEGER) RETURNS (s INTEGER)

AS

BEGIN

s = 0;

WHILE (i > 0) DO

BEGIN

s = s + i;

i = i - 1;

END

END

  • Оператор добавления данных к таблице:

INSERT INTO имя таблицы (столбец1, столбец2, ...) VALUES (значение1, значение2, ...);

Например:

INSERT INTO DEPARTMENT (DEPT_NO, DEPARTMENT, HEAD_DEPT, BUDGET,LOCATION,PHONE_NO)VALUES("000","CORPORATE HEADQUARTERS", NULL, 1000000, "MONTEREY","(408) 555-1234")

Для использования генератора следует вызывать функцию InterBase GEN_ID( ). Эта функция имеет два аргумента: имя вызываемого генератора и шаг изменения. Функция GEN_ID() чаще всего вызывается из процедуры, предназначенной для добавления.

CREATE PROCEDURE INS_CLASS (PNAMECLASS varchar(3),PNT INTEGER,PNP INTEGER) AS

begin

insert into class values

GEN_ID(Class,1),:pnt,:pnameclass,:pnp);

end

  • Оператор изменения данных в таблице:

UPDATE имя таблицы SET столбец = значение,… WHERE условие

Например:

UPDATE EMPLOYEE SET SALARY = SALARY + 2000 WHERE JOB_CODE = "Sales" AND HIRE_DATE < "01-Jan-1992"

  • Оператор удаления данных из таблицы:

DELETE FROM имя таблицы [WHERE условие]

Если WHERE отсутствует, то удаляются все строки.

Например:

DELETE FROM EMPLOYEE WHERE JOB_CODE = "Mngr"

  • Оператор выборки данных из таблиц (одной или нескольких):

SELECT [DISTINCT] столбцы или функции от столбцов FROM таблицы WHERE условие [ORDER BY столбец сортировки]

Примеры:

SELECT * FROM PHONE_LIST SELECT LAST_NAME, FIRST_NAME, PHONE_EXT FROM EMPLOYEE WHERE LAST_NAME = "Green";

SELECT COUNT(EMP_NO), MIN(HIRE_DATE), SUM(SALARY) FROM EMPLOYEE;

SELECT D.DEPARTMENT, D.MNGR_NO, E.SALARY FROM DEPARTMENT D,EMPLOYEE E WHERE D.DEPT_NO = S.DEPT_NO)ORDER BY D.DEPARTMENT;

Функции, используемые в процедурах InterBase:

AVG(значение) – вычисление среднего из числовых значений столбца или выражения:

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

CAST(значение AS тип данных) – преобразование значения в указанный тип данных (число в строку, строку в дату и т.д.).

COUNT (* | значение) – вычисление числа строк, которые удовлетворяют условиям запроса:

* - Вычисление числа строк в таблице

значение - Столбец или выражение.

MAX (значение) – вычисление максимального значения в столбце

значение - Столбец, константа, переменная, выражение или функция.

MIN (значение) – вычисление минимального значения в столбце

значение - Столбец, константа, переменная, выражение или функция.

SUM (значение) – вычисление суммы значений в столбце

значение - Столбец, константа, переменная, выражение или функция.

UPPER (строковое значение) – преобразование строки в верхний регистр

Для создания процедуры в IBExpert следует нажать кнопку New Procedure. Появится окно с заготовкой процедуры:

При просмотре процедуры в обычном режиме она показывается согласно синтаксису:

Ее текст можно корректировать, затем ее надо компилировать; при отсутствии ошибок выполнить нажатием кнопки Execute Procedure.

При этом появится окно, в котором будут запрашиваться значения параметров процедуры:

Таким образом следует создать процедуры добавления, изменения, удаления для всех таблиц БД и выполнить их для наполнения БД. Их заготовки можно создать, выделив любую таблицу и выбрав в контекстном меню пункт Create SUID procedures (то есть процедуры для выбора, изменения, добавления и удаления). При этом появится окно:

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

Пример процедуры, вызывающей исключение:

CREATE PROCEDURE INS_TEACHER (PNAMETEACHER VARCHAR(20))

AS

declare variable v integer;

begin

select count(*) from teacher where NAMETEACHER=:PNAMETEACHER into :v;

if (v=0) then

insert into teacher values (GEN_ID(Teacher,1),:pnameteacher) ;

else exception hasteacher;

end

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

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

Просмотр может быть создан как:

  • Вертикальное подмножество столбцов одной таблицы. Например, пусть таблица JOB в БД employee.gdb имеет 8 столбцов: JOB_CODE, JOB_GRADE, JOB_COUNTRY, JOB_TITLE, MIN_SALARY, MAX_SALARY, JOB_REQUIREMENT и LANGUAGE_REQ. Следующий просмотр выводит список продаж (подмножество столбцов) для всех работ (все строки) в таблице JOB:

CREATE VIEW JOB_SALARY_RANGES AS SELECT JOB_CODE, MIN_SALARY, MAX_SALARY FROM JOB;

  • Горизонтальное подмножество строк из одной таблицы. Следующий просмотр выводит все колонки в таблице JOB, но только подмножество строк, в которых MAX_SALARY меньше чем $15000:

CREATE VIEW LOW_PAY AS SELECT * FROM JOB WHERE MAX_SALARY < 15000;

  • Комбинированное вертикальное и горизонтальное подмножество столбцов и строк из одной таблицы. Следующий просмотр выводит только столбцы JOB_CODE и JOB_TITLE и только те работы, в которых MAX_SALARY меньше чем $15000:

CREATE VIEW ENTRY_LEVEL_JOBS AS SELECT JOB_CODE, JOB_TITLE, FROM JOB WHERE MAX_SALARY < 15000;

  • Подмножество строк и столбцов из нескольких таблиц. Следующий просмотр показывает просмотр, созданный из таблиц JOB и EMPLOYEE. Таблица EMPLOYEE содержит 11 столбцов: EMP_NO, FIRST_NAME, LAST_NAME, PHONE_EXT, HIRE_DATE, DEPT_NO, JOB_CODE, JOB_GRADE, JOB_COUNTRY, SALARY, FULL_NAME. Просмотр выводит два столбца из таблицы JOB и два столбца из таблицы EMPLOYEE и только те строки, в которых SALARY меньше чем $15000:

CREATE VIEW ENTRY_LEVEL_WORKERS AS SELECT JOB_CODE, JOB_TITLE, FIRST_NAME, LAST_NAME FROM JOB, EMPLOYEE WHERE JOB.JOB_CODE = EMPLOYEE.JOB_CODE AND SALARY < 15000;

Для создания нового просмотра в IB Expert следует нажать кнопку New View. При этом появится заготовка нового просмотра:

Можно увидеть данные в просмотре (закладка Data).

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

Создание пользователей и присвоение им привилегий. Можно создать нового пользователя с помощью пункта меню Tools, User Manager:

При добавлении нового пользователя появляется окно, в котором необходимо указать имя пользователя и его пароль, повторив его:

Необходимо создать столько пользователей, сколько действующих лиц описано в диаграмме Use Case в пакете Rational Rose при описании объектной модели задачи.

Пользователи нужны для присвоения им уникальных привилегий – прав на доступ к определенным таблицам для выполнения корректировки и/или просмотра и к определенным процедурам.

Информация о пользователях сохраняется в файле isc4.gdb, который расположен на компьютере, где установлен сервер Interbase (обычно в папке Program Files\Borland|Interbase).

Для присвоения пользователю привилегий нужно выбрать функцию IB Expert Grant Manager. В появившемся окне для выбранного пользователя можно указать привилегии для каждой таблицы, представления и для каждой процедуры. Для таблиц и представлений привилегии можно назначать на все виды корректировок и на выборку, а для процедур – только на выполнение. Привилегии назначаются и отменяются нажатием курсора мыши или клавиши «пробел».