Работа с базами данных

         

ДИНАМИЧЕСКИЙ SQL


ЛАБОРАТОРНАЯ РАБОТА 6

ДИНАМИЧЕСКИЙ SQL

Цель работы

Приобретение практических навыков работы со средствами динамического SQL при написании программ на ESQL/C.

Содержание работы и методические указания

к ее выполнению

С помощью динамического SQL программа-клиент выполняет программное формирование оператора SQL для его последующего исполнения, делая это в три этапа:

программа собирает текст оператора SQL в виде символьной строки, хранящейся в программной переменной; в общем случае это может быть не один, а несколько операторов SQL, разделенных точкой с запятой;

программа выполняет оператор Prepare, который обращается к серверу баз данных для анализа текста оператора и подготовки его к выполнению;

программа использует оператор Execute для выполнения подготовленного оператора.

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

в динамический оператор Select нельзя включать спецификатор Into;

в любом месте, где главная переменная могла бы появиться в выражении, ей соответствует знак вопроса.



Оператор Prepare создает структуру данных, имеющую имя и отображающую строку символов с текстом оператора SQL.

Подготовленный по оператору Prepare динамический оператор (группу операторов) можно многократно выполнять. С помощью оператора Execute выполняются операторы, отличные от операторов Select, а также операторы Select, которые возвращают в качестве результата одну строку. Если оператор Select возвращает более одной строки, динамический оператор Select выполняется не с помощью оператора Execute, а подключается к курсору и в дальнейшем используется обычным образом с помощью курсорных средств. В обоих случаях при выполнении динамического оператора с помощью спецификатора Using ему передаются главные переменные, участвующие в выражениях и принимающие возвращаемые значения и, по сути, играющие роль фактических параметров. Как ограничение, следует отметить, что знак вопроса нельзя использовать вместо идентификаторов SQL, таких как имя базы данных, таблицы или столбца: эти идентификаторы должны указываться в тексте оператора при его подготовке, возможно, как полученные из пользовательского ввода.


Последовательность выполнения лабораторной работы:

Изучить синтаксис и правила использования операторов Prepare, Execute (см. Приложение 2), а также особенности работы с курсором при выполнении динамического оператора SQL.

Разработать и отладить набор ESQL/С-программ, решающих задачи из соответствующего варианта заданий. Результатом работы программ является одна или несколько строк, которые подлежат выводу на экран с соответствующими пояснительными заголовками.

Требования к разрабатываемой программе

Разрабатываемые ESQL/C-программы должна удовлетворять следующим требованиям:

обеспечивать необходимую обработку ошибок;

использовать аппарат транзакций;

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

необходимые параметры, определяющие условия задачи, вводятся с клавиатуры и передаются в строку с текстом динамического оператора SQL;

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

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

программа должна быть достаточно документирована.



Варианты заданий



Вариант 1.

1. Выдать полную информацию о поставщике, имеющим максимальный рейтинг (с использованием оператора Execute).

2. Получить номера изделий, для которых детали полностью поставляет поставщик с указанным номером (параметр - номер поставщика (S1)).

3. Выдать номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью, номер которой указывается, в количестве, большем, чем средний объем поставок данной детали для этого изделия (параметр - номер детали (P1)).

Вариант 2.

1. Выдать полную информацию об изделии, изготавливаемом в городе, в котором проживает поставщик с максимальным рейтингом (с использованием оператора Execute).

2.


Получить общее количество деталей с указанным номером, поставляемых некоторым поставщиком (параметры - номер детали (P1), номер поставщика (S1)).

3. Выдать номера изделий, использующих только детали, поставляемые некоторым поставщиком (параметр - номер поставщика (S1)).

Вариант 3.

1. Выдать полную информацию о детали, имеющей максимальный вес (с использованием оператора Execute).

2. Получить общее число изделий, для которых поставляет детали поставщик с указанным номером (параметр - номер поставщика (S1)).

3. Выдать номера изделий, детали для которых поставляет каждый поставщик, поставляющий какую-либо деталь указанного цвета (параметр - цвет детали (красный)).

Вариант 4.

1. Выдать общий объем поставок деталей красного цвета (с использованием оператора Execute).

2. Получить полный список деталей для всех изделий, изготавливаемых в некотором городе (параметр - название города (Лондон)).

3. Выдать номера деталей, поставляемых каким-либо поставщиком из указанного города (параметр - название города (Лондон)).

Вариант 5.

1. Выдать полную информацию об изделии, имеющем максимальный объем поставок деталей (с использованием оператора Execute).

2. Получить список всех поставок, в которых количество деталей находится в некотором диапазоне (параметры - границы диапазона (от 300 до 750)) .

3. Выдать номера и названия деталей, поставляемых для какого-либо изделия из указанного города (параметр - название города (Лондон)).

Вариант 6.

1. Выдать общий объем поставок деталей для изделия J2 (с использованием оператора Execute).

2. Получить цвета деталей, поставляемых некоторым поставщиком (параметр - номер поставщика (S1)).

3. Выдать номера и фамилии поставщиков, поставляющих некоторую деталь для какого-либо изделия в количестве, большем среднего объема поставок данной детали для этого изделия (параметр - номер детали (P1)).

Вариант 7.

1. Выдать общий объем поставок деталей для изделия с максимальным объемом поставок (с использованием оператора Execute).

2.Получить названия изделий, для которых поставляются детали некоторым поставщиком (параметр - номер поставщика (S1)).

3. Выдать номера изделий, для которых средний объем поставки некоторой детали больше максимального объема поставки любой детали для указанного изделия (параметры - номер детали (P1), номер изделия (J1)).



Контрольные вопросы



Каково назначение и синтаксис оператора Prepare?

Каково назначение и синтаксис оператора Execute?

Каковы особенности использования динамических операторов SQL?

Что такое динамические главные переменные? Для чего они используются?

С какими операторами связано использование динамических главных переменных?

Каково назначение оператора Execute Immediate?


ДОСТУП К БАЗАМ ДАННЫХ ПОСРЕДСТВОМ CGI-СКРИПТА, НАПИСАННОГО НА ЯЗЫКЕ ESQL


Лабораторная работа 9

ДОСТУП К БАЗАМ ДАННЫХ ПОСРЕДСТВОМ CGI-СКРИПТА, НАПИСАННОГО НА ЯЗЫКЕ ESQL/C

Цель работы

Ознакомиться с основными понятиями разработки CGI-скриптов с целью написания простейших CGI-программ доступа к базам данных с использованием языка ESQL/C.

Содержание работы и методические указания к ее выполнению

Для выполнения работы необходимо

изучить основы языка разметки гипертекста HTML;

ознакомиться со структурой спецификации CGI и CGI-скрипта;

изучить необходимые конструкции HTML-формы;

ознакомиться с переменными CGI-окружения;

изучить алгоритм обработки данных HTML-формы с использованием методов GET и POST;

с использованием средств языка ESQL/C разработать и отладить программу доступа к базе данных.

Общая схема доступа к базам данных с использованием CGI-скриптов имеет вид:

