Работа с базами данных
ДИНАМИЧЕСКИЙ SQL
ЛАБОРАТОРНАЯ РАБОТА 6
ДИНАМИЧЕСКИЙ SQL
Цель работы
Приобретение практических навыков работы со средствами динамического SQL при написании программ на ESQL/C.
Содержание работы и методические указания
к ее выполнению
С помощью динамического SQL программа-клиент выполняет программное формирование оператора SQL для его последующего исполнения, делая это в три этапа:
Динамический оператор SQL по форме напоминает любой другой оператор SQL, записанный в программе, с тем ограничением, что он не может содержать имена главных переменных. Поэтому
Оператор Prepare создает структуру данных, имеющую имя и отображающую строку символов с текстом оператора SQL.
Подготовленный по оператору Prepare динамический оператор (группу операторов) можно многократно выполнять. С помощью оператора Execute выполняются операторы, отличные от операторов Select, а также операторы Select, которые возвращают в качестве результата одну строку. Если оператор Select возвращает более одной строки, динамический оператор Select выполняется не с помощью оператора Execute, а подключается к курсору и в дальнейшем используется обычным образом с помощью курсорных средств. В обоих случаях при выполнении динамического оператора с помощью спецификатора Using ему передаются главные переменные, участвующие в выражениях и принимающие возвращаемые значения и, по сути, играющие роль фактических параметров. Как ограничение, следует отметить, что знак вопроса нельзя использовать вместо идентификаторов SQL, таких как имя базы данных, таблицы или столбца: эти идентификаторы должны указываться в тексте оператора при его подготовке, возможно, как полученные из пользовательского ввода.
Последовательность выполнения лабораторной работы:
Требования к разрабатываемой программе
Разрабатываемые ESQL/C-программы должна удовлетворять следующим требованиям:
Варианты заданий
Вариант 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)).
Контрольные вопросы
ДОСТУП К БАЗАМ ДАННЫХ ПОСРЕДСТВОМ CGI-СКРИПТА, НАПИСАННОГО НА ЯЗЫКЕ ESQL
Лабораторная работа 9
ДОСТУП К БАЗАМ ДАННЫХ ПОСРЕДСТВОМ CGI-СКРИПТА, НАПИСАННОГО НА ЯЗЫКЕ ESQL/C
Цель работы
Ознакомиться с основными понятиями разработки CGI-скриптов с целью написания простейших CGI-программ доступа к базам данных с использованием языка ESQL/C.
Содержание работы и методические указания к ее выполнению
Для выполнения работы необходимо
Общая схема доступа к базам данных с использованием CGI-скриптов имеет вид:
[ZEBR_TAG_P ALIGN="JUSTIFY">Спецификация CGI описывает формат и правила обмена данными между программным обеспечением WWW-сервера и запускаемой программой и представляет собой общую среду и набор протоколов для внешних приложений, которые используются при взаимодействии с Web-сервером.
CGI-программа (CGI-скрипт) представляет собой программу локальной операционной системы сервера (в двоичном виде или в виде программы для интерпретатора), которая может быть вызвана из среды WWW. Для инициирования CGI достаточно, чтобы в URL-адресе был указан путь до запускаемой программы. Программное обеспечение WWW-сервера исполняет эту программу, передает ей входные параметры и возвращает результаты ее работы, как результат обработки запроса, клиенту.
С целью облегчения администрирования CGI-программ, а также для удовлетворения требованиям безопасности CGI-программы группируются в одном или нескольких явно указанных серверу каталогах. При выполнении лабораторной работы в качестве таких каталогов выступают каталоги cgi-bin в домашней директории пользователя или в директории public_html. При этом
Общепринятым средством организации интерфейса с пользователем в WWW-среде является HTML-форма. Если целью формы является сбор данных для последующей передачи их серверу, то такая форма должна обязательно содержать:
Форма задается в HTML-документе с помощью тега FORM. Все элементы управления находятся внутри контейнера .
Среди атрибутов HTML-формы для целей CGI-программирования наиболее важны
Основными методами являются методы GET и POST. В зависимости от метода (GET или POST) данные формы будут помещены в переменную окружения QUERY_STRING или поданы на стандартный ввод STDIN. В случае метода GET, используемого по умолчанию, данные добавляются в конец URL-адреса и отделяются знаком "?". С помощью метода POST информация, введенная пользователем, посылается непосредственно в сценарий с помощью выходного потока сервера STDOUT и входного потока STDIN вашего сценария. Преимуществом использования метода POST является неограниченность длины передаваемого сообщения и безопасность передачи по сравнению с GET.
При нажатии некоторой кнопки на форме 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;
Последовательность выполнения лабораторной работы
Требования к разрабатываемой программе
Разрабатываемые программы должна удовлетворять следующим требованиям:
Варианты заданий
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
Вариант 6
Вариант 7
Вариант 8
Контрольные вопросы
ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
ЛАБОРАТОРНАЯ РАБОТА 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.
Контрольные вопросы
ИСПОЛЬЗОВАНИЕ ЯЗЫКА PHP ДЛЯ ДОСТУПА К БАЗАМ ДАННЫХ
Лабораторная работа 10
ИСПОЛЬЗОВАНИЕ ЯЗЫКА PHP ДЛЯ ДОСТУПА К БАЗАМ ДАННЫХ
Цель работы
Ознакомиться с базовыми конструкциями языка PHP с целью написания с их использованием простейших 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-форме и содержащих значения данных объектов.
В результате отпадает необходимость в выполнении рутинного преобразования, связанного с разбором последовательности
имя=значение&имя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-скрипта, написанного любыми другими средствами, разница состоит лишь в используемых средствах:
При этом остаются актуальными все замечания, сделанные в предыдущей лабораторной работе относительно установки переменных окружения и обеспечения мер безопасности при работе с базой данных.
Последовательность выполнения лабораторной работы
Требования к разрабатываемой программе
Разрабатываемые программы должна удовлетворять следующим требованиям:
Варианты заданий
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
Вариант 6
Вариант 7
Вариант 8
Контрольные вопросы
ЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
ЛАБОРАТОРНАЯ РАБОТА 13
ЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ БАЗЫ ДАННЫХ
Цель работы
Выполнить этап логического проектирования реляционной базы данных. Создать спроектированную базу данных средствами имеющейся СУБД.
Содержание работы и методические указания
к ее выполнению
Цель логического этапа проектирования - организация данных, выделенных на этапе инфологического проектирования в форму, принятую в выбранной СУБД. Задачей логического этапа проектирования является отображение объектов предметной области в объекты используемой модели данных, чтобы это отображение не противоречило семантике предметной области и было по возможности наилучшим (эффективным, удобным и т.д.). С точки зрения выбранной СУБД задача логического проектирования реляционной базы данных состоит в обоснованном принятии решений о том:
Требования к выбранному набору отношений и составу их атрибутов должны удовлетворять следующим условиям:
Удовлетворение отмеченных требований обеспечивается аппаратом нормализации отношений. Нормализация отношений - это пошаговый обратимый процесс композиции или декомпозиции исходных отношений в отношения, обладающие лучшими свойствами при включении, изменении и удалении данных, назначение им ключей по определенным правилам нормализации и выявление всех возможных функциональных зависимостей.
Процесс получения реляционной схемы базы данных из ER-диаграммы включает следующие шаги:
1. Каждая простая сущность превращается в отношение. Простая сущность - сущность, не являющаяся подтипом и не имеющая подтипов. Имя сущности становится именем отношения.
2. Каждый атрибут становится возможным столбцом с тем же именем; может выбираться более точный формат исходя из возможностей СУБД. Столбцы, соответствующие необязательным атрибутам, могут содержать неопределенные значения; столбцы, соответствующие обязательным атрибутам, - не могут.
3. Компоненты уникального идентификатора сущности превращаются в первичный ключ отношения. Если имеется несколько возможных уникальных идентификатора, выбирается наиболее используемый.
4. Связи M:1 (и 1:1) становятся внешними ключами. Для этого делается копия уникального идентификатора с конца связи "один" и соответствующие столбцы составляют внешний ключ. Необязательные связи соответствуют столбцам, допускающим неопределенные значения; обязательные связи - столбцам, не допускающим неопределенные значения.
5. В таблицах, построенных на основе ассоциаций, внешние ключи используются для идентификации участников ассоциации, а в таблицах, построенных на основе характеристик и обозначений, использовать внешние ключи используются для идентификации сущностей, описываемых этими характеристиками и обозначениями. Специфицировать ограничения, связанные с каждым из этих внешних ключей.
6. Если в концептуальной схеме присутствовали подтипы, то возможны два способа:
а) все подтипы размещаются в одной таблице;
б) для каждого подтипа строится отдельная таблица.
При применении способа (а) таблица создается для наиболее внешнего супертипа. В таблицу добавляется по крайней мере один столбец, содержащий код ТИПА, и он становится частью первичного ключа. Для работы с подтипами могут создаваться представления. При использовании метода (б) супертип воссоздается с помощью конструкции UNION.
При обработке данных необходима гарантия сохранения целостности данных в базе, поэтому важным этапом проектирования реляционной базы данных является обеспечение целостности базы данных.
Выделяют три группы правил целостности:
Обеспечение целостности базы данных обеспечивается заданием ограничений целостности. Ограничение целостности - это некоторое утверждение, которое может быть истинным или ложным в зависимости от состояния базы данных.
По способам реализации ограничения целостности делятся на:
При выполнении этой лабораторной работы в процессе построения реляционной модели данных должны быть обеспечены декларативные ограничения целостности. Заданию процедурных ограничений целостности посвящена лабораторная работа 14. Декларативные ограничения целостности должны обеспечивать:
Последовательность выполнения лабораторной работы:
1. Изучить вопросы теории нормализации, условия нахождения отношения в той или иной нормальной форме
2. Выполнить процедуру построения реляционной модели данных из ER-модели, построив необходимый набор отношений. Определить состав атрибутов отношений.
Определить первичные и внешние ключи отношений.
Выполнить шаги по нормализации полученных отношений, приведя модель к третьей нормальной форме.
5. Задать необходимые декларативные ограничения целостности исходя из специфики предметной области.
6. Представить связи между первичными и внешними ключами в виде вертикальной диаграммы.
7. Средствами имеющейся СУБД создать спроектированную базу данных, ее таблицы, задать необходимые ограничения целостности.
8. На языке SQL записать выражения для указанных в варианте задания запросов на выборку данных из созданной базы данных.
Проверить работоспособность написанных запросов в интерактивном режиме.
9. Оформить следующие разделы отчета:
Контрольные вопросы
ПОЛНОМОЧИЯ НА ИСПОЛЬЗОВАНИЕ БЫЗЫ ДАННЫХ. РАБОТА С ВНЕШНИМИ БАЗАМИ ДАННЫХ
Лабораторная работа 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 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. Оформить следующие разделы отчета:
Контрольные вопросы
РАБОТА С КУРСОРОМ
ЛАБОРАТОРНАЯ РАБОТА 5
РАБОТА С КУРСОРОМ
Цель работы
Приобретение практических навыков работы с курсором в программах на языке ESQL/C.
Содержание работы и методические указания
к ее выполнению
Обработка многострочного запроса осуществляется с помощью специального объекта данных, называемого курсором. Множество строк, возвращаемое предложением Select, называется активным множеством. В процессе использования курсор может задаваться в двух режимах: последовательном и скроллирующем. Последовательный курсор позволяет просматривать активное множество только в последовательном порядке, а также используется при модификации и удалении строк из активного множества.
Скроллирующий курсор позволяет просматривать строки из активного множества в произвольном порядке. Основные операции при работе с курсором:
Последовательность выполнения лабораторной работы
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.
Контрольные вопросы
РАЗРАБОТКА ПРОГРАММНОГО ПРИЛОЖЕНИЯ НАД БАЗОЙ ДАННЫХ
ЛАБОРАТОРНАЯ РАБОТА 15
РАЗРАБОТКА ПРОГРАММНОГО ПРИЛОЖЕНИЯ НАД БАЗОЙ ДАННЫХ
Цель работы
Выбрав необходимые средства разработки приложений, реализовать программное приложение, работающее с созданной базой данных.
Содержание работы и методические указания
к ее выполнению
Результатом выполнения лабораторной работы должны быть законченное программное приложение и отчет о выполнении лабораторных работ 11 - 15. Раз-рабатываемое программное приложение должно:
Представляемый отчет должен содержать
РЕАЛИЗАЦИЯ ПРОСТЕЙШИХ ОПЕРАЦИЙ РАБОТЫ С БАЗОЙ ДАННЫХ СРЕДСТВАМИ ВСТРОЕННОГО SQL
ЛАБОРАТОРНАЯ РАБОТА 4РЕАЛИЗАЦИЯ ПРОСТЕЙШИХ ОПЕРАЦИЙ РАБОТЫ С БАЗОЙ ДАННЫХ СРЕДСТВАМИ ВСТРОЕННОГО SQL
Цель работы
Приобретение начальных навыков работы со встроенным SQL средствами Informix-ESQL/C.
Содержание работы и методические указания к ее выполнению
Informix-ESQL/C - инструмент разработки приложений для базы данных на языке Си с возможностью использования средств SQL. При создании ESQL/C-программы пользователь разрабатывает С-программу, включает в нее специальные заголовочные файлы и SQL-описания, реализующие работу с базой данных. Препроцессор ESQL/C преобразует SQL-описания в обращения к библиотечным функциям, которые взаимодействуют с сервером базы данных, и дает на выходе С-код. Далее полученный С-код компилируется и линкуется. Исходя из вышесказанного, пользователь, желающий разрабатывать ESQL/С-программы должен обладать навыками работы с языком Си и уметь пользоваться средствами SQL. При этом необходимо учитывать особенности той операционной системы, в рамках которой создается клиентское приложение. В данной и двух последующих лабораторных работах предполагается разработка несложных ESQL/С-программ. В лабораторных работах используется база данных, содержащая 4 таблицы:
Если приведенная база данных отсутствует (или любая таблица из нее), то необходимо восстановить базу данных, пользуясь интерактивными средствами программы 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/С-программ необходимо изучить:
Данная лабораторная работа связана с написанием таких программ на 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-программы должны удовлетворять следующим требованиям:
Варианты заданий
Вариант 1
1. Выдать полную информацию о поставщике, имеющим максимальный рейтинг.
2. Перевести поставщика с минимальным рейтингом в город, где изготавливается самая тяжелая деталь.
Вариант 2
1. Выдать полную информацию об изделии, изготавливаемом в городе, в котором проживает поставщик с максимальным рейтингом.
2. Поменять местами города, где проживают поставщики с минимальным и максимальным рейтингом.
Вариант 3
1. Выдать полную информацию о детали, имеющей максимальный вес.
2. Перевести поставщика с максимальным рейтингом в Лондон.
Вариант 4
1. Выдать общий объем поставок деталей красного цвета.
2. В таблице деталей сменить название детали "Винт" на название детали с максимальным весом.
Вариант 5
1. Выдать полную информацию об изделии, имеющем максимальный объем поставок деталей.
2. В таблице деталей сменить город, где изготавливается самая легкая деталь, на Париж.
Вариант 6
1. Выдать общий объем поставок деталей для изделия J2.
2. Увеличить рейтинг всех лондонских поставщиков на 5.
Вариант 7
1. Выдать общий объем поставок деталей для изделия с максимальным объемом поставок.
2. Увеличить вес всех красных деталей на 10.
Контрольные вопросы
СОЗДАНИЕ И МОДИФИКАЦИЯ БАЗЫ ДАННЫХ И ТАБЛИЦ
Лабораторная работа 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 имя_таблицы
а затем требуемые значения использовать при формировании условий в операторах удаления либо модификации.
Контрольные вопросы
ТРИГГЕРЫ И ПРОЦЕДУРЫ
ЛАБОРАТОРНАЯ РАБОТА 14
ТРИГГЕРЫ И ПРОЦЕДУРЫ
Цель работы
Написать необходимый набор триггеров и процедур, обеспечивающих задание процедурных ограничений целостности.
Содержание работы и методические указания
к ее выполнению
Механизм триггеров позволяет программировать обработку ситуаций, возникающих при любых изменениях в базе данных. Триггер придается таблице базы данных и применяется при выполнении над таблицей операций включения, удаления или обновления строк. Применение триггера заключается в проверке сформулированных в нем условий, при истинности которых выполняются SQL-операторы, определенные внутри триггера, либо происходит вызов специфицированной внутри триггера процедуры базы данных. Триггер хранится в базе данных наряду с таблицами, представлениями, хранимыми процедурами.
При определении триггера задаются:
Синтаксис оператора Create trigger (в нотации СУБД Informix) для создания триггера приведен в Приложении 2.
При выполнении триггера выполняется оператор модификации данных либо вызывается хранимая процедура, предварительно созданная и помещенная в базу данных оператором Create procedure. Хранимая процедура в отличие от триггеров может выполнять достаточно сложный набор действий:
Одним из базовых требований к проектируемой базе данных является требование ее логической независимости от приложений, которые с ней работают.
Все ограничения целостности должны задаваться не логикой работы приложения, а определяться на уровне базы данных. Ранее отмечалось, что по способам реализации ограничения целостности подразделяются на декларативные и процедурные, позволяющие задавать логически более сложные ограничения, в частности обеспечивать целостность по ссылкам. В этой связи важная цель механизма триггеров - обеспечение целостности базы данных и обеспечение логической независимости базы данных.
Последовательность выполнения лабораторной работы:
1. Ознакомиться со средствами разработки триггеров и хранимых процедур.
2. Разработать набор триггеров и хранимых процедур, обеспечивающих целостность разработанной базы данных по ссылкам.
3. Проверить правильность работы триггеров и процедур, разработанных в п. 2.
4. Разработать набор триггеров и хранимых процедур, обеспечивающих целостность разработанной базы данных исходя из требований предметной области.
5. Проверить правильность работы триггеров и процедур, разработанных в п. 4.
6. Разработать набор хранимых процедур, которые целесообразно разместить в базе данных исходя из логики работы с базой данных.
7. Проверить правильность работы процедур, разработанных в п. 6.
8. Оформить раздел отчета "Хранимые процедуры и триггеры", включив в него описание разработанных триггеров и хранимых процедур.
Контрольные вопросы
ВЫБОР И МОДИФИКАЦИЯ ДАННЫХ ТАБЛИЦ
Лабораторная работа 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.
Контрольные вопросы
ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC
Лабораторная работа 8
ВЫБОРКА ДАННЫХ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC
Цель работы
Ознакомиться с базовыми функциями выборки данных в ODBC и разработать с их использованием программу получения данных из результирующего множества.
Содержание работы и методические указания к ее выполнению
Для выполнения работы необходимо
В ODBC существует две функции базового уровня для выборки результатов - SQLBindCol() и SQLFetch(). Функция SQLBindCol() определяет область хранения данных результирующего множества, функция SQLFetch() осуществляет выборку данных в области хранения.
Каждый столбец, который требуется выбрать, связывается с помощью отдельного вызова функции SQLBindCol(). Функция SQLBindCol() назначает область хранения в памяти и тип данных для столбца результирующего множества. Она определяет:
Алгоритм программы, использующей SQLFetch() и SQLBindCol() для возвращения данных из результирующего множества предполагает выполнения следующих шагов:
RETCODE SQLBindCol (hstmt, icol, fcType, rgbValue, cbValueMax, pcbValue)
Если rgbValue является нулевым указателем, то драйвер "отвязывает" столбец. Для отвязывания всех столбцов прикладная программа вызывает функцию SQLFreeStmt() с опцией SQL_UNBIND.
SDWORD cbValueMax; - максимальная длина буфера rgbValue; для символьных данных, rgbValue должен также включать в себя место для байта нулевого окончания.
SDWORD FAR* pcbValue; - число байт, которое может возвращаться в rgbValue при вызове SQLGetData().
Замечание. Прикладная программа может использовать SQLBindCol() для некоторых столбцов, а SQLGetData() - для других столбцов в пределах той же самой строки.
Последовательность выполнения лабораторной работы
Требования к разрабатываемой программе
Разрабатываемая программа должна удовлетворять следующим требованиям:
Варианты заданий
Контрольные вопросы
ВЫПОЛНЕНИЕ ПРОСТЕЙШИХ SQL-ОПЕРАТОРОВ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC
Лабораторная работа 7
ВЫПОЛНЕНИЕ ПРОСТЕЙШИХ SQL-ОПЕРАТОРОВ С ИСПОЛЬЗОВАНИЕМ СРЕДСТВ ODBC.
Цель работы
Ознакомиться со структурой программ, использующие средства ODBC, реализовать и выполнить с использованием простейших функций ODBC запросы, связанные с модификацией таблиц.
Содержание работы и методические указания
к ее выполнению
Для выполнения работы необходимо
1. Структура ODBC-программы и функции инициализации
Общая структура ODBC-программы имеет вид:
RETCODE SQLAllocEnv (env)
HENV env - указатель области хранения в памяти идентификатора окружения.
RETCODE SQLFreeEnv (env)
HENV env - имя идентификатора окружения, который должен быть освобожден.
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 - идентификатор доступа для отсоединения.
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, который принимает одно из нижеследующих значений:
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
Непосредственное выполнение используется в тех случаях, когда
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 |
Настройка доступа к источнику данных включает:
Для настройки источника данных, необходимо проверить находится ли системный текстовый файл .odbc.ini в домашней директории пользователя и отредактировать его, настроив на требуемые источники данных.
В файле .odbc.ini должен быть под некоторым идентификатором описан требуемый источник данных, имя которого используется функцией SQLConnect(), и далее должен присутствовать раздел с данным именем, в котором содержатся атрибуты, описывающие источник данных. Файл .odbc.ini должен содержать имя источника данных, имя сервера баз данных, имя базы данных и другие атрибуты.
В переменной окружения ODBCINI необходимо указать полное имя системного файла .odbc.ini из домашней директории. Сделать это можно, либо введя с консоли соответствующую команду, либо поместив эту команду в файл загрузки .login. Форма записи команды зависит от используемой программы Shell-интерпретатора.
Системные требования зависят от той СУБД, с которой работает пользователь. Например, при работе с СУБД Informix это обеспечивается переменными окружения, выставленными в файле .cshrc в домашней директории пользователя.
Для получения доступа до ODBC-функций, в программе должен быть описан заголовочный файл sqlext.h. В файле sqltypes.h находятся описание типов данных используемых в ODBC.
Как и любой исходный файл, написанный на языке Си, файл с программой, вызывающей ODBC-функции, должен иметь расширение .с.
При компиляции необходимо подключить необходимые библиотеки, используемые в вызываемых функциях. Поскольку в этом случае командная строка принимает достаточно сложный вид, целесообразно на уровне системного администратора оформить командный файл, в котором подключаются необходимые библиотеки.
Последовательность выполнения лабораторной работы
Требования к разрабатываемой программе
Разрабатываемая программа должна удовлетворять следующим требованиям:
Варианты заданий
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
Вариант 6
Вариант 7
Вариант 8
Контрольные вопросы
Базы данных: Разработка - Управление - Excel
- Базы данных
- Разработка баз данных
- СУБД и базы данных
- Управление базами данных
- Классика баз данных
- Софт для создания базы данных
- SQL
- Access
- FoxProо
- Расширенная оптимизация подзапросов в Oracle
- Informix
- Линтер
- Postgres
- СУБД DB2
- InterBase
- Excel
- Таблицы Excel
- Справка Excel
- Программирование в Excel
- Деньги в Excel
- Задачи Excel