[ZEBR_TAG_P ALIGN="JUSTIFY">Спецификация CGI описывает формат и правила обмена данными между программным обеспечением WWW-сервера и запускаемой программой и представляет собой общую среду и набор протоколов для внешних приложений, которые используются при взаимодействии с Web-сервером.

CGI-программа (CGI-скрипт) представляет собой программу локальной операционной системы сервера (в двоичном виде или в виде программы для интерпретатора), которая может быть вызвана из среды WWW. Для инициирования CGI достаточно, чтобы в URL-адресе был указан путь до запускаемой программы. Программное обеспечение WWW-сервера исполняет эту программу, передает ей входные параметры и возвращает результаты ее работы, как результат обработки запроса, клиенту.

С целью облегчения администрирования CGI-программ, а также для удовлетворения требованиям безопасности CGI-программы группируются в одном или нескольких явно указанных серверу каталогах. При выполнении лабораторной работы в качестве таких каталогов выступают каталоги cgi-bin в домашней директории пользователя или в директории public_html. При этом

права доступа для каталога, в котором хранятся CGI-скприпты, должны быть самые широкие, иначе скрипт не сможет создавать файлы, нужные ему для работы (кроме того, такие же права должны быть и у файлов, к которым обращается скрипт);


файлы CGI-скриптов (как, правило, с расширением cgi) должны быть обязательно исполняемыми.

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

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

Метод передачи данных (наиболее применяемые POST и GET).

Некоторый объект формы, при нажатии на который произойдет пересылка данных.

Форма задается в HTML-документе с помощью тега FORM. Все элементы управления находятся внутри контейнера <FORM>...</FORM>.

<FORM action="http://.......cgi" method="GET"|"POST" enctype="encodingType" name="formName" target="windowName" onSubmit="Handler"> ... Поля формы ...

</FORM>

Среди атрибутов HTML-формы для целей CGI-программирования наиболее важны

action. Этот атрибут задает URL-адрес программы (CGI-скрипта), которая будет обрабатывать данные формы. Если он опущен, используется URL-адрес текущего документа;

method. Задается метод. По умолчанию предполагается GET.

Основными методами являются методы GET и POST. В зависимости от метода (GET или POST) данные формы будут помещены в переменную окружения QUERY_STRING или поданы на стандартный ввод STDIN. В случае метода GET, используемого по умолчанию, данные добавляются в конец URL-адреса и отделяются знаком "?". С помощью метода POST информация, введенная пользователем, посылается непосредственно в сценарий с помощью выходного потока сервера STDOUT и входного потока STDIN вашего сценария. Преимуществом использования метода POST является неограниченность длины передаваемого сообщения и безопасность передачи по сравнению с GET.



При нажатии некоторой кнопки на форме HTML документа происходит передача данных броузером серверу, на котором находится программа-обработчик данных. Основная работа такой программы заключается в:

получении данных формы HTML-документа в виде строки, в которой перечислены значения всех элементов HTML формы, инициировавшей запуск программы (данная строка записана в соответствие с четко определенным форматом);

разборе полученной строки;

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

формировании HTML-документа, который будет передан сервером программе-броузеру.

Обработка CGI-скриптом данных формы составляет шаблонную часть скрипта.

Данные, веденные в форме, передаются CGI-модулю в виде последовательности символов через входной поток (метод POST) или переменную CGI-окружения (метод GET) в формате:



имя=значение&имя1=значение1&...&имяN=значениеN,



где имяi - значение параметра name из элемента HTML-формы, значениеi - введенное или выбранное значение независимо от его типа.

Алгоритм обработки передаваемой в CGI-скрипт строки данных состоит в разделении ее на пары имя=значение и декодирования каждой пары, учитывая, что все пробелы в введенных значениях в форме сервером были заменены символом "+" и символы с десятичным кодом больше 128 преобразованы в символ "%" и следующим за ним шестнадцатеричным кодом символа.

После шаблонной части CGI-скрипта следует содержательная часть, в которой можно анализировать полученные данные, обращаясь, при необходимости, к различным таблицам баз данных. При написании CGI-скрипта на языке ESQL/C работа с базой данных ведется средствами встроенного языка SQL и главных переменных, через которые передаются и возвращаются данные к серверу баз данных. Результаты обработки данных, полученных из базы данных, а также другие информационные сообщения передаются функцией printf() в выходной поток с учетом форматирования HTML-документа.



CGI-скрипт, запускаемый из среды WWW, должен содержать информацию о сервере баз данных в своем теле. Эта информация состоит в задании в CGI-скрипте системных переменных, определяющих каталог с программным обеспечением сервера, имя сервера, параметры перекодировки и прочие параметры.

Важной особенностью работы с базой данных посредством CGI-скрипта является обеспечение достаточных условий безопасности в отношении данных.

В том случае, когда любой пользователь без ограничений может иметь доступ к данным, средствами программы dbaccess, либо средствами иного программного приложений владелец базы данных SQL-оператором

Grant connect to nobody

предоставляет пользователю операционной системы nobody минимальные права, в том числе в отношении баз данных. Это позволяет при написании CGI-скрипта использовать простейший вариант подключения к серверу баз данных без проверки индивидуальных полномочий пользователя.

$Connect to 'database@server_name';

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

Revoke connect from nobody

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

$Connect to 'database@server_name' user 'name' using $parol;

Последовательность выполнения лабораторной работы

Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.

Разработать и отладить HTML-формы для ввода данных пользователя согласно варианту задания.

Средствами языка ESQL/C разработать и отладить CGI-скрипты для обработки данных HTML-формы и доступа к базе данных.



После выполнения лабораторной работы привести базу данных в исходное состояние.

Требования к разрабатываемой программе

Разрабатываемые программы должна удовлетворять следующим требованиям:

разрабатываемое программное приложение должно содержать HTML-документ с формой для ввода данных и CGI-скрипт, вызываемый по окончании работы с HTML-формой;

CGI-скрипт должен быть написан на языке ESQL/C;

ввод параметров задания в HTML-форме может быть осуществлен либо путем ввода значений в текстовом виде, либо посредством выбора значений из предлагаемого списка;

программа должна быть написана в предположении, что любой пользователь без ограничений может иметь доступ к данным;

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

все действия в отношении базы данных должны выполняться в рамках транзакций;

программа должна быть достаточно документирована.

Варианты заданий

Вариант 1

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

Увеличить рейтинг поставщика, выполнившего наибольшую поставку некоторой детали, на указанную величину.

Вариант 2

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

Изменить цвет самой тяжелой детали на указанный.

Вариант 3

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

Вставить поставщика с заданными параметрами.

Вариант 4

Вывести информацию о поставщиках, поставивших указанную деталь в заданный период.

Удалить поставщика, выполнившего меньше всего поставок.

Вариант 5

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

В таблице поставок изменить номер поставщика при заданном номере детали и изделия.

Вариант 6

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

Увеличить рейтинг поставщика, выполнившего больший суммарный объем поставок, на указанную величину.



Вариант 7

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

Изменить название и город детали с максимальным весом на указанные значения.

Вариант 8

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

Увеличить рейтинг поставщика, выполнившего большее число поставок, на указанную величину.

Контрольные вопросы

Какова общая схема доступа к базам данных посредством CGI-скриптов?

Каково назначение пустой строки, генерируемой CGI-скриптов?

Каковы основные элементы HTML-формы?

Каково назначение элемента action HTML-формы?

В каком виде данные, введенные в форме, передаются CGI-модулю?

В чем состоит особенность формата данных, передаваемых из HTML-формы CGI-модулю?

Какова общая схема работы CGI-скрипта, вводящего данные посредством HTML-формы?

В чем разница методов GET и POST?

Как в CGI-скрипте задать системные переменные, определяющие параметры сервера базы данных?

Каковы способы предоставления всем пользователям одинаковых полномочий на доступ к данным из CGI-скрипта?

Каковы способы предоставления пользователям индивидуальных привилегий на доступ к данным из CGI-скрипта?

В чем сильные и в чем слабые стороны CGI-технологии?


ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ


ЛАБОРАТОРНАЯ РАБОТА 12

ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ

Цель работы

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

Содержание работы и методические указания

к ее выполнению

Цель инфологического этапа проектирования состоит в получении семантических (концептуальных) моделей, отражающих предметную область и информационные потребности пользователей. В качестве инструмента для построения семантических моделей данных на этапе инфологического проектирования является неформальная модель "Сущность-Связь" (ER-модель - Entity-Relationship). Моделирование предметной области базируется на использовании графических диаграмм, включающих небольшое число разнородных компонентов.

Основными понятиями ER-модели являются сущность, связь и атрибут.

Сущность (объект) - это реальный или представляемый объект предметной области, информация о котором должна сохраняться и быть доступна. Различают такие понятия, как тип сущности и экземпляр сущности. Понятие тип сущности относится к набору однородных предметов, событий, личностей, выступающих как единое целое. Экземпляр сущности относится к конкретной вещи в наборе. В диаграммах ER-модели сущность представляется в виде прямоугольника (в нотации Баркера), содержащего имя сущности.

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

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

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

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

Среди бинарных связей существуют три фундаментальных вида связи: один-к-одному (1:1), один-ко-многим (1:M), многие-ко-многим (M:M). Связь один-к-одному (1:1) существует, когда один экземпляр одной сущности связан с единственным экземпляром другой сущности. Связь один-ко-многим (1:M) имеет место, когда один экземпляр одной сущности связан с одним или более экземпляром другой сущности и каждый экземпляр второй сущности связан только с одним экземпляром первой сущности. Связь многие-ко-многим (М:N) существует, когда один экземпляр одной сущности связан с одним или более экземпляром другой сущности и каждый экземпляр второй сущности связан с одним или более экземпляром первой сущности.

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

Все связи требуют описания. Описание должно обеспечивать:

идентификатор связи;

формулировку имен связи с точки зрения каждой участвующей сущности;

вид связи (множественность и условность);

формулировку того, как связь была формализована.

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

Все сущности относятся к одному из четырех классов:

стержневые;

ассоциативные;

характеристические;

обозначающие.

Стержневая сущность (стержень) представляет собой независимую сущность.



Ассоциативная сущность (ассоциация) - это сущность, формализующая связь вида M:N между двумя или более сущностями или связь вида 1:1 между экземплярами сущностей.

Характеристическая сущность (характеристика) представляет собой сущность, формализующую связь вида 1:M или 1:1. Единственная цель характеристики в рамках рассматриваемой предметной области состоит в описании или уточнении некоторой другой сущности.

Обозначающая сущность (обозначение) - это сущность, также формализующая связь вида 1:M или 1:1 между двумя сущностями, но отличающаяся от характеристики тем, что не зависит от обозначаемой сущности.

К числу более сложных элементов ER-модели относятся подтипы и супертипы сущностей. Сущность может быть расщеплена на два или более взаимно исключающих подтипа, каждый из которых имеет общие атрибуты и/или связи. Эти общие атрибуты и/или связи явно определяются один раз на более высоком уровне. В подтипах могут определяться собственные атрибуты и/или связи. Сущность, на основе которой определяются подтипы, называется супертипом. Подтипы должны образовывать полное множество, т.е. любой экзем-пляр супертипа должен относиться к некоторому подтипу. Аналогично языкам объектно-ориентированного программирования вводится возможность наследова-ния типа сущности исходя из одного или нескольких супертипов.

В случае очень большого числа сущностей и связей между ними применяется менее наглядный, чем язык ER-диаграмм, но более содержательный язык инфологического моделирования, в котором сущности и связи представляются предложениями вида

СУЩНОСТЬ (атрибут 1, атрибут 2 , ..., атрибут n)

СВЯЗЬ [СУЩНОСТЬ S1, СУЩНОСТЬ S2, ...] (атрибут 1,..., атрибут n).

Последовательность выполнения лабораторной работы:

1. Выделить необходимый набор сущностей, отражающих предметную область и информационные потребности пользователей.

2. Определить необходимый набор атрибутов каждой сущности, выделив идентифицирующие атрибуты.

3. Классифицировать атрибуты каждой сущности (описательные, указывающие, вспомогательные).



4. Определить сущности вида подтип/супертип, где это необходимо.

5. Определить связи между сущностями.

6. Проанализировав структуру связей, исключить избыточные.

7. Определить множественность и условность связей.

8. Дать формулировку связей с точки зрения каждой участвующей сущности.

9. Формализовать связи вида 1:1, 1:M, M:N.

10. Классифицировать сущности, разделив их на стержневые, ассоциативные, характеристические, обозначающие.

11. Построить ER-диаграмму модели базы данных.

12. Описать модель базы данных на языке инфологического проектирования.

13. Оформить раздел отчета "Инфологическое проектирование модели базы данных", включив в него информацию из пп. 1 - 12.



Контрольные вопросы



Каковы задачи, решаемые на этапе инфологического проектирования?

В чем состоит отличие понятия типа сущности и элемента сущности?

Каковы способы представления сущности?

Каковы правила атрибутов?

Как классифицируются атрибуты?

Что такое безусловная, условная, биусловная, рекурсивная связь?

Каковы фундаментальные виды связей?

Как формализуется связь 1:1?

Как формализуется связь 1:M?

Как формализуется связь M:N?

Что такое подтип и супертип?

Что такое композиция связей?


ИСПОЛЬЗОВАНИЕ ЯЗЫКА PHP ДЛЯ ДОСТУПА К БАЗАМ ДАННЫХ


Лабораторная работа 10

ИСПОЛЬЗОВАНИЕ ЯЗЫКА PHP ДЛЯ ДОСТУПА К БАЗАМ ДАННЫХ

Цель работы

Ознакомиться с базовыми конструкциями языка PHP с целью написания с их использованием простейших PHP-программ доступа к базам данных.

Содержание работы и методические указания к ее выполнению

Для выполнения работы необходимо

ознакомиться с синтаксисом языка PHP;

изучить особенности передачи значений переменных HTML-формы в переменные PHP;

ознакомиться c набором функций для общения с СУБД Informix;

с использованием средств языка PHP разработать и отладить программу доступа к базе данных.

Язык РНР - это действующий на стороне сервера встраиваемый в HTML язык, имеющий синтаксис, близкий к языку Си. Язык РНР дает возможность вставлять в файлы HTML инструкции языка PHP для создания динамического содержания. Эти инструкции обрабатывает препроцессор-интерпретатор РНР и заменяет их тем содержимым, которое производит этот код. PHP-программа может целиком состоять из конструкций языка PHP, а может быть смесью конструкций языков PHP и HTML. Стандартное расширение файла с PHP-программой - php.

Одним из распространенных применений РНР является работа с базами данных. Для целого ряда баз данных РНР имеет собственную поддержку, а другие доступны через ODBC-функции РНР. При вызове PHP-программы URL-адрес должен содержать номер порта, через который работает PHP:

html://fpm.ami.nstu.ru:81/~pmxxyy/t1.php

К особенностям языка PHP относятся:

возможность встраивать конструкции языка PHP в HTML-документ;

возможность включать в PHP-программу файлы;

наличие достаточного набора встроенных функций;

возможность определять собственные переменные, строки, массивы, объекты;

наличие необходимого набора управляющих структур;

возможность вводить собственные функции.

Одна из наиболее удобных особенностей PHP - это способность автоматически передавать значения переменных из HTML-форм в переменные PHP. PHP автоматически генерирует набор переменных, имена которых совпадают с именами объектов в HTML-форме и содержащих значения данных объектов.
В результате отпадает необходимость в выполнении рутинного преобразования, связанного с разбором последовательности

имя=значение&имя1=значение1&...&имяN=значениеN

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

В приведенной ниже таблице представлен минимальный набор функций, необходимых для написания PHP-программ, общающихся с СУБД Informix.

1. int ifx_connect (string database, string user, string password) - cоздать соединение с сервером Informix
. Входные параметры: Database - имя базы данных;

user - имя пользователя

password - пароль.

. Возвращаемое значение: идентификатор соединения, если соединение прошло успешно, и равен 0 в противном случае.
2. int ifx_query (string query, int link_id, int cursor_type) - выполнить запрос к базе
. Входные параметры: query - строка SQL-запроса;

link_id - идентификатор соединения;

cursor type - тип курсора

. Возвращаемое значение: значение 1 или 0 в зависимости от успеха выполнения операции.
3. array ifx_fetch_row (int result_id, mixed [position]) - получить строку запроса как массив
. Входные параметры: result_id - идентификатор результата, возвращенный функцией ifx_query() (только для запросов типа select);

[position] - параметр из списка: "NEXT", "PREVIOUS", "CURRENT", "FIRST", "LAST" или номер.

. Возвращаемое значение: строка таблицы базы данных, возвращаемая как массив.
4. string current (array row) - получить очередное поле из строки таблицы базы данных.
. Входные параметры: array row- строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: очередное поле строки таблицы.
5. string next (array row) - получить следующее поле из строки таблицы базы данных.
. Входные параметры: array row - строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: следующее поле строки таблицы.
6. int reset( array$row) - перейти в начало строки.
. Входные параметры: array row - строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: нулевая позиция строки результата.
7. string key( array$row) - перейти в начало строки.
. Входные параметры: array row - строка таблицы базы данных, возвращенная функцией ifx_fetch_row().
. Возвращаемое значение: имя очередного поля строки результата.
8. int ifx_affected_rows (int result_id) - получить число столбцов, обработанных запросом
. Входные параметры: result_id - результат, возвращенный функцией ifx_query().
. Возвращаемое значение: Возвращается число столбцов, обработанных запросом, ассоциированных с result_id. Для вставок, обновлений и удалений - это реальное количество обработанных столбцов. Для выборок - ожидаемое количество.
9. int ifx_free_result (int result_id) - освободить ресурсы запроса
. Входные параметры: result_id - результат, возвращенный функцией ifx_query().
. Возвращаемое значение: Освобождает ресурсы, занятые запросом с идентификатором результата result_id. Возвращает 0 в случае ошибки.
10. int ifx_close (int [link_identifier]) - закрыть соединение с Informix
. Входные параметры: link_id - идентификатор соединения;
. Возвращаемое значение: закрывает соединение с Informix. Если идентификатор ссылки не указан, предполагается последнее установленное соединение.
<


Общая схема написания PHP-программы, выполняющей взаимодействие с базой данных, мало отличается от структуры CGI-скрипта, написанного любыми другими средствами, разница состоит лишь в используемых средствах:

подключиться к серверу баз данных и зарегистрироваться;

выбрать базу данных, которая будет использоваться;

отправить запрос SQL на сервер и получить данные;

отключиться от сервера баз данных.

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

Последовательность выполнения лабораторной работы

Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.

Разработать и отладить HTML-формы для ввода данных пользователя согласно варианту задания (можно модифицировать HTML-формы из предыдущей лабораторной работы).

Разработать и отладить PHP-программы для обработки данных HTML-форм и доступа к базе данных.

После выполнения лабораторной работы привести базу данных в исходное состояние.

Требования к разрабатываемой программе

Разрабатываемые программы должна удовлетворять следующим требованиям:

разрабатываемое программное приложение должно содержать HTML-документ с формой для ввода данных и PHP-программу, вызываемую по окончании работы с HTML-формой;

ввод параметров задания в HTML-форме может быть осуществлен либо путем ввода значений в текстовом виде, либо посредством выбора значений из предлагаемого списка;

программа должна быть написана в предположении, что любой пользователь без ограничений может иметь доступ к данным;

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

программа должна быть достаточно документирована.

Варианты заданий

Вариант 1

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

Увеличить рейтинг поставщика, выполнившего наибольшую поставку некоторой детали, на указанную величину.



Вариант 2

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

Изменить цвет самой тяжелой детали на указанный.

Вариант 3

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

Вставить поставщика с заданными параметрами.

Вариант 4

Вывести информацию о поставщиках, поставивших указанную деталь в заданный период.

Удалить поставщика, выполнившего меньше всего поставок.

Вариант 5

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

В таблице поставок изменить номер поставщика при заданном номере детали и изделия.

Вариант 6

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

Увеличить рейтинг поставщика, выполнившего больший суммарный объем поставок, на указанную величину.

Вариант 7

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

Изменить название и город детали с максимальным весом на указанные значения.

Вариант 8

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

Увеличить рейтинг поставщика, выполнившего большее число поставок, на указанную величину.

Контрольные вопросы

Каким образом вставить конструкции PHP в HTML-документ?

Каким образом обеспечить, чтобы встречающиеся в строке переменные были заменены их значениями?

Каковы правила определения функций в языке PHP?

Каковы особенности передачи значений переменных из HTML-формы в переменные PHP?

Каким образом осуществляется взаимодействие с базами данных в языке PHP?

В чем заключается технология "cookies"?


ЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ


ЛАБОРАТОРНАЯ РАБОТА 13

ЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ

Цель работы

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

Содержание работы и методические указания

к ее выполнению

Цель логического этапа проектирования - организация данных, выделенных на этапе инфологического проектирования в форму, принятую в выбранной СУБД. Задачей логического этапа проектирования является отображение объектов предметной области в объекты используемой модели данных, чтобы это отображение не противоречило семантике предметной области и было по возможности наилучшим (эффективным, удобным и т.д.). С точки зрения выбранной СУБД задача логического проектирования реляционной базы данных состоит в обоснованном принятии решений о том:

из каких отношений должна состоять база данных;

какие атрибуты должны быть у этих отношений;

какие ограничения должны быть наложены на атрибуты и отношения базы данных, чтобы обеспечить ее целостность.

Требования к выбранному набору отношений и составу их атрибутов должны удовлетворять следующим условиям:

отношения должны отличаться минимальной избыточностью атрибутов;

выбранные для отношения первичные ключи должны быть минимальными;

между атрибутами не должно быть нежелательных функциональных зависимостей;

выбор отношений и атрибутов должен обеспечивать минимальное дублирование данных;

не должно быть трудностей при выполнении операций включения, уда-ления и модификации данных;

время выполнения запросов на выборку данных (см. описание запросов из варианта задания учебного пособия "Введение в проектирование реляционных баз данных") должно удовлетворять предъявляемым требованиям;

перестройка набора отношений при введении новых типов должна быть минимальной.

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


Процесс получения реляционной схемы базы данных из ER-диаграммы включает следующие шаги:

1. Каждая простая сущность превращается в отношение. Простая сущность - сущность, не являющаяся подтипом и не имеющая подтипов. Имя сущности становится именем отношения.

2. Каждый атрибут становится возможным столбцом с тем же именем; может выбираться более точный формат исходя из возможностей СУБД. Столбцы, соответствующие необязательным атрибутам, могут содержать неопределенные значения; столбцы, соответствующие обязательным атрибутам, - не могут.

3. Компоненты уникального идентификатора сущности превращаются в первичный ключ отношения. Если имеется несколько возможных уникальных идентификатора, выбирается наиболее используемый.

4. Связи M:1 (и 1:1) становятся внешними ключами. Для этого делается копия уникального идентификатора с конца связи "один" и соответствующие столбцы составляют внешний ключ. Необязательные связи соответствуют столбцам, допускающим неопределенные значения; обязательные связи - столбцам, не допускающим неопределенные значения.

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

6. Если в концептуальной схеме присутствовали подтипы, то возможны два способа:

а) все подтипы размещаются в одной таблице;

б) для каждого подтипа строится отдельная таблица.

При применении способа (а) таблица создается для наиболее внешнего супертипа. В таблицу добавляется по крайней мере один столбец, содержащий код ТИПА, и он становится частью первичного ключа. Для работы с подтипами могут создаваться представления. При использовании метода (б) супертип воссоздается с помощью конструкции UNION.

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



Выделяют три группы правил целостности:

целостность по сущностям;

целостность по ссылкам;

целостность, определяемая пользователем.

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

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

декларативные, выполняемые средствами языка SQL;

процедурные, выполняемые посредством триггеров и хранимых процедур.

При выполнении этой лабораторной работы в процессе построения реляционной модели данных должны быть обеспечены декларативные ограничения целостности. Заданию процедурных ограничений целостности посвящена лабораторная работа 14. Декларативные ограничения целостности должны обеспечивать:

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

определение необходимых внешних ключей для обеспечения целостности по ссылкам;

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

задание неопределенных значений и значений по умолчанию;

задание условий каскадного удаления и пр.

Последовательность выполнения лабораторной работы:

1. Изучить вопросы теории нормализации, условия нахождения отношения в той или иной нормальной форме

2. Выполнить процедуру построения реляционной модели данных из ER-модели, построив необходимый набор отношений. Определить состав атрибутов отношений.

Определить первичные и внешние ключи отношений.

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

5. Задать необходимые декларативные ограничения целостности исходя из специфики предметной области.

6. Представить связи между первичными и внешними ключами в виде вертикальной диаграммы.

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

8. На языке SQL записать выражения для указанных в варианте задания запросов на выборку данных из созданной базы данных.


Проверить работоспособность написанных запросов в интерактивном режиме.

9. Оформить следующие разделы отчета:

" Логическое проектирование реляционной модели базы данных", включив в него информацию из пп. 2 - 6;

"Типовые запросы на выборку данных", включив в него тексты запросов на языке SQL на выборку данных из созданной базы данных.



Контрольные вопросы



Каковы задачи, решаемые на этапе логического проектирования?

Каковы базовые свойства реляционной модели данных?

В чем состоят требования структурной части реляционной модели данных?

В чем состоят требования манипуляционной части реляционной модели данных?

В чем состоят требования целостной части реляционной модели данных?

Каковы общие свойства нормальных форм?

Что такое функциональная, функционально полная зависимость?

Каковы условия нахождения отношений в первой нормальной форме?

Каковы условия нахождения отношений во второй нормальной форме?

Каковы условия нахождения отношений в третьей нормальной форме?

Каковы условия нахождения отношений в третьей усиленной нормальной форме?

Что понимается под многозначной зависимостью?

Каковы условия нахождения отношений в четвертой нормальной форме?

Что понимается под понятием "проецирование без потерь"?

Каковы условия нахождения отношений в пятой нормальной форме?

В чем состоят общие требования обеспечения ограничений целостности?

Каковы средства задания ограничений целостности в языке SQL?


ПОЛНОМОЧИЯ НА ИСПОЛЬЗОВАНИЕ БЫЗЫ ДАННЫХ. РАБОТА С ВНЕШНИМИ БАЗАМИ ДАННЫХ


Лабораторная работа 5

ПОЛНОМОЧИЯ НА ИСПОЛЬЗОВАНИЕ БЫЗЫ ДАННЫХ. РАБОТА С ВНЕШНИМИ БАЗАМИ ДАННЫХ

Цель работы

Ознакомиться со средствами предоставления полномочий на использование баз данных и таблиц и основами работы с внешними базами данных.

Содержание работы и методические указания к ее выполнению

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

Представление прав реализуется оператором Grant. Оператор Grant в одной из форм

Grant {connect/resource/dba} to {public/}

предоставляет права на уровне базы данных.

Hазначение опций следующее:

connect - право на модификацию содержимого базы данных;

resource - право на модификацию структуры таблиц базы данных;

dba - права администратора;

public - все пользователи;

<список users>- перечень пользователей на уровене Unix, например, sb01, sb02 и т.д.

Оператор Grant в форме

Grant {all/insert/delete/select/update/index/alter}

on {имя_таблицы/view/synonym}

to {public/<список users>}

предоставляет права на уровне отдельной таблицы. Hазначение опций следующее:

insert, delete, select, update - права на выполнение указанной операции с таблицей;

index - право на формирование индексов;

alter - право на модификацию структуры таблица;

имя таблицы, view, synonym - идентификация таблицы, представлений, синонимов.

Отнятие прав реализуется оператором Revoke. Оператор Revoke в одной из форм

Revoke {connect/resource/dba} from {public/}

отнимает права на уровне базы данных.

Оператор Revoke в форме

Revoke{all/insert/delete/select/update/index/alter}

on {имя_таблицы/view/synonym}

from {public/<список users>}

отнимает права на уровне отдельной таблицы.

Текущей базой данных называется база данных, открытая с помощью операторов Database или Create database.
Любая другая база данных называется внешней. Для ссылки на таблицу во внешней базе данных необходимо указать имя этой базы данных как часть имени таблицы, например, salesdb:contracts, где salesdb - имя внешней базы данных, contracts - имя таблицы. К имени базы данных можно добавить имя сервера, т.е. сетевой машины, где запущен еще один сервер баз данных баз данных, и таким образом в случае распределенной базы данных обращение к таблице contracts базы данных salesdb, размещенной на сервере central, будет выглядеть следующим образом: salesdb@central:contracts.

Последовательность выполнения лабораторной работы:

1. Занести в таблицу поставщиков S строки с фамилиями членов бригады.

2. Занести произвольным образом в таблицу поставок SPJ несколько строк (3-5 строк) о поставках, связанных с занесенными фамилиями.

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

4. Повторить задание п. 3 с той разницей, что сведения о номенклатуре деталей и изделий (таблицы P и J) должна браться из собственной базы данных, а сведения о поставщиках и поставках (таблицы S и SPJ) должны браться из базы данных соседней бригады. Предварительно необходимо узнать имя этой базы данных. Убедитесь в невозможности выполнения задания.

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

6. Повторите задание п. 4. Сравните результаты с результатами, полученными в п. 3.

7. Сделайте попытку изменить информацию о поставщиках-владельцах базы данных (город, рейтинг и т.д.) в таблице S внешней базы данных. Убедитесь в невозможности выполнения задания.

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



9. Повторите задание п. 7. Проверьте успешность выполнения действий.

10. Дождавшись, когда владелец внешней базы данных закончит выполнение п. 9, сделайте попытку удалить из таблицы S используемой Вами внешней базы данных поставщиков с именами, принадлежащими владельцам базы данных, и связанные с ними поставки из таблицы SPJ. Убедитесь в невозможности выполнения задания.

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

12. Повторите задание п. 10. Проверьте успешность выполнения действий.

13. Отнимите предоставленные Вами права на пользование Вашей базой данных.



Варианты заданий



Вариант 1.

1. Выдать список всех поставок, в которых количество деталей находится в диапазоне от 300 до 750 включительно.

2. Получить номера изделий, использующих по крайней мере одну деталь, поставляемую поставщиком S6.

Вариант 2.

1. Выдать цвета деталей, поставляемых поставщиком S6.

2. Получить номера и фамилии поставщиков, поставляющих деталь Р1 для какого-либо изделия в количестве, большем среднего объема поставок детали Р1 для этого изделия.

Вариант 3.

1. Выдать названия изделий, для которых поставляются детали поставщиком S6.

2. Получить номера и названия изделий, для которых поставщик S6 поставляет несколько деталей каждого из поставляемых им типов.

Вариант 4.

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

2. Получить номера изделий, для которых детали полностью поставляет поставщик S6.

Вариант 5.

1. Выдать номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью P1 в количестве, большем, чем средний объем поставок детали P1 для этого изделия.

2. Получить номера изделий, использующих только детали, поставляемые поставщиком S6.

Вариант 6.

1. Выдать общее число изделий, для которых поставляет детали поставщик S6.



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

Вариант 7.

1. Выдать общее количество деталей P1, поставляемых поставщиком S6.

2. Получить номера и фамилии поставщиков, поставляющих по крайней мере одну деталь, поставляемую по крайней мере одним поставщиком, который поставляет по крайней мере одну красную деталь.



Контрольные вопросы



Кто является владельцем базы данных?

Какими правами обладают другие пользователи по отношению к Вашей базе данных?

Какими правами обладает администратор базы данных по отношению к Вашей базе данных?

Каким образом предоставляются права на пользование базой данных и отдельными ее таблицами?

Каким образом изымаются права на пользование базой данных и отдельными ее таблицами?

Что такое внешняя база данных?

Как идентифицируется таблица внешней базы данных?

Как идентифицируется таблица внешней распределенной базы данных?


ПОСТРОЕНИЕ ДИАГРАММ РАБОТ И ДИАГРАММ ПОТОКОВ ДАННЫХ ИНФОРМАЦИОННОЙ СИСТЕМЫ


ЛАБОРАТОРНАЯ РАБОТА 11

ПОСТРОЕНИЕ ДИАГРАММ РАБОТ И ДИАГРАММ ПОТОКОВ ДАННЫХ ИНФОРМАЦИОННОЙ СИСТЕМЫ

Цель работы

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

Содержание работы и методические указания

к ее выполнению

Разработка базы данных невозможна без ее тщательного проектирования: слишком велико влияние этого шага на последующие этапы жизненного цикла информационной системы, в основе которой лежит создаваемая база данных.

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

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

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

методология функционального моделирования работ SADT (Structured Analysis and Design Technique);

диаграммы потоков данных DFD (Data Flow Diagrams);

методология объектного проектирования на языке UML (UML-диаграммы).

Методология SADT (Structured Analisys and Design Technique - технология структурного анализа и проектирования) разработана Дугласом Т. Россом и является одной из самых известных и широко используемых методик проектирования. Новое название методики, принятое в качестве стандарта, -IDEF0 (Icam DEFinition) является частью программы ICAM (Integrated Computer -Aided Manufacturing - интегрированная компьютеризация производства).


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

В IDEF0 система представляется как совокупность взаимодействующих работ (или функций). Связи между работами определяют технологический процесс или структуру взаимосвязи внутри организации. Модель SADT представляет собой серию диаграмм, разбивающих сложный объект на составные части.

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

Работы (activity) - поименованные процессы, функции или задачи, которые происходят в течение определенного времени и имеют распознаваемые результаты. На диаграмме работы изображаются прямоугольниками.

Вход (Input) - материал или информация, которые используются работой для получения результата (стрелка, входящая в левую грань).

Управление (Control) - правила, стратегии, стандарты, которыми руководствуется работа (стрелка, входящая в верхнюю грань). В отличие от входной информации управление не подлежит изменению.

Выход (Output) - материал или информация, которые производятся работой (стрелка, исходящая из правой грани). Каждая работа должна иметь хотя бы одну стрелку выхода, так как работа без результата не имеет смысла и не должна моделироваться.

Механизм (Mechanism) - ресурсы, которые выполняют работу (персонал, станки, устройства - стрелка, входящая в нижнюю грань).

Вызов (Call) представляет собой взаимодействие одной модели работ с другой (стрелка, исходящая из нижней грани).

Различают в IDEF0 пять типов связей работ.

Связь по входу (input-output) имеет место, когда выход вышестоящей работы направляется на вход следующей работы.

Связь по управлению (output-control) обозначает ситуацию, когда выход вышестоящей работы направляется на управление следующей работы.


Связь показывает доминирование вышестоящей работы.

Обратная связь по входу (output- input feedback) имеет место, когда выход нижестоящей работы направляется на вход вышестоящей. Используется для описания циклов.

Обратная связь по управлению (output-control feedback) обозначает ситуацию, когда выход нижестоящей работы направляется на управление вышестоящей. Является показателем эффективности бизнес-процесса.

Связь выход-механизм (output-mechanism) имеет место, когда выход одной работы направляется на механизм другой и показывает, что работа подготавливает ресурсы для проведения другой работы.

Диаграммы потоков данных (Data Flow Diagrams - DFD) используются для описания движения документов и обработки информации как дополнение к IDEF0. В отличие от IDEF0, где система рассматривается как взаимосвязанные работы, стрелки в DFD показывают лишь то, как объекты (включая данные) движутся от одной работы к другой.

Диаграмма потоков данных содержит:

процессы, которые преобразуют данные;

потоки данных, переносящие данные;

активные объекты, которые производят и потребляют данные;

хранилища данных, которые пассивно хранят данные.

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

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

Активным объектом является объект, который обеспечивает движение данных, поставляя или потребляя их. Хранилище данных - это пассивный объект в составе DFD, в котором данные сохраняются для последующего доступа.

Функция, принимающая решение о запуске процесса, будучи включенной в DFD, порождает в диаграмме поток управления и изображается пунктирной стрелкой.



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

Последовательность выполнения лабораторной работы:

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

2. Выполнить структурное разбиение предметной области на отдельные под-разделения (отделы, службы, подсистемы, группы и пр.) согласно выполняемым ими функциям.

3. Определить задачи и функции системы в целом и функции каждого под-разделения (подсистемы).

4. Выполнить словесное описание работы каждого подразделения (подсис-темы), алгоритмов и сценариев выполнения ими отдельных работ.

5. Построить диаграммы работ и диаграммы потоков данных для всей ин-формационной системы в целом и для отдельных сценариев работ, отражающие логику и взаимоотношение подразделений (подсистем).

6. Оформить следующие разделы отчета:

исходное задание;

состав подразделений (подсистем) информационной системы;

перечень функций и задач системы в целом и каждого подразделения (под-системы) в отдельности; подробное описание работы каждого подразделения (подсистемы), отношения их между собой, описание отдельных сценариев работ;

диаграммы работ и диаграммы потоков данных для всей информационной системы в целом и для входящих в нее подразделений (подсистем).



Контрольные вопросы



Каковы задачи методологии структурного анализа данных?

Каковы виды связей в методологии IDEF0.

Каково назначение методологии диаграмм потоков данных?

Что такое поток данных в методологии DFD?

Какова функция хранилища данных в DFD?

В чем сходство и в чем различие методологии структурного анализа дан-ных и диаграмм потоков данных?


РАБОТА С КУРСОРОМ


ЛАБОРАТОРНАЯ РАБОТА 5

РАБОТА С КУРСОРОМ

Цель работы

Приобретение практических навыков работы с курсором в программах на языке ESQL/C.

Содержание работы и методические указания

к ее выполнению

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

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

объявление курсора, выполняемое оператором Declare;

открытие курсора, выполняемое оператором Open;

выборка по курсору очередной строки запроса в главные переменные, выполняемая оператором Fetch;

закрытие курсора, выполняемое оператором Close.

Последовательность выполнения лабораторной работы

1. Изучить синтаксис и правила использования операторов Declare, Open, Fetch, Close (см. Приложение 2), а также особенности работы с последовательным и скроллирующим курсором.

2. Разработать и отладить набор ESQL/С-программ, решающих задачи из соответствующего варианта заданий. Результатом работы программ является набор строк, которые подлежат выводу на экран с соответствующими пояснительными заголовками.

3. Разработать и отладить набор ESQL/С-программ, решающих задачи из соответствующего варианта заданий аналогично заданию из п. 2 с той разницей, что выводить результаты запроса необходимо в обратном порядке следования строк. Указанное требование предполагает использование скроллирующего курсора.

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

беспечение необходимой обработки ошибок;

использование аппарата транзакций;


вывод сообщений обо всех шагах выполнения программы, в том числе и о возможных ошибках;

программа должна быть достаточно документирована.



Варианты заданий



Вариант 1.

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

2. Получить номера изделий, для которых детали полностью поставляет поставщик S1.

3. Выдать номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью P1 в количестве, большем, чем средний объем поставок детали P1 для этого изделия.

Вариант 2.

1. Выдать общее количество деталей P1, поставляемых поставщиком S1.

2. Получить номера изделий, использующих только детали, поставляемые поставщиком S1.

3. Выдать номера деталей, поставляемых каким-либо поставщиком из Лондона, для изделия, изготавливаемого также в Лондоне.

Вариант 3.

1. Выдать номера и фамилии поставщиков, поставляющих одну и ту же деталь для всех изделий.

2. Получить общее число изделий, для которых поставляет детали поставщик S1.

3. Выдать номера изделий, детали для которых поставляет каждый поставщик, поставляющий какую-либо красную деталь.

Вариант 4.

1. Выдать полный список деталей для всех изделий, изготавливаемых в Лондоне.

2. Получить номера деталей, поставляемых каким-либо поставщиком из Лондона.

3. Выдать номера деталей, поставляемых для всех изделий из Лондона.

Вариант 5.

1. Выдать список всех поставок, в которых количество деталей находится в диапазоне от 300 до 750 включительно.

2. Получить номера изделий, использующих по крайней мере одну деталь, поставляемую поставщиком S1.

3. Выдать номера и названия деталей, поставляемых для какого-либо изделия в Лондоне.

Вариант 6.

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

2. Получить цвета деталей, поставляемых поставщиком S1.

3. Выдать номера и фамилии поставщиков, поставляющих деталь Р1 для какого-либо изделия в количестве, большем среднего объема поставок детали Р1 для этого изделия.



Вариант 7.

1. Выдать названия изделий, для которых поставляются детали поставщиком S1.

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

3. Выдать номера изделий, для которых средний объем поставки деталей P1 больше наибольшего объема поставки любой детали для изделия J1.



Контрольные вопросы



Что такое курсор? В чем отличие последовательного и скроллирующего курсора по описанию и по использованию?

Каково назначение и синтаксис оператора Declare?

Каково назначение и синтаксис оператора Open?

Каково назначение и синтаксис оператора Fetch?

Каково назначение и синтаксис оператора Close?

По какой из команд сервер выделяет память под курсор?

По какой из команд сервер начинает поиск строк запроса?

Чем заканчивается работа оператора Open?

Чем заканчивается работа оператора Fetch?

Характеризуйте состав и назначение спецификаций, связанных с перемещением скроллирующего курсора.

Что такое уровень изоляции? Какой уровень изоляции может использоваться при работе с последовательным и скроллирующим курсором?


РАЗРАБОТКА ПРОГРАММНОГО ПРИЛОЖЕНИЯ НАД БАЗОЙ ДАННЫХ


ЛАБОРАТОРНАЯ РАБОТА 15

РАЗРАБОТКА ПРОГРАММНОГО ПРИЛОЖЕНИЯ НАД БАЗОЙ ДАННЫХ

Цель работы

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

Содержание работы и методические указания

к ее выполнению

Результатом выполнения лабораторной работы должны быть законченное программное приложение и отчет о выполнении лабораторных работ 11 - 15. Раз-рабатываемое программное приложение должно:

заносить информацию в созданную базу данных;

выполнять необходимые действия по модификации и удалению информации в базе данных; при этом все операции по занесению, модификации и удалению данных должны выполняться в терминах предметной области, а не базы данных;

поддерживать целостность базы данных, не допуская появления некорректных данных;

выполнять все действия над базой данных в рамках транзакций;

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

выполнять запросы из варианта задания учебного пособия "Введение в проектирование реляционных баз данных";

контролировать все вводимые данные;

Представляемый отчет должен содержать

Содержание.

Текст исходного задания.

Анализ предметной области, в том числе:

состав подразделений (подсистем) информационной системы;

перечень функций и задач системы в целом и каждого подразделения (подсистемы) в отдельности;

подробное описание работы каждого подразделения (подсистемы), взаимоотношение их между собой, описание отдельных сценариев работ;

диаграммы работ и диаграммы потоков данных для всей информационной системы в целом и для входящих в нее подразделений (подсистем).

Вопросы инфологического проектирования модели базы данных, в том числе:

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

классификацию сущностей (стержневые, характеристические, ассоциативные, обозначающие);


классификацию атрибутов каждой сущности;

сущности вида подтип/супертип, где это необходимо;

анализ связей между сущностями, удаление избыточных;

определение множественности и условности связей;

классификацию связей (1:1, 1:M, M:N);

формализацию связей;

ER-диаграмму модели базы данных;

описание модели базы данных на языке инфологического проектирования.

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

описание состава отношений базы данных и набора атрибутов каждого отношения;

первичные и внешние ключи отношений;

шаги по нормализации полученных отношений с приведением модели базы данных к третьей нормальной форме;

необходимые декларативные ограничения целостности исходя из специфики предметной области;

представление связей между внешними и первичными ключами в виде вертикальной диаграммы;

Выражения на языке SQL, выполняющие выборку данных из созданной базы данных для указанных в варианте задания запросов.

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

Описание разработанного программного приложения.


РЕАЛИЗАЦИЯ ПРОСТЕЙШИХ ОПЕРАЦИЙ РАБОТЫ С БАЗОЙ ДАННЫХ СРЕДСТВАМИ ВСТРОЕННОГО SQL


ЛАБОРАТОРНАЯ РАБОТА 4

РЕАЛИЗАЦИЯ ПРОСТЕЙШИХ ОПЕРАЦИЙ РАБОТЫ С БАЗОЙ ДАННЫХ СРЕДСТВАМИ ВСТРОЕННОГО SQL

Цель работы

Приобретение начальных навыков работы со встроенным SQL средствами Informix-ESQL/C.

Содержание работы и методические указания к ее выполнению

Informix-ESQL/C - инструмент разработки приложений для базы данных на языке Си с возможностью использования средств SQL. При создании ESQL/C-программы пользователь разрабатывает С-программу, включает в нее специальные заголовочные файлы и SQL-описания, реализующие работу с базой данных. Препроцессор ESQL/C преобразует SQL-описания в обращения к библиотечным функциям, которые взаимодействуют с сервером базы данных, и дает на выходе С-код. Далее полученный С-код компилируется и линкуется. Исходя из вышесказанного, пользователь, желающий разрабатывать ESQL/С-программы должен обладать навыками работы с языком Си и уметь пользоваться средствами SQL. При этом необходимо учитывать особенности той операционной системы, в рамках которой создается клиентское приложение. В данной и двух последующих лабораторных работах предполагается разработка несложных ESQL/С-программ. В лабораторных работах используется база данных, содержащая 4 таблицы:

таблица поставщиков (S);

таблица деталей (P);

таблица изделий (J);

таблица поставок (SPJ).

Если приведенная база данных отсутствует (или любая таблица из нее), то необходимо восстановить базу данных, пользуясь интерактивными средствами программы Informix-SQL, либо выполнив необходимый запрос на языке SQL в рамках данной программы:

create database Postavka with buffered log;

create table S (n_post char(6) NOT NULL, family nchar(20),

rating smallint, town nchar(20));

create table P (n_det char(6), name nchar(20),

color nchar(20), weigh smallint,

town nchar(20));

create table J (n_izd char(6), name nchar(20),

town nchar(20));

create table SPJ (n_post char(6), n_det char(6),

n_izd char(6), kol smallint));

insert into S

values (...........................);

insert into P


values (...........................);

insert into J

values (...........................);

insert into SPJ

values (...........................)

Для разработки ESQL/С-программ необходимо изучить:

общие правила подготовки программ и использования программных средств Informix-ESQL/C;

аппарат определения и использование главных переменных;

средства встраивания SQL-описаний в С-программы;

структуру области связи SQLCA и средства обработки ошибок SQL-запросов;

назначение и структуру заголовочных файлов.

Данная лабораторная работа связана с написанием таких программ на ESQL/C, которые после обработки SQL-запроса возвращают единственную строку, а также выполняют простейшие операции по модификации базы данных без использования аппарата курсора.

Исходный файл с программой на Informix-ESQL/C должен иметь расширение .ec (например, source.ec).

Вызов Informix-ESQL/C выполняется командой esql. Ниже приведен упрощенный вариант синтаксиса команды esql. Приведенные в диаграмме обозначения имеют смысл:

source.ec - имя исходного модуля;

outfile - имя создаваемого выполняемого модуля;

Compiling/ /Linking Options - опции компилятора/редактора;

- e - выполнить только препроцессорную обработку с получением на выходе программы на языке Си (source.c);

-V - получить информацию о версии Informix-ESQL/C;

otherCsrc.c - другие исходные модули, подлежащие включению в программу;

otherCobj.o - другие объектные модули, подлежащие включению в программу;

yourlib.a - другие библиотеки, используемые для построения программы на.

Входные данных для SQL-описаний передаются через так называемые главные переменные, через них же возвращаются результаты запроса, которые отображаются на экране терминала для контроля выполнения. При объявлении главных переменных в языке Informix-ESQL/C оператору описания переменных предшествует знак $, либо объявление производится внутри блока

exec SQL begin declare section

. . . .

exec SQL end declare section

При использовании главных переменных в программе на Informix-ESQL/C внутри SQL-описаний им также предшествует знак $, вне SQL-описаний главные переменные используются обычным образом.


SQL-описаниям (операторам языка SQL) в программе на языке Informix-ESQL/C также предшествует знак $.

Сервер баз данных возвращает код результата и, возможно, другую информацию в структуру данных, называемую областью связи SQL (SQL Communication Area - SQLCA). Структура и назначение отдельных полей SQLCA приведены в Приложении 3. Структура SQLCA описана в заголовочном файле sqlca.h, который автоматически подключается к программе на Informix-ESQL/C. Среди других заголовочных файлов отметим:

datatime.h - описывает структуру для типа данных datetime;

decimal.h - описывает структуру для типа данных decimal;

locator.h - описывает структуру для blobs-данных;

varchar.h - описывает структуру для типа данных varchar;

sqlhdr.h - описывает прототипы функций библиотеки Informix-ESQL/C;

sqltype.h, sqltypes.h - структуры для работа с динамическими главными переменными.

Последовательность выполнения лабораторной работы

1. Разработать и отладить ESQL/С-программу, реализующую задачу 1 из соответствующего варианта заданий.

2. Разработать и отладить ESQL/С-программу, реализующую задачу 2 из соответствующего варианта заданий и связанную с модификацией базы данных.

3. Разработать и отладить ESQL/С-программу, добавляющую в таблицу поставщиков S поставщика с фамилией члена Вашей бригады, а также 3-4 произвольные поставки в таблицу SPJ, связанные с этим поставщиком. Атрибуты добавляемых строк должны быть выбраны таким образом, чтобы изменить результат решения задачи 1.

4. Выполнить ESQL/С-программу, разработанную в п. 1 для нового состояния базы данных. Сравнить результаты.

В случае ошибочного выполнения программ, приводящих к непредусмотренным изменениям базы данных, следует привести базу данных в исходное состояние.

Требования к разрабатываемой программе

Разрабатываемые ESQL/C-программы должны удовлетворять следующим требованиям:

обеспечивать необходимую обработку ошибок;

все действия в отношении базы данных должны выполняться в рамках транзакций (операторы SQL Begin work, Commit work, Rollback work, см. Приложение 2);



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

программа должна быть достаточно документирована.

Варианты заданий

Вариант 1

1. Выдать полную информацию о поставщике, имеющим максимальный рейтинг.

2. Перевести поставщика с минимальным рейтингом в город, где изготавливается самая тяжелая деталь.

Вариант 2

1. Выдать полную информацию об изделии, изготавливаемом в городе, в котором проживает поставщик с максимальным рейтингом.

2. Поменять местами города, где проживают поставщики с минимальным и максимальным рейтингом.

Вариант 3

1. Выдать полную информацию о детали, имеющей максимальный вес.

2. Перевести поставщика с максимальным рейтингом в Лондон.

Вариант 4

1. Выдать общий объем поставок деталей красного цвета.

2. В таблице деталей сменить название детали "Винт" на название детали с максимальным весом.

Вариант 5

1. Выдать полную информацию об изделии, имеющем максимальный объем поставок деталей.

2. В таблице деталей сменить город, где изготавливается самая легкая деталь, на Париж.

Вариант 6

1. Выдать общий объем поставок деталей для изделия J2.

2. Увеличить рейтинг всех лондонских поставщиков на 5.

Вариант 7

1. Выдать общий объем поставок деталей для изделия с максимальным объемом поставок.

2. Увеличить вес всех красных деталей на 10.



Контрольные вопросы



Что такое главные переменные? Как они определяются и используются в программах на языке ESQL/С?

Каковы правила использования SQL-описаний в программах на языке ESQL/C?

Какова структура области связи SQLCA?

Как обрабатываются NULL-значения в программах на языке ESQL/C?

Каковы общие правила обработки ошибок SQL-вызовов?

Каково назначение заголовочных файлов?

Какой заголовочный файл должен быть подключен к программе для доступа к структуре SQLCA?

Что такое уровень изоляции? Какой уровень изоляции может использоваться при выполнении программ данной лабораторной работы?


СОЗДАНИЕ И МОДИФИКАЦИЯ БАЗЫ ДАННЫХ И ТАБЛИЦ


Лабораторная работа 1

СОЗДАНИЕ И МОДИФИКАЦИЯ БАЗЫ ДАННЫХ И ТАБЛИЦ

Цель работы

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

Содержание работы и методические указания к ее выполнению

1. Ознакомиться с правилами работы и структурой меню интерактивной программы dbaccess (Приложение 1).

2. Изучить набор команд языка SQL, связанный с созданием базы данных, созданием, модификацией структуры таблиц и их удалением, вставкой, модификацией и удалением записей таблиц (Приложение 2):

database - выбор существующей базы данных;

close database - закрытие файлов текущей бызы данных;

drop database - удаление базы данных;

create table - создание таблицы базы данных;

alter table - модификация структуры базы данных;

drop table - удаление таблицы базы данных;

insert - добавление одной или нескольких строк в таблицу;

delete - удаление одной или нескольких строк из таблицы;

update - модификация одной или нескольких строк таблицы.

3. Создать базу данных, выбрав соответствующий пункт меню. В целях исключения конфликтов при работе с внешними базами данных базу данных создать в режиме с буферизованной журнализацией.

4. Средствами системы меню создать четыре таблицы в базе данных. При создании таблиц выполнить следующие условия:

- поля номер_поставщика, номер_детали, номер_изделия во всех таблицах имеет символьный тип и длину 6;

- поля рейтинг, вес и количество имеют целочисленный тип;

- поля фамилия, город (поставщика, детали или изделия), название (детали или изделия) имеют символьный тип nchar и длину 20;

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

- для всех полей допускаются значения NULL и значения-дубликаты, кроме поля номер_поставщика из таблицы S, номер детали из таблицы P, номер изделия из таблицы J..

Таблицы S и P создать средствами системы меню программы dbaccess, таблицы J и SPJ создать, написав и выполнив соответствующие запросы для создания таблиц (команда Create table).>


delete имя_таблицы

where предикат

update имя_таблицы

set поле=выражение [,поле=выражение]...

where предикат

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

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

select rowid, * from имя_таблицы

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



Контрольные вопросы



В каких режимах возможно создание базы данных?

Какие типы данных допустимы при создании таблицы?

Как выполнить создание таблицы средствами меню программы dbaccess?

Как выполнить создание таблицы средствами языка SQL?

Как разделяются операторы SQL в случае нескольких операторов в запросе?

Каким образом выполнить простейшие операции вставки строк данных в таблицу средствами SQL?

Каким образом выполнить простейшие операции модификации строк таблицы средствами SQL?

Каким образом выполнить просмотр таблицы?

Что такое rowid-столбец?

Как получить информацию о структуре таблицы в рамках программы dbaccess?




ТРИГГЕРЫ И ПРОЦЕДУРЫ


ЛАБОРАТОРНАЯ РАБОТА 14

ТРИГГЕРЫ И ПРОЦЕДУРЫ

Цель работы

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

Содержание работы и методические указания

к ее выполнению

Механизм триггеров позволяет программировать обработку ситуаций, возникающих при любых изменениях в базе данных. Триггер придается таблице базы данных и применяется при выполнении над таблицей операций включения, удаления или обновления строк. Применение триггера заключается в проверке сформулированных в нем условий, при истинности которых выполняются SQL-операторы, определенные внутри триггера, либо происходит вызов специфицированной внутри триггера процедуры базы данных. Триггер хранится в базе данных наряду с таблицами, представлениями, хранимыми процедурами.

При определении триггера задаются:

имя триггера;

условия включения триггера;

имя таблицы, при обращении к которой срабатывает триггер;

момент срабатывания триггера;

имя, идентифицирующее строку со вставляемой, модифицируемой или удаляемой информацией;

дополнительное условие;

действие, выполняемое при срабатывании триггера (операторы Insert, Delete, Update, Execute procedure).

Синтаксис оператора Create trigger (в нотации СУБД Informix) для создания триггера приведен в Приложении 2.

При выполнении триггера выполняется оператор модификации данных либо вызывается хранимая процедура, предварительно созданная и помещенная в базу данных оператором Create procedure. Хранимая процедура в отличие от триггеров может выполнять достаточно сложный набор действий:

задавать и манипулировать с переменными различных типов;

проверять логические условия и выполнять различные виды циклов;

указывать действия, которые следует предпринять в случае ошибки (on exception);

вызывать другие процедуры, передавать и возвращать параметры и пр.

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

Последовательность выполнения лабораторной работы:

1. Ознакомиться со средствами разработки триггеров и хранимых процедур.

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

3. Проверить правильность работы триггеров и процедур, разработанных в п. 2.

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

5. Проверить правильность работы триггеров и процедур, разработанных в п. 4.

6. Разработать набор хранимых процедур, которые целесообразно разместить в базе данных исходя из логики работы с базой данных.

7. Проверить правильность работы процедур, разработанных в п. 6.

8. Оформить раздел отчета "Хранимые процедуры и триггеры", включив в него описание разработанных триггеров и хранимых процедур.



Контрольные вопросы



Что вкладывается в понятие физической и логической независимости данных?

Что вкладывается в понятие целостности данных?

Как разделяются ограничения целостности по способам реализации?

Как разделяются ограничения целостности по времени проверки?

Как разделяются ограничения целостности по области действия?

Что такое утверждение?

Как создается хранимая процедура?

Каковы основные конструкции языка SPL?

Как создается триггер?

Какие оператора языка SQL допустимы внутри триггера?

Как реализуется механизм событий?

Как указать действия, которые следует предпринять в случае ошибки?

Как удалить хранимую процедуру, триггер из базы данных?

С какими моделями транзакций связано исполнение триггеров?


ознаменовались решительным поворотом


Прошедшие 5- 7 лет ознаменовались решительным поворотом в области баз данных в сторону профессиональных многопользовательских СУБД. Эпоха настольных СУБД на платформе персональных компьютеров, таких как FoxBase, FoxPro, Paradox, Clipper, dBase, Clarion, MSAccess и т.д., не поддерживающих значительное число функций управления базами данных, ушла в прошлое. В настоящее время большинство средних и крупных организаций постепенно переходят к созданию действительно открытых и распределенных информационных систем на мощной компьютерной платформе и с использованием СУБД более высокого класса. Это - многопользовательские многоплатформные профессиональные СУБД, которые изначально были ориентированы на решение сложных технологических проблем. К числу таких многопользовательских СУБД относятся широко известные коммерческие системы управления базами данных: - Oracle фирмы Oracle Corp.;

- Informix и DB2 фирмы IBM;

- MS SQL Server фирмы Microsoft;

- Sybase фирмы Sybase Inc.;

- Sybase фирмы Sybase Inc.;

а также целый ряд некоммерческих свободно распространяемых СУБД.
Задачей курса "Базы данных" является не изучение особенностей той или иной СУБД, а освоение технологий работы с базами данных. Время по сути сделало язык SQL стандартом de-facto в области работы с базами данных, а международные стандарты языка SQL (стандарты SQL/89, SQL2, SQL:1999 и другие части разрабатываемого стандарта SQL/3) позволяют в значительной степени унифицировать средства доступа к данным вне зависимости от используемой СУБД. В качестве используемой СУБД в лабораторных работах используется система управления базами данных Informix, хотя в равной степени это могла быть любая из приведенного выше списка СУБД.
Лабораторный практикум по курсу "Базы данных" состоит из двух частей. В первой части практикума студенты осваивают различные технологии работы с базами данных. При этом предполагается, что студенты знакомы с основами языка SQL, например, в объеме пособия "Язык структурных запросов SQL".


Лабораторные работы второй части лабораторного практикума объединены концептуально общей целью: проектированием базы данных и разработкой законченного приложения над базой данных для некоторой предметной области. В лабораторных работах последовательно выполняются шаги по проектированию базы данных (построение диаграмм работ, диаграммы потоков данных, инфологическое, логическое проектирование), а также разработка собственно базы данных (таблиц, процедур, триггеров) и приложения, работающего с ней. Вопросы проектирования реляционных баз данных, а также варианты заданий представлены в учебном пособии "Введение в проектирование реляционных баз данных".
Часть 1. Технологии работы с базами данных
Первые три лабораторных работы выполняются в интерактивном режиме и знакомят студентов с основными операциями по работе с базами данных (создание базы данных и таблиц, занесение данных, выполнение простейших операций над данными, формирование запросов на языке SQL, передача полномочий на пользование базой данных, работа с внешней базой данных).
Следующие три лабораторные работы посвящены изучению технологии встроенного SQL (встраивание конструкций языка SQL в программу на языке Си, курсоры, динамический SQL).
Последующие две лабораторные работы знакомят студентов со стандартом ODBC для доступа к базам данных.
Наконец, две последние лабораторные работы первой части практикума посвящены изучению технологий работы с базами данных в среде WWW с использованием CGI-скриптов и языка PHP.
Лабораторная работа 1. Создание и модификация базы данных и таблиц
Лабораторная работа 2. Выбор и модификация данных таблиц
Лабораторная работа 3. Полномочия на использование базы данных. Работа с внешними базами данных
Лабораторная работа 4. Реализация простейших операций работы с базой данных средствами встроенного SQL
Лабораторная работа 5. Работа с курсором
Лабораторная работа 6. Динамический SQL
Лабораторная работа 7. Выполнение простейших SQL-операторов с использованием средств ODBC


Лабораторная работа 8. Выборка данных с использованием средств ODBC.
Лабораторная работа 9. Доступ к базам данных посредством CGI-скрипта, написанного на языке ESQL/C
Лабораторная работа 10. Использование языка PHP для доступа к базам данных
Часть 2. Проектирование и разработка базы данных для некоторой предметной области и программного приложения для работы с ней
Лабораторные работы второй части лабораторного практикума объединены концептуально общей целью: проектированием и разработкой базы данных для некоторой предметной области и законченного программного приложения над базой данных.
Каждая из лабораторных работ предполагает выполнение отдельного этапа работ в процессе проектирования информационной системы, результаты выполнения каждой лабораторной работы включаются в общий отчет, который вместе с разработанной базой данных и программным приложением выносятся на защиту по окончании выполнения всего комплекса лабораторных работ.
Лабораторная работа 11. Построение диаграмм работ и диаграмм потоков данных информационной системы
Лабораторная работа 12. Инфологическое проектирование базы данных
Лабораторная работа 13. Логическое проектирование базы данных
Лабораторная работа 14. Триггеры и процедуры
Лабораторная работа 15. Разработка программного приложения над базой данных
Приложение 1
Приложение 2
Приложение 3

ВЫБОР И МОДИФИКАЦИЯ ДАННЫХ ТАБЛИЦ


Лабораторная работа 2

ВЫБОР И МОДИФИКАЦИЯ ДАННЫХ ТАБЛИЦ

Цель работы

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

Содержание работы и методические указания к ее выполнению

1. Изучить набор команд языка SQL, связанный с созданием запросов, добавлением, модификацией и удалением строк таблицы:

select - осуществление запроса по выборке информации из таблиц базы данных;

insert - добавление одной или нескольких строк в таблицу;

delete - удаление одной или нескольких строк из таблицы;

update - модификация одной или нескольких строк таблицы;

union - объединение запросов в один запрос.

2. Изучить состав, правила и порядок использования ключевых фраз оператора select:

select - описание состава данных, которые следует выбрать по запросу (обязательная фраза);

from - описание таблиц, из которых следует выбирать данные (обязательная фраза);

where - описание условий поиска и соединения данных при запросе;

group by - создание одной строки результата для каждой группы (группой называется множество строк, имеющих одинаковые значения в указанных столбцах);

having - наложение одного или более условий на группу;

order by - сортировка результата выполнения запроса по одному или нескольким столбцам;

into temp - создание временной таблицы, в которую будет осуществлен вывод результатов соответствующего запроса.

Порядок следования фраз в команде select должен соответствовать приведенной выше последовательности.

3. Подготовить и выполнить средствами программы dbaccess четыре запроса по выборке информации из таблиц базы данных для решения нижеприведенных задач.

4. Подготовить и выполнить средствами программы dbaccess два запроса по модификации информации (вставка, удаление, замещение) из таблиц базы данных для решения нижеприведенных задач. При этом в тех заданиях, где речь идет о создании таблиц, предполагается формирование постоянной таблицы базы данных.


5. Защитить лабораторную работу, ответив на контрольные вопросы.



Варианты заданий на составление запросов по выборке информации из таблиц базы данных



Вариант 1.

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

2. Получить все триплеты "номер поставщика, номер детали и номер изделия", такие, что в каждом триплете указанные поставщик, деталь и изделие не являются попарно соразмещенными.

3. Получить номера изделий, для которых детали полностью поставляет поставщик S1.

4. Получить номера и фамилии поставщиков, поставляющих детали для какого-либо изделия с деталью P1 в количестве, большем, чем средний объем поставок детали P1 для этого изделия.

Вариант 2.

1. Выдать общее количество деталей P1, поставляемых поставщиком S1.

2. Получить все пары названий городов, таких, что какой-либо поставщик из первого города поставляет детали для некоторого изделия, изготовляемого во втором городе.

3. Выдать номера изделий, использующих только детали, поставляемые поставщиком S1.

4. Получить номера деталей, поставляемых каким-либо поставщиком из Лондона, для изделия, изготавливаемого также в Лондоне.

Вариант 3.

1. Выдать номера и фамилии поставщиков, поставляющих одну и ту же деталь для всех изделий.

2. Получить общее число изделий, для которых поставляет детали поставщик S1.

3. Выдать номера изделий, детали для которых поставляет каждый поставщик, поставляющий ка какую-либо красную деталь.

4. Получить все триплеты "номер поставщика, номер детали и номер изделия", такие, что в каждом триплете указанные поставщик, деталь и изделие являются попарно соразмещенными.

Вариант 4.

1. Выдать номера и фамилии поставщиков, поставляющих по крайней мере одну деталь, поставляемую по крайней мере одним поставщиком, который поставляет по крайней мере одну красную деталь.

2. Получить полный список деталей для всех изделий, изготавливаемых в Лондоне.

3. Выдать номера деталей, поставляемых каким-либо поставщиком из Лондона.



4. Получить номера деталей, поставляемых для всех изделий из Лондона.

Вариант 5.

1. Выдать номера изделий, для которых детали поставляются по крайней мере одним поставщиком не из того же самого города.

2. Получить список всех поставок, в которых количество деталей находится в диапазоне от 300 до 750 включительно.

3. Выдать номера изделий, использующих по крайней мере одну деталь, поставляемую поставщиком S1.

4. Получить номера и названия деталей, поставляемых для какого-либо изделия в Лондоне.

Вариант 6.

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

2. Получить цвета деталей, поставляемых поставщиком S1.

3. Выдать номера и фамилии поставщиков, поставляющих деталь Р1 для какого-либо изделия в количестве, большем среднего объема поставок детали Р1 для этого изделия.

4. Получить полный список деталей для всех изделий.

Вариант 7.

1. Выдать названия изделий, для которых поставляются детали поставщиком S1.

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

3. Выдать номера и названия изделий, для которых поставщик S1 поставляет несколько деталей каждого из поставляемых им типов.

4. Получить номера изделий, для которых средний объем поставки деталей P1 больше наибольшего объема поставки любой детали для изделия J1.



Варианты заданий на составление запросов по модификации информации из таблиц базы данных



Вариант 1.

1. Увеличить на 10 рейтинг всех поставщиков, рейтинг которых в настоящее время меньше, чем рейтинг поставщика S4.

2. Постройте таблицу, содержащую список номеров изделий, которые либо находятся в Лондоне, либо для них поставляются детали каким-нибудь поставщиком из Лондона.

Вариант 2.

1. Удалить все изделия, для которых нет поставок деталей.

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

Вариант 3.

1. Увеличить размер поставки на 10 процентов для всех поставок тех поставщиков, которые поставляют какую-либо красную деталь.



2. Построить таблицу с комбинациями "цвет детали-город, где хранится деталь", исключая дубликаты пар (цвет-город).

Вариант 4.

1. Построить таблицу, содержащую список номеров деталей, которые поставляются либо каким-нибудь поставщиком из Лондона, либо для какого-либо изделия в Лондон.

2. Вставить в таблицу S нового поставщика с номером S10 с фамилией Уайт из города Нью-Йорк с неизвестным рейтингом.

Вариант 5.

1. Удалить все изделия из Рима и все соответствующие поставки.

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

Вариант 6.

1. Изменить цвет красных деталей с весом менее 15 фунтов на желтый.

2. Построить таблицу с номерами изделий и городов, где они изготавливаются, такие, что второй буквой названия города является "О".

Вариант 7.

1. Увеличить на 10 рейтинг тех поставщиков, объем поставки которых выше среднего.

2. Построить таблицу с упорядоченным списком номеров и фамилиями поставщиков, поставляющих детали для изделия с номером J1.



Контрольные вопросы



Что такое коррелированный запрос? Чем отличается коррелированный запрос от некоррелированного?

Какие существуют ограничения на формирование коррелированного запроса?

Каким образом сохранить результаты запроса в таблице?

Какими средствами SQL реализуются следующие операции реляционной алгебры: ограничение, декартово произведение, выбор, пересечение, объединение, разность, соединение?

Что такое внешнее соединение?

Как реализован в SQL квантор существования?

Как реализован в SQL квантор всеобщности?

В каких случаях вместо фразы IN можно использовать операцию сравнения?

Какие существуют средства группирования в SQL? Как они используются?


ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC


Лабораторная работа 8

ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC

Цель работы

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

Содержание работы и методические указания к ее выполнению

Для выполнения работы необходимо

изучить базовые функции выборки данных SQLBindCol, SQLFetch(), SQLGetData();

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

настроить среду выполнения, разработать и отладить ODBC-программу выборки данных.

В ODBC существует две функции базового уровня для выборки результатов - SQLBindCol() и SQLFetch(). Функция SQLBindCol() определяет область хранения данных результирующего множества, функция SQLFetch() осуществляет выборку данных в области хранения.

Каждый столбец, который требуется выбрать, связывается с помощью отдельного вызова функции SQLBindCol(). Функция SQLBindCol() назначает область хранения в памяти и тип данных для столбца результирующего множества. Она определяет:

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

длину указанного буфера хранения.

область памяти для хранения длины столбца выборки.

преобразование типа данных.

Алгоритм программы, использующей SQLFetch() и SQLBindCol() для возвращения данных из результирующего множества предполагает выполнения следующих шагов:

Вызывается функция SQLBindCol() один раз для каждого столбца, который должен быть возвращен из результирующего множества.

Вызывается функция SQLFetch() для перемещения курсора на следующую строку и возврата данных из связанных столбцов.

Повторяется шаг 2 до тех пор, пока функция SQLFetch()не возвратит SQL_NO_DATA_FOUND. Это указывает на то, что был достигнут конец результирующего множества. Если результирующее множество является пустым, то SQL_NO_DATA_FOUND будет возвращен при первом вызове SQLFetch().

RETCODE SQLBindCol (hstmt, icol, fcType, rgbValue, cbValueMax, pcbValue)


Если rgbValue является нулевым указателем, то драйвер "отвязывает" столбец. Для отвязывания всех столбцов прикладная программа вызывает функцию SQLFreeStmt() с опцией SQL_UNBIND.

SDWORD cbValueMax; - максимальная длина буфера rgbValue; для символьных данных, rgbValue должен также включать в себя место для байта нулевого окончания.

SDWORD FAR* pcbValue; - число байт, которое может возвращаться в rgbValue при вызове SQLGetData().

Замечание. Прикладная программа может использовать SQLBindCol() для некоторых столбцов, а SQLGetData() - для других столбцов в пределах той же самой строки.

Последовательность выполнения лабораторной работы



Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.

Разработать ODBC-программу для решения задачи из соответствующего варианта с помощью функций SQLBindCol(), SQLFetch().

Разработать ODBC-программу для решения задачи из соответствующего варианта с помощью функций SQLFetch(), SQLGetData().

После выполнения лабораторной работы привести базу данных в исходное состояние.

Требования к разрабатываемой программе

Разрабатываемая программа должна удовлетворять следующим требованиям:

все используемые функции ODBC должны анализироваться на корректность кода возврата;

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

при выполнении запросов должно быть предусмотрено использование параметров; параметры варианта задания должны быть введены в ходе выполнения программы и переданы в SQL-запрос;

при выполнении программы должна контролироваться целостность базы данных;

программа должна быть достаточно документирована.

Варианты заданий

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

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

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



Вывести информацию о поставщиках, поставивших указанную деталь в заданный период.

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

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

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

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

Контрольные вопросы

Какие существуют базовые функции выборки данных? Охарактеризуйте каждую из них.

Как "отвязать" отдельный столбец результирующего множества?

Каким образом можно "отвязать" все столбцы результирующего множества?

Что возвращает функция SQLFetch, если в результирующем множестве больше не осталось данных?

Как определить область хранения данных?

Каков алгоритм выборки данных с помощью курсора?

Как работает функция SQLFetch?

Можно ли использовать SQLFetch для продвижения курсора в обратном направлении?


ВЫПОЛНЕНИЕ ПРОСТЕЙШИХ SQL-ОПЕРАТОРОВ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC


Лабораторная работа 7

ВЫПОЛНЕНИЕ ПРОСТЕЙШИХ SQL-ОПЕРАТОРОВ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC.

Цель работы

Ознакомиться со структурой программ, использующие средства ODBC, реализовать и выполнить с использованием простейших функций ODBC запросы, связанные с модификацией таблиц.

Содержание работы и методические указания

к ее выполнению

Для выполнения работы необходимо

ознакомиться со структурой программы ODBC;

изучить функции выполнения подготовительных операций в ODBC-программе;

ознакомиться со средствами обработки ошибок в ODBC-программе;

изучить функции непосредственного и подготавливаемого выполнения SQL-операторов, передачи параметров;

настроить среду выполнения, разработать и отладить ODBC-программу.

1. Структура ODBC-программы и функции инициализации

Общая структура ODBC-программы имеет вид:

Идентификатор окружения каждого приложения ODBC описывается функцией SQLAllocEnv, который должен быть освобожден в конце приложения с помощью функции SQLFreeEnv. Тип идентификатора окружения HENV.

RETCODE SQLAllocEnv (env)

HENV env - указатель области хранения в памяти идентификатора окружения.

RETCODE SQLFreeEnv (env)

HENV env - имя идентификатора окружения, который должен быть освобожден.

Идентификатор соединения представляет собой соединение между источником данных и прикладной программой. Для каждого источника данных, с которым приложение предполагает соединиться должен быть назначен идентификатор соединения SQLAllocConnect и освобожден SQLFreeConnect. Приложение может соединиться с источником данных, используя SQLConnect и разъединиться, используя SQLDisconnect. Тип идентификатора соединения HDBC.

RETCODE SQLAllocConnect (env, dbc)

HENV env - указатель на идентификатор окружения прикладной программы.

HDBC dbc - указатель области хранения памяти для идентификатора соединения.

RETCODE SQLFreeConnect (dbc)

HDBC dbc - указатель области памяти для освобождаемого идентификатора соединения.

RETCODE SQLConnect(dbc, szDSN, sbDSN, szUID, sbUID, szAuthStr, cbAuthStr)


HDBC dbc - идентификатор соединения.

UCHAR szDSN - строка с именем источника данных, с которым прикладная программа собирается соединиться.

SWORD sbDSN - длина строки источника данных, если это имя имеет нулевое окончание, то этот параметр можно установить в SQL_NTS, который является константой ODBC и используется вместо длины параметра, если параметр содержит строку с нулевым окончанием.

UCHAR szUID - имя пользователя.

SWORD sbUID - длина имени пользователя или SQL_NTS.

UCHAR szAuthStr - пароль пользователя.

SWORD cbAuthStr - длина пароля.

RETCODE SQLDisconnect (dbc)

HDBC dbc - идентификатор доступа для отсоединения.

Идентификатор оператора аналогичен идентификатору окружения или соединения за исключением того, что он ссылается на SQL-оператор. Идентификатор соединения может быть связан несколькими идентификаторами операторов, но каждый идентификатор оператора связан только со своим идентификатором соединения. Чтобы назначить идентификатор оператора, приложение вызывает функцию SQLAllocStmt, а для освобождения SQLFreeStmt. Тип идентификатора оператора HSTMT.



RETCODE SQLAllocStmt (dbc, stmt)

HDBC dbc - идентификатор соединения.

HSTMT stmt - указатель области хранения в памяти для идентификатора оператора.

RETCODE SQLFreeStmt (stmt, fOption)

HSTMT stmt -идентификатор оператора.

UWORD fOption - одна из следующих опций:

SQL_CLOSE - закрывает курсор, связанный с hstmt, (если он был определен) и отбрасывает все ожидаемые результаты. Прикладная программа может вновь открыть этот курсор позднее, вновь выполнить оператор SELECT с теми же самыми или другими значениями параметров. Если курсор не открыт, то эта опция не повлияет на программу.

SQL_DROP - освобождает hstmt, освобождает все ресурсы, связанные с ним, закрывает курсор, если он открыт, и отбрасывает все ожидаемые строки. Эта опция завершает все обращения к hstmt. hstmt обязательно должен быть переназначен для повторного использования. Эта опция освобождает все ресурсы, которые были определены с помощью функции SQLFreeStmt.



SQL_UNBIND - освобождает все буферы столбцов, которые повторно используются функцией SQLBindCol для данного идентификатора оператора.

SQL_RESET_PARAMS - освобождает все буферы параметров, которые были установлены функцией SQLBindCol для данного идентификатора оператора.

2. Средства отслеживания ошибок

Для отслеживания ошибок в ODBC используется функция SQLError, которая возвращает сообщение об ошибке при неудачном завершении какой-либо функции ODBC.

Каждая ODBC-функция возвращает RETCODE, который принимает одно из нижеследующих значений:

SQL_SUCCESS Операция выполнена без ошибки.;

SQL_SUCCESS_WITH_INFO Функция завершена, но при вызове SQLError указывает на ошибку. В большинстве случаев это возникает, когда значение, которое должно быть возвращено очень большого размера, чем это предусмотрено буфером прикладной программы;

SQL_ERROR Функция не была завершена из-за возникшей ошибки. При вызове SQLError можно будет получить больше информации о сложившейся ситуации;

SQL_INVALID_HANDLE Не правильно определен идентификатор окружения, соединения или оператора. Это часто случается, когда идентификатор используется после того, как он был освобожден или если был определен нулевой указатель;

SQL_NO_DATA_FOUND Больше нет подходящей информации. Фактически это не является ошибкой. Чаще всего такой статус возникает при использовании курсора, когда больше нет строк для его продвижения;

SQL_NEED_DATA Необходимы данные для параметра.

RETCODE SQLError (henv, hdbc, hsmt, szSqlState, pfNativeError, szErrorMsg, cbErrorMsgMax, cbErrorMsg)

HENV henv - идентификатор окружения.

HDBC hdbc - идентификатор соединения.

HSTMT hsmt - идентификатор оператора.

UCHAR szSqlState - SQLSTATE в качестве строки завершения.

SDWORD pfNativeError - в этом параметре и будет возвращена ошибка, возникшая в СУБД, а также ее собственный код. Если соответствующего собственного кода ошибки не существует, то возвращается ноль.

UCHAR szErrorMsg - указатель на буфер, куда будет возвращен текст ошибки (строка с нулевым окончанием).



SWORD cbErrorMsgMax - максимальный размер вышеописанного буфера, должен быть меньше или равен SQL_MAX_MESSAGE_LENGTH-1.

SWORD cbErrorMsg - сюда возвращается число байт, скопированных в буфер.

3. Непосредственное и подготавливаемое выполнение операторов SQL

Непосредственное выполнение используется в тех случаях, когда

SQL-операторы, которые должны быть выполнены, будут выполняться только один раз;

не требуется информации о результирующем множестве до выполнения оператора;



SQLExecDirect представляет собой самый быстрый способ запустить SQL-оператор при одноразовом выполнении.

RETCODE SQLExecDirect (hstmt, szSqlStr, cbSqlStr)

HSTMT hstmt- идентификатор оператора.

UCHAR szSqlStr- строка с SQL-оператором.

SDWORD cbSqlStr - длина строки szSqlStr.

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

SQLPrepare подготавливает SQL-строку для выполнения:

RETCODE SQLPrepare (hstmt, szSqlStr, cbSqlStr)



HSTMT hstmt - идентификатор оператора

UCHAR szSqlStr- строка с SQL-оператором

SDWORD cbSqlStr - длина строки szSqlStr

SQLExecute выполняет подготовленный оператор:

RETCODE SQLExecute(hstmt)

HSTMT hstmt - идентификатор оператора

SQLPrepare и SQLExecDirect отличаются тем, что при вызове SQLPrepare оператор SQL в действительности не выполняется, вместо этого определяется путь доступа к данным источника данных. Использование подготавливаемого выполнения удобно для операторов, которые будут выполняться более одного раза. Так как путь доступа к данным уже определен, то выполнение может осуществляться несколько быстрее, чем при использовании SQLExecDirect. Кроме того, каждый вызов SQLExecute передает базе данных только идентификатор для планирования обращения, а не весь SQL-оператор.

4. Использование параметров при выполнении

Параметры используются при непосредственном и подготавливаемом выполнении.


Маркеры параметров определяются в SQL-операторах с помощью знаков "?". Например, SELECT n_post FROM s WHERE town=? или INSERT INTO p(name, town) VALUES (?,?). Для того, чтобы связать буфер с маркерами параметров, прикладная программа должна вызвать SQLBindParameter:

RETCODE SQLBindParameter (hsmt, ipar, fParamType, fCType, fSqlType, cbColDef, ibScale, rgbValue, cbValueMax, pcValue)

HSTMT hsmt - идентификатор оператора, он должен быть точно тем же идентификатором оператора, с которым этот оператор подготавливается и выполняется.

UWORD ipar - номер параметра для связи. В операторе SQL операторы нумеруются слева направо, начиная с 1. Например, для следующего SQL-оператора используется три параметрических маркера : INSERT INTO j (n_izd, name, town) VALUES (?,?,?). Чтобы связать эти параметры, SQLBindParameter вызывается три раза с ipar, установленным в 1, 2 и 3 соответственно.

SWORD fParamType - является типом параметра для связи и может принимать одно из трех значений: SQL_PARAM_INPUT, SQL_PARAM_INPUT_OUTPUT или SQL_PARAM_OUTPUT. SQL_PARAM_INPUT используется для процедур, использующих параметры ввода. SQL_PARAM_INPUT_OUTPUT маркирует параметр ввода/вывода в процедуре. SQL_PARAM_OUTPUT маркирует значение возврата или параметр вывода в процедуре.

SWORD fCType - является С-типом данных для параметра. Это тип данных из которого необходимо конвертировать данные.

SWORD fSqlType - является ODBC типом данных для параметра. Это тип данных в которых конвертируются данные и он должен совпадать с SQL-типом столбца, соответствующего этому параметрическому маркеру.

UDWORD сbColDef - точность столбца или выражения соответствующего маркера параметра.

SWORD ibScale - размер столбца или выражения соответствующего маркера параметра

PTR rgbValue - указатель буфера для данных параметра, который при вызове SQLExecute или SQLExecuteDirect содержит действительные значения параметра.

SDWORD сbValueMax - максимальная длина буфера rgbValue.

SDWORD pcbValue - указатель буфера для длины параметра.



Ниже приведены основные значения С- и SQL-типов параметров.

С-тип SQL-тип
SQL_C_BINARY SQL_C_FLOAT SQL_BINARY SQL_DOUBLE
SQL_C_BIT SQL_C_TIME SQL_BIT SQL_FLOAT
SQL_C_CHAR SQL_C_DEFAULT SQL_CHAR SQL_INTEGER
SQL_C_DATE SQL_C_SLONG SQL_DATE SQL_REAL
SQL_C_DOUBLE SQL_C_SSHORT SQL_DECIMAL SQL_SMALLINT
    SQL_TIME SQL_VARCHAR
5. Настройка доступа к источнику данных

Настройка доступа к источнику данных включает:

редактирование файла .odbc.ini.;

определение переменной ODBCINI;

установка переменных окружения СУБД;

включение необходимых заголовочных файлов.

Для настройки источника данных, необходимо проверить находится ли системный текстовый файл .odbc.ini в домашней директории пользователя и отредактировать его, настроив на требуемые источники данных.

В файле .odbc.ini должен быть под некоторым идентификатором описан требуемый источник данных, имя которого используется функцией SQLConnect(), и далее должен присутствовать раздел с данным именем, в котором содержатся атрибуты, описывающие источник данных. Файл .odbc.ini должен содержать имя источника данных, имя сервера баз данных, имя базы данных и другие атрибуты.

В переменной окружения ODBCINI необходимо указать полное имя системного файла .odbc.ini из домашней директории. Сделать это можно, либо введя с консоли соответствующую команду, либо поместив эту команду в файл загрузки .login. Форма записи команды зависит от используемой программы Shell-интерпретатора.

Системные требования зависят от той СУБД, с которой работает пользователь. Например, при работе с СУБД Informix это обеспечивается переменными окружения, выставленными в файле .cshrc в домашней директории пользователя.

Для получения доступа до ODBC-функций, в программе должен быть описан заголовочный файл sqlext.h. В файле sqltypes.h находятся описание типов данных используемых в ODBC.

Как и любой исходный файл, написанный на языке Си, файл с программой, вызывающей ODBC-функции, должен иметь расширение .с.


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

Последовательность выполнения лабораторной работы



Убедиться в наличии и заполненности базы данных поставщиков, деталей, изделий, поставок.

Разработать ODBC-программу для решения задачи 1 из соответствующего варианта с помощью функций непосредственного выполнения.

Разработать ODBC-программу для решения задачи 2 из соответствующего варианта с помощью функций подготавливаемого выполнения.

После выполнения лабораторной работы привести базу данных в исходное состояние.

Требования к разрабатываемой программе

Разрабатываемая программа должна удовлетворять следующим требованиям:

все используемые функции ODBC должны анализироваться на корректность кода возврата;

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

при выполнении запросов должно быть предусмотрено использование параметров; параметры варианта задания должны быть введены в ходе выполнения программы и переданы в SQL-запрос;

при выполнении программы должна контролироваться целостность базы данных;

программа должна быть достаточно документирована.

Варианты заданий

Вариант 1

Из таблицы поставок удалить поставки при заданных параметрах номера поставщика (имени поставщика) и номера детали.

Увеличить рейтинг поставщика, выполнившего наибольшую поставку некоторой детали, на указанную величину.

Вариант 2

Удалить всех поставщиков из указанного города.

Изменить цвет самой тяжелой детали на указанный.

Вариант 3

Вставить поставщика с заданными параметрами.

Удалить самую легкую деталь.

Вариант 4

Удалить поставщика, выполнившего меньше всего поставок.

Изменить название детали указанного цвета и веса.

Вариант 5

Удалить изделие из заданного города.



В таблице поставок изменить номер поставщика при заданном номере детали и изделия.

Вариант 6

Увеличить рейтинг поставщика, выполнившего больший суммарный объем поставок, на указанную величину.

Вставить деталь с заданными параметрами.

Вариант 7

Изменить название и город детали с максимальным весом на указанные значения.

Удалить из таблицы поставок все поставки конкретного поставщика.

Вариант 8

Увеличить рейтинг поставщика, выполнившего большее число поставок, на указанную величину.

Увеличить вес деталей из Лондона на некоторую величину.

Контрольные вопросы

Какова структура ODBC-программы? Перечислите ее основные компоненты.

С помощью каких средств ODBC можно отследить наличие ошибки?

В каких случаях непосредственное выполнение операторов является наиболее эффективным?

Когда используется подготавливаемое выполнение?

Как описываются маркеры параметров, и какая для этого предусмотрена функция? Каким образом можно связать несколько параметров?

С помощью какого параметра можно освободить буферы всех столбцов?

Как описать доступ до необходимой базы данных?

С помощью какой функции описывается соединение с необходимым источником данных? Каковы ее параметры?