280 59 861KB
Russian Pages 45
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Оренбургский государственный университет» Кафедра прикладной информатики в экономике и управлении
Н.Ф. Панова
FIREBIRD. УСТАНОВКА, РАЗРАБОТКА БАЗ ДАННЫХ, РЕАЛИЗАЦИЯ ЗАПРОСОВ Рекомендовано к изданию Редакционно-издательским советом федерального государственного бюджетного образовательного учреждения высшего профессионального образования «Оренбургский государственный университет» в качестве методических указаний для студентов, обучающихся по программам высшего профессионального образования по направлениям подготовки 230700.62 Прикладная информатика, 231300.62 Прикладная математика, 080500.62 Бизнес-информатика
Оренбург 2014
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
УДК 004.65(076.5) ББК 32.973-018.2я7 П 16 Рецензент - кандидат экономических наук О.Н. Яркова
П 16
Панова, Н.Ф. FireBird. Установка, разработка баз данных, реализация запросов: методические указания/Н.Ф. Панова; Оренбургский гос. ун-т.Оренбург : ОГУ, 2014. - 45 с.
Методические указания содержат теоретический материал по установке и настройке СУБД FireBird, основам работы в среде данной СУБД, а также пример разработки базы данных. Предназначены для студентов, обучающихся по программам высшего профессионального образования по направлениям подготовки 230700.62 Прикладная информатика, 231300.62 Прикладная математика, 080500.62 Бизнес-информатика.
УДК 004.65(076.5) ББК 32.973-018.2я7
Панова Н.Ф., 2014 ОГУ, 2014
2
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Содержание Введение…………………………………………………………………………..………4 1 Свободная СУБД FireBird ........................................................................................ 5 1.1 Основные возможности СУБД............................................................................. 5 1.2 Краткая характеристика СУБД FireBird ............................................................. 6 1.3 Требования к аппаратному обеспечению и средства доступа к серверу ........ 8 1.4 Физические ограничения ...................................................................................... 9 2 Установка программы ............................................................................................ 10 2.1 Установка серверной части ................................................................................ 10 2.2 Установка клиентской части .............................................................................. 15 3 Основы работы в среде FireBird ........................................................................... 17 3.1 Создание и подключение к БД ........................................................................... 17 3.2 Создание доменов и таблиц ............................................................................... 18 3.3 Пример разработки БД........................................................................................ 22 3.5 Оператор запросов select .................................................................................... 31 3.5.1 Обобщающие функции в операторе select ..................................................... 35 3.5.2 Группировка строк. Фраза group by. .............................................................. 35 3.5.3 Фильтрация групп. Фраза having. ................................................................... 36 3.5.4 Упорядочивание строк результирующей таблицы ....................................... 36 3.5.5 Подзапросы ....................................................................................................... 37 3.5.6 Многотабличные запросы ............................................................................... 38 3.6 Хранимые процедуры ......................................................................................... 39 3.6.1 Синтаксис хранимых процедур СУБД FireBird ............................................ 39 3.6.2 Использование хранимых процедур для вставки, удаления и обновления данных………. ........................................................................................................... 41 3.7 Триггеры и генераторы ....................................................................................... 42 3.7.1 Поддержка первичных ключей ....................................................................... 42 3.7.2 Триггеры ............................................................................................................ 42 Список использованных источников ...................................................................... 45 3
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Введение Методические указания предназначены для проведения практических и лабораторных работ по курсу «Базы данных» для студентов вторых курсов направлений
080500.62
Бизнес-информатика,
231300.62
Прикладная
математика и 230700.62 Прикладная информатика. Методические указания содержат теоретический материал по теории и практике реляционных баз данных, основам языка SQL, описание работы с хранимыми процедурами и триггерами. Указания содержат пример разработки базы данных на основе описания предметной области, включающий создание инфологической модели, преобразования этой модели в даталогическую, а также скрипты для создания объектов базы данных в среде FireBird. Методические указания могут быть полезны студентам и преподавателям других направлений, поскольку система управления базами данных FireBird является свободным программным продуктом, обладающим при этом достаточно мощными средствами для работы с удаленными базами данных.
4
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
1 Свободная СУБД FireBird СУБД FireBird является одной из самых популярных в мире бесплатных, кросплатформенных систем управления базами данных с открытым исходным кодом. Она была разработана на основе исходного кода СУБД Interbase и развивается
сегодня
независимым
международным
сообществом.
По
надѐжности, производительности и функциональным возможностям эта система мало в чѐм уступает признанным лидерам своего класса - Oracle и Microsoft SQL Server. 1.1 Основные возможности СУБД FireBird полностью поддерживает стандарты ANSI в синтаксисе языка SQL и может работать под управлением многих операционных систем Windows, Linux, MacOS, Solaris и различных Unix-платформах. Одно из достоинств этой системы – использование очень развитого языка для хранимых процедур и триггеров. FireBird
–
это
свободный
проект,
поддерживаемый
многими
программистами и специалистами из других областей по всему миру. Его начало было положено 25 июля 2000 года, когда корпорация Inprise Corp (ныне известная как Borland Software Corp) открыла исходные коды своей СУБД Interbase, которая использовалась в различных информационных системах, начиная с 1981 года. СУБД FireBird полностью бесплатна, она не требует ни регистрации, ни оплаты за поддержку. Исходный код этой системы открыт и любой желающий может разрабатывать на его базе собственные некоммерческие проекты, при условии соблюдения требований лицензии IDPL, по которой распространяется FireBird.
5
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
FireBird основан на исходном коде Interbase 6.0, который был выпущен как Open Source компанией Borland летом 2000 года. История Interbase начинается в 1984 году, таким образом, продукт является наследником более чем 20-летнего опыта работы с реляционными базами данных. В качестве преимуществ FireBird можно отметить многоверсионную архитектуру, обеспечивающую параллельную обработку оперативных и аналитических запросов (это возможно потому, что читающие пользователи не блокируют
пишущих),
компактность
(дистрибутив
5Mb),
высокую
эффективность и мощную языковую поддержку для хранимых процедур и триггеров. FireBird используется в различных промышленных системах (складских и хозяйственных, финансовых и государственном секторах) с 2001 года. Это коммерчески независимый проект C и C++ программистов, технических советников и разработчиков мультиплатформенных систем управления базами данных, основанный на исходном коде, выпущенном корпорацией Borland 25 июля 2000 года в виде свободной версии Interbase 6.0. FireBird является сервером баз данных. Один сервер FireBird может обрабатывать несколько сотен независимых баз данных, каждую с множеством пользовательских
соединений.
Он
является
полностью
свободным
от
лицензионных отчислений даже для коммерческого использования. Среди
недостатков:
отсутствие
кэша
результатов
запросов,
полнотекстовых индексов. 1.2 Краткая характеристика СУБД FireBird СУБД FireBird разработана в соответствии с требованиями ACID, заключающимися в удовлетворении условиям «атомарности, целостности, изоляции и надѐжности» транзакций («Atomicity, Consistency, Isolation and Durability»). Основная особенность FireBird — версионная архитектура, позволяющая серверу обрабатывать различные версии одной и той же записи в 6
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
любое время таким образом, что каждая транзакция видела свою версию данных, не мешая соседним («читающие транзакции не блокируют пишущие, а пишущие
не
блокируют
читающих»).
Это
позволяет
использовать
одновременно OLTP и OLAP запросы. Используя язык PSQL (процедурный SQL) FireBird, возможно создавать сложные хранимые процедуры для обработки данных полностью на стороне сервера. Для генерации отчѐтов особенно удобны хранимые процедуры с возможностью выборки, возвращающие данные в виде набора записей. Такие процедуры можно использовать в запросах точно так же, как и обычные таблицы. Хранимые процедуры и триггеры могут генерировать события, на которые может подписаться клиент. После успешного завершения транзакции (COMMIT) он будет извещѐн о произошедших событиях и их количестве. Идея генераторов (последовательностей) делает возможной простую реализацию автоинкрементных полей, и не только их. Генераторы являются 64битными хранимыми в базе данных счѐтчиками, работающими независимо от транзакций. Они могут быть использованы для различных целей, таких как генерация первичных ключей, управление длительными запросами в соседних транзакциях и т. д. СУБД FireBird предусматривает полный контроль над транзакциями. В разных транзакциях могут быть использованы разные уровни изоляции. Протокол
двухфазного
подтверждения
транзакций
обеспечивает
гарантированную устойчивость при работе с несколькими базами данных. Так же доступны оптимистическое блокирование данных и точки сохранения транзакций. Ещѐ одной особенностью FireBird является резервное копирование данных без остановки сервера, иначе говоря «резервное копирование на лету». Процесс резервного копирования сохраняет состояние базы данных на момент своего старта, не мешая при этом работе с базой. Кроме того, существует возможность производить инкрементальное резервное копирование БД. 7
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
В СУБД FireBird для каждой таблицы возможно назначение нескольких триггеров, срабатывающих до или после вставки, обновления или удаления записей. Для триггеров используется язык PSQL, позволяющий вносить начальные значения, проверять целостность данных, вызывать исключения, и т. д. В FireBird 1.5 появились «универсальные» триггеры, позволяющие в одном триггере обрабатывать вставки, обновления и удаления записей таблицы. Внешние функции СУБД заключаются в том, что библиотеки с UDF (User Defined Function) могут быть написаны на любом языке и легко подключены к серверу в виде DLL/SO, позволяя расширять возможности сервера «изнутри». Декларативное
описание
ссылочной
целостности
обеспечивает
непротиворечивость и целостность многоуровневых отношений «master-detail» между таблицами. FireBird поддерживает множество международных наборов символов (включая Unicode) с множеством вариантов сортировки. 1.3 Требования к аппаратному обеспечению и средства доступа к серверу FireBird работает на 32- и 64-разрядных версиях Windows, Linux, также на MacOS X, HP-UX, FreeBSD, и др., на аппаратных платформах x86, x64 и PowerPC, Sparc и многих других, и поддерживает легкий переход между этими платформами. Может использоваться даже не очень мощное оборудование, особенно под Linux. И как в любой СУБД, на производительность FireBird влияют такие характеристики, как количество памяти, скорость работы дисковой подсистемы и т. д. Рекомендации для выбора аппаратного обеспечения зависят от требования к системе, прогнозируемого размера базы данных, количества пользователей, и т. д. Допустимо начинать с минимальной конфигурации, расширяя еѐ по мере надобности. СУБД FireBird поддерживает множество способов доступа, включая: собственные наборы компонент для C/C++, Delphi, классы для ADO, ODBC, JDBC (Jaybird), драйверы для Python, PHP, драйвер OLE DB, dbExpress, 8
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
провайдер данных .NET и прямой доступ с использованием клиентской библиотеки сервера (fbclient.dll или GDS32.dll). 1.4 Физические ограничения СУБД FireBird поддерживает большие базы данных. Базы данных могут быть расположены в нескольких файлах, предельный размер которых зависит от операционной системы. Теоретический предел в настоящее время составляет 64TB для одного файла базы данных, таким образом, главные ограничения накладываются файловой системой и местом на жѐстком диске. Практически база данных объемом 1 ТБ стабильно работает, что доказывает проведенный тест. Максимальная длина одной записи (суммарно все поля за исключением полей с типом BLOB) равна 64 КБ.
9
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
2 Установка программы Перед установкой рекомендуемой версии СУБД FireBird на сервере или на клиентских компьютерах необходимо убедиться в том, что ранее на данном компьютере не была установлена другая версия СУБД FireBird. Убедиться можно следующим способом: найти в системном каталоге операционной системы файл GDS32.DLL и проверить его дату и версию. Если проверка показала наличие на компьютере ранее установленной другой версии СУБД FireBird, то необходимо выяснить, для каких целей это было сделано. В том случае, если другая версия СУБД FireBird, не использовалась
какими-либо
другими
программными
комплексами,
установленными на данном компьютере, то необходимо удалить предыдущую версию СУБД FireBird, а затем поставить рекомендованную версию. После удаления предыдущей версии СУБД FireBird следует визуально или с помощью поиска файлов убедиться в том, что в
системном каталоге
операционной системы не осталось файлов GDS32.DLL и FBCLIENT.DLL. Если же такие файлы остались, то необходимо их удалить вручную. Если же установленная ранее нерекомендуемая версия СУБД FireBird используется какими-либо другими программами, то все равно необходимо установить рекомендуемую версию СУБД FireBird. 2.1 Установка серверной части Для установки СУБД FireBird
необходимо запустить инсталляцию
FireBird 2.5. Вид окна установки представлен на рисунке 1.
10
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 1 – Мастер установки СУБД FireBird Далее следует принять лицензионное соглашение (см. рисунок 2).
Рисунок 2 – Окно принятия лицензионного соглашения После принятия лицензионного соглашения и прочтения важной информации по установке и использованию СУБД FireBird необходимо выбрать папку для установки и нажать кнопку ДАЛЕЕ (см. рисунок 3). 11
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 3 – Выбор папки установки После нажатия на кнопку ДАЛЕЕ на экране появится форма «Выбор компонентов».
Рисунок 4 – Выбор компонентов установки Для
абсолютного
большинства
компьютеров
следует
сменить
первоначально предлагаемый вариант с полной установкой сервера и инструментов разработки на выборочную установку, при этом в качестве
12
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
компонент сервера установить бинарные файлы Classic Server. Форма «Выбор компонентов» представлена на рисунке 4. Для компьютеров без сетевой карты, или при установке программы для работы только на одном компьютере, а также при установке СУБД под WIN98 (только в самых крайних случаях, когда иного выхода нет) можно оставить первоначально предложенный вариант без изменений, т.е. установить FireBird в режиме SUPERSERVER. Дальнейшим шагом является выбор папки в меню «Пуск», здесь следует выбрать папку или оставить все без изменений (см. рисунок 5).
Рисунок 5 – Выбор папки в меню «Пуск» На закладке «Дополнительные задачи» следует установить галочку «Копировать
клиентскую
библиотеку
FIREBIRD
в
каталог
«system».
Остальные настройки следует оставить без изменения, как показано на рисунке 6.
13
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 6 – Выбор дополнительных задач установки серверной части СУБД FireBird Для установки СУБД FireBird в появившемся окне необходимо нажать кнопку УСТАНОВИТЬ и закончить установку серверной части СУБД FIREBIRD.
Рисунок 7 – Установка СУБД FireBird 14
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
После завершения установки следует перезагрузить компьютер, затем убедиться,
что
FireBird
запустился автоматически после перезагрузки
компьютера. Так же следует убедиться, что на компьютере открыт доступ по порту 3050, в случае серверной установки FireBird. Серверную установку СУБД FireBird необходимо произвести только на одном компьютере, на котором будет впоследствии установлена база данных. На 64-разрядные операционные системы устанавливать лучше 32-разрядные версии СУБД FireBird, чтобы в дальнейшем не возникало дополнительных трудностей при сопровождении программ. 2.2 Установка клиентской части Установка клиентской части СУБД отличается от серверной установки всего двумя диалогами.
Рисунок 8 – Выбор компонентов установки клиентской части
15
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
На закладке «Выбор компонентов» из выпадающего списка следует выбрать «Установка инструментария для разработчиков и администраторов баз данных», как это показано на рисунке 8. Далее на закладке «Выбор дополнительных задач» следует установить галочку «Копировать клиентскую библиотеку FireBird в каталог «System». Остальные настройки следует оставить без изменения, как показано на рисунке 9.
Рисунок 9 – Дополнительные задачи установки клиентской части СУБД FireBird
16
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3 Основы работы в среде FireBird Firebird - это мощная, компактная реляционная система управления базами данных с архитектурой клиент-сервер. Работа в среде FireBird основана на работе с командной строкой. 3.1 Создание и подключение к БД При запуске FireBird перед пользователем появляется окно командной строки, приглашающее ввести команду SQL>. Создание
базы
данных
в
среде
FireBird
в
роли
системного
администратора осуществляется с помощью команды:
CREATE DATABASE 'путь' user 'SYSDBA' password 'masterkey'; После нажатия клавиши Enter будет создана база данных и через некоторое время вновь появится приглашение SQL>. Пример создания базы данных представлен на рисунке 10.
Рисунок 10 – Создание базы данных в среде Firebird К существующей базе данных оператора
connect.
При
можно подключиться с помощью
подключении
к
базе
данных
указываются
17
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
логин SYSDBA с использованием пароля masterkey и путь к базе данных. Команда для подключения к БД в среде Firebird выглядит следующим образом: SQL>CONNECT «путь\*.fdb» CON>user 'SYSDBA' password 'masterkey'; Далее Firebird сообщит о том, что Вы подключились, приглашением ввести команду. Пример подключения к базе данных представлен на рисунке 11.
Рисунок 11 – Подключение к базе данных в среде FirBbird 3.2 Создание доменов и таблиц Допустимые типы полей СУБД FireBird представлены в таблице 1. Таблица 1 – Допустимые типы полей СУБД FireBird Название типа 1
Обозначение 2
Длинное целое
Integer
Короткое целое
Smallint
Символьный
Char(n), Varchar (n)
Комментарий 3 Диапазон –2147483648..2147483647 Диапазон -32768..32767 Строки соответственно постоянной и переменной длины
18
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Продолжение таблицы 1 1
2
3
Двоичное поле
Blob
Время
Time
Дата/время
Timestamp
Целочисленный
Integer
Логический тип
boolean
Вещественный Вещественные числа двойной точности Дата
Тип данных с динамически изменяемым размером для хранения больших данных, таких как графика, тексты, оцифрованные звуки. Базовая структурная единица — сегмент. Подтип Blob описывает содержимое. Беззнаковое целое, содержащее время дня в единицах 0.0001 секунды после полуночи. Комбинация информации Date и Time Знаковое длинное (двойное слово) Логический тип
Вещественные числа с Float плавающей точкой(точность 7 значащих цифр) Вещественные числа с Double Precision плавающей точкой(точность 15 значащих цифр) Сохраняет дату в 32-битовом Date длинном слове
Домен – множество допустимых значений атрибутов. Доменом также называют пользовательский тип, создаваемый для нескольких атрибутов. Общий вид команды создания домена: create domain as [not null] [check (value )]; Пример создания домена в FireBird изображен на рисунке 12.
19
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 12 – Пример создания домена «Коd» в FireBird Домен «Коd» определяет положительные целые числа, атрибуты этого типа не могут принимать неопределенные значения. Общая структура оператора создания таблицы: create table (, …. , [] ) Описание столбца: [not null] [unique] [check ] [primary key] или computed by (используется для вычисляемых столбцов) Фразу primary key можно задать тогда и только тогда, когда первичный ключ простой, то есть состоит только из одного этого столбца. Фраза check обеспечивает проверку логического ограничения, определенного для столбца в заданной предметной области В качестве типа столбца можно использовать имя домена. Ниже представлена схема отношения, оператор создания таблицы и вид экрана в среде FireBird (рис. 13). Баржа ( имя, дата изготовления, груз); create table Barja ( 20
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Name stroka Primary key, Data_izg Date not null check(Data_izg0) );
Рисунок 13– Пример создания таблицы «Баржа» в FireBird В ограничениях таблицы задаются составные первичные ключи, внешние ключи,
стратегии
обеспечения
ссылочной
целостности,
ограничения
семантической целостности, требующие проверки значений нескольких столбцов таблицы. Primary key () Foreign key () references () on delete on update В качестве стратегий можно задать следующие: cascade.
Каскадное
удаление
строк
подчиненной
таблицы,
связанных со строкой, удаляемой из основной таблицы или каскадное обновление столбцов внешнего ключа в строках подчиненной таблицы, связанных с теми строками основной, в которых происходит обновление первичного ключа; set null подразумевает, что столбцам внешнего ключа будет присвоено значение null при удалении строк из основного отношения или обновлении первичного ключа в строках основного отношения; 21
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
set default означает, что столбцам внешнего ключа будет присвоено значение по умолчанию при удалении строк из основного отношения или обновлении первичного ключа в строках основного отношения; restrict означает запрет на удаление строк или обновление первичного ключа в основном отношении, если им в подчиненном отношении соответствуют некоторые строки. Если при создании таблицы не задана ни одна стратегия, возможно, ссылочная
целостность
обеспечена
процедурным
путем,
т.е.
созданы
необходимы триггеры. Если нет, то СУБД FireBird будет придерживаться стратегии Restrict. SQL - скрипты выполняются в режиме интерпретации, поэтому сначала создаются основные таблицы, а потом – подчиненные, которые ссылаются на основные. 3.3 Пример разработки БД В качестве примера рассмотрим процесс проектирования и реализации БД для предметной области «Морской порт». Ниже приведено описание предметной области. Известно, что к морскому порту приписано несколько судов. Судно может относиться к такой категории как буксир, баржа или пассажирское судно. Каждая категория обладает разным набором атрибутов. Например, баржа
характеризуется
грузоподъемностью,
буксир
–
мощностью,
а
пассажирское судно может иметь различное число палуб и кают. Пассажирские суда осуществляют перевозку пассажиров. Каждый рейс характеризуется: номером рейса, днями отплытия, портом назначения, портом отбытия и временем в пути. О сотрудниках порта нужно хранить данные: Ф.И.О., дата рождения, должность (капитан, кок, штурман и т.д.), адрес проживания. Одно и то же судно может осуществлять разные рейсы. Однако к каждому судну 22
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
прикреплена определенная команда во главе с капитаном. Таких команд в порту несколько. Также необходимо хранить информацию о пассажирах, совершавших рейсы на судах порта. Построенная ER-диаграмма приведена на рисунке 14. В сущности «Строка расписания» атрибуты «понедельник», «вторник» и так далее могут принадлежать логическому типу. В этом случае атрибут примет значение «истина», если рейс осуществляет отплытие в этот день недели и «ложь», если отплытия нет. Сущность «Отправление» служит для разрыва связи M : N между сущностями «Рейс» и «Пассажирское судно». Сущность «Билет» разрывает аналогичную связь между сущностями «Отправление» и «Пассажир». Экземпляры сущности «Населенный пункт» могут выступать в двух ролях – являться конечным пунктом отплытия и исходным пунктом. В уникальный
идентификатор
сущности
«Отправление»
входит
связь
с
сущностью «Отправление». В уникальный идентификатор сущности «Билет» входит связь с сущностью «Отправление». Связь с сущностью «Сотрудник» входит в уникальный идентификатор сущности «Назначение на должность». Между сущностями «Пассажирское судно», «Буксир» и «Баржа» имеют место взаимоисключающие связи, т.к. в приказе сотрудник может быть назначен на судно, относящееся только к одному из перечисленных типов. Такие связи моделируются с помощью арка. Другой
способ
моделирования
взаимоисключающих
связей
подразумевает использование супертипа «Судно» с подтипами «Пассажирское судно», «Буксир» и «Баржа». На этапе даталогического проектирования необходимо учесть, что только один из внешних ключей в таблице «Приказ» должен быть определен как обязательный.
23
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Рисунок 14– ER –диаграмма предметной области
24
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Преобразуем ER-диаграмму в даталогическую модель реляционной базы данных, добавляя столбцы внешних ключей в подчиненные отношения: Баржа (наименование, дата изготовления, грузоподъемность) Буксир (наименование, дата изготовления, мощность) Пассажирское судно (наименование, дата изготовления, количество кают, количество палуб) Населенный пункт (код пункта, наименование) Пассажир (код пассажира, ФИО, серия паспорта, номер паспорта) Должность (код должности, наименование) Сотрудник (табельный номер, ФИО, дата рождения, адрес) Приказ о назначении должности (дата, код должности, табельный номер сотрудника) Приказ о прикреплении к судну (номер, дата, табельный номер сотрудника, наименование пассажирского судна, наименование баржи, наименование буксира) Отправление (дата, номер рейса, наименование пассажирского судна) Билет (место, дата рейса, номер рейса, код пассажира) Строка расписания рейсов (номер рейса, время в пути, понедельник, вторник, среда, четверг, пятница, суббота, воскресенье, код пункта отправки, код пункта прибытия) Напишем SQL-скрипты для создания базы данных, доменов и таблиц:
create database 'E:\DataBase.fdb' user 'SYSDBA' password 'masterkey'; create domain code as integer not null check (value>0); create domain stroka as char (100) not null;
create table Barja (Name stroka Primary key, Data_izg Date not null check(Data_izg< current_date), 25
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Gruz integer not null check(Gruz>0));
create table Buksir (Name stroka Primary key, Data_izg Date not null check(Data_izg< current_date), Mos integer not null check(Mos>0));
create table Pas_sudno (Name stroka Primary key, Data_izg Date not null check(Data_izg< current_date), Kol_vo_palub integer not null check(Kol_vo_palub>0), Kol_vo_kayut integer not null check(Kol_vo_kayut>0));
create table Sotrudnik (Tab_nomer Code Primary key, FIO Stroka, Dr Date not null check((Dr'01.01.1910')), Adres Stroka);
create table Dolgnost (Kod Code Primary key, Name Stroka);
create table Pas (Kod Code Primary key, FIO Stroka, Seriya_pasporta integer not null, Nomer_pasporta integer not null);
create table Gorod 26
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
(Kod Code Primary key, Name Stroka); create table Stroka_raspisaniya (Nomer_reisa Code Primary key, Vremya_v_puti Stroka, Ponedelnik integer not null, Vtornik integer not null, Sreda integer not null, Chetverg integer not null, Pyatnica integer not null, Subbota integer not null, Voskresenye integer not null, Code_otprav Code, Code_pribt Code, Foreign key (Code_otprav) References Gorod (Kod) on update cascade, Foreign key (Code_pribt) References Gorod (Kod) on update cascade);
create table Prikaz2 (Nomer Code Primary key, Data Date not null check((Data< current_date) and (Data>'01.01.1910')), Tab_nomer Code, Name_sudno_Pas char(15), Name_sudno_Barja char(15), Name_sudno_Buksir char(15), Foreign key (Tab_nomer) References Sotrudnik (Tab_nomer) 27
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
on update cascade, Foreign key (Name_sudno_Barja) References Barja (Name) on update cascade, Foreign key (Name_sudno_Buksir) References Buksir (Name) on update cascade, Foreign key (Name_sudno_Pas) References Pas_sudno (Name) on update cascade);
create table Otpravlenie (Nomer_reisa code, Data Date not null, Name_pas_sudno stroka, Primary key (Nomer_reisa, Data), Foreign key (Name_pas_sudno) References Pas_sudno (Name) on update cascade, Foreign key (Nomer_reisa) References Stroka_raspisaniya (Nomer_reisa) on update cascade);
create table Bilet (Nomer_reisa integer not null check(Nomer_reisa>0), Data Date check((Data'01.01.1910')), Mesto integer not null check(Mesto>0), Kod_Pas Code, primary key (Mesto, Data, Nomer_reisa), Foreign key (Kod_Pas) 28
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
References Pas (Kod) on update cascade, Foreign key (Nomer_reisa, Data) References Otpravlenie (Nomer_reisa, Data) on update cascade);
create table Prikaz1 (Data Date not null check((Data< current_date) and (Data>'01.01.1910')), Nomer_dol Code, Tab_nomer Code, Primary key (Data, Nomer_dol, Tab_nomer), Foreign key (Nomer_dol) References Dolgnost (Kod) on update cascade, Foreign key (Tab_nomer) References Sotrudnik (Tab_nomer) on update cascade); Далее оператора
при
рассмотрении
запросов
select,
операторов
хранимых
манипулирования
процедур
и
данными,
триггеров
будут
использоваться примеры, основанные на базе данных морского порта. 3.4 Операторы манипулирования данными Вставка, удаление и обновление осуществляется с помощью операторов манипулирования данными, описанными ниже. Insert into [()] values () 29
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Оператор осуществит вставку
новой строки в таблицу. Если список
столбцов опущен, подразумевается все столбцы таблицы. Значения выражений в порядке следования присваиваются соответствующим столбцам Если тип выражения не совпадает с типом столбца, возникает ошибка. Если в списке столбцов заданы не все столбцы, пропущенные столбцы примут значения null. Пример: Barja (name, data_izg , gruz ) 1) insert into Barja values ('Fortune', '15.06.1967', 15000);
2) insert into Barja values ('Riga', '22.09.1998', 25000); Обновление данных в таблице осуществляется с помощью оператора update. Общий вид оператора приведен ниже. Update < имя таблицы> set < столбец_1 > = < выражение_1>, ….., < столбец_n > = < выражение_n >, [ where < условие > ]; Оператор обновляет таблицу, присваивая новые значения заданным столбцам. Если фраза where опущена, то обновляется все строки таблицы, в
30
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
противном случае только те строки, которые удовлетворяют заданному условию. Пример: Update barja set name = ’ Fortune’ where name = ’Kaluga’; Удаление данных в таблице осуществляется с помощью оператора delete. Общий вид оператора приведен ниже. Delete from < имя таблицы> [where ] Оператор удаляет строки из таблицы. Если фраза where опущена, удаляются все строки, но таблица остается. Drop barja – удаляет таблицу полностью. Приведенный ниже оператор удаляет из таблицы только одну строку, удовлетворяющую заданному условию: Delete from barja where name = ’ Fortune’ 3.5 Оператор запросов select Данный оператор реализует всевозможные запросы к БД. Один оператор select заключает в себе все операции реляционной алгебры. Общий вид оператора select: Select [all | distinct] * | < список столбцов > From < список таблиц > 31
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
[ where < условие выборки или соединения > ] [ group by < список группируемых столбцов > [ having < условие отбора групп > ] ] [ order by < список сортируемых столбцов > ] Фраза all означает, что в результирующее отношение войдут все строки, в том числе дубликаты. Фраза distinct означает, что дубликаты будут исключены из результирующего отношения. По умолчанию в операторе используется фраза all. Знак * означает, что в результирующее отношение войдут все столбцы исходных таблиц. Если задан список столбцов, то в результирующее отношение войдут только заданные столбцы. Фраза from задает таблицы, на которых базируется запрос. Если запрос базируется на одной таблице, он называется однотабличным. Если несколько таблиц
участвуют
в
запросе,
запрос
называется
многотабличным.
В
многотабличных запросах используются составные имена и псевдонимы: < имя таблицы или псевдоним >.< имя столбца > Например:
sotrudnik . tab_nomer
Короткий псевдоним упрощает обращение к столбцу. Он задается во фразе from. Фраза where для однотабличных запросов содержит условие выборки строк, т.е. таким образом реализуется операция реляционной алгебры выборка. При этом в результирующее отношение будут включены только те строки, которые удовлетворяют заданному условию. В многотабличных запросах все исходные таблицы сначала соединяются в единую таблицу. Условие соединения задается во фразе where. Здесь же может стоять и условие отбора строк. 32
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Фраза group by используется для группировки строк с одинаковыми значениями в группируемых столбцах. По каждой такой группе можно подвести итоги (например, найти сумму значений некоторого столбца). Фраза having используется только совместно с фразой group by. Она позволяет фильтровать группы, т.е. включать в результирующее отношение только те группы, которые удовлетворяют заданному условию. Фраза order by используется для упорядочения строк результирующего отношения. Порядок следования фраз в операторе имеет значение. Пример: Сотрудник
Приказ о назначении на судно Номер Дата Табельный номер сотрудника Наименование пас.судна Наименование буксира Наименование баржи
ПК1
Табельный номер ФИО Дата рождения Адрес
ВК1 ВК2 ВК3 ВК4
ПК
Sotrudnik (Tab_nomer, FIO, Dr Date, Adres) Prikaz2
(Nomer,
Data,
Tab_nomer,
Name_sudno_Pas,
Name_sudno_Barja, Name_sudno_Buksir)
1)
выборка всех строк и столбцов. Вывести всю информацию о сотрудниках Select * from Sotrudnik;
2)
выборка отдельных столбцов. Вывести фамилии сотрудников. Select FIO from Sotrudnik; 33
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Условия во фразе where можно задать следующими способами: -
>, < , >= , ); Not in (< множество >). -
соответствие шаблону
Like (< шаблон >); Not like (< шаблон >). -
Проверка пустых значений
Is null или not null Пример: 1)
вывести фамилии сотрудников моложе 30 Select FIO from Sotrudnik where Data < ’01.01.1983’;
2)
вывести фамилии сотрудников, рожденных в 1985 г. Select FIO from Sotrudnik where Data between ’01.01.1985’ and ’31.12.1985’;
3)
вывести адреса сотрудников Иванова, Петрова и Сидорова Select Adres from Sotrudnik where FIO in (‘Иванов’, ‘Петров’, ‘Сидоров’);
4)
вывести фамилии сотрудников, проживающих в г. Орск 34
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Select FIO from Sotrudnik where Adres like ‘% г. Орск %’;
3.5.1 Обобщающие функции в операторе select
Существуют следующие обобщающие функции: - sum.
Вычисляет сумму значений заданного столбца, применяется
только к числовым стобцам; - avg. Вычисляет среднее значение, применяется только к числовым столбцам; - min, max. Обнаружение минимального и максимального значения в заданном столбце; -count. Вычисляет количество значений (число строк в столбце). Сount (*) вычисляет количество строк, в том числе совпадающих и содержащих пустые значения. Обобщающие функции могут использоваться в качестве имени столбца сразу после слова select или же во фразе having. Обобщающие функции позволяют подвести итог по всей таблице или по группе. 3.5.2 Группировка строк. Фраза group by Группировка строк образует группы строк с одинаковыми значениями в группируемом столбце с тем, чтобы вычислить промежуточный итог по каждой группе. Пример: Подсчитать количество барж и их суммарную грузоподъемность, изготовленных за каждый день сентября 2012 года. Select count (*) as kolvo, 35
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
sum (Gruz) as gpod, Data_izg from Barja where Data_izg between ’01.09.2012’ and ’30.09.2012’ group by Data_izg;
3.5.3 Фильтрация групп. Фраза having.
В отличие от where условие фразы having применяется не к каждой строке таблицы, а к группе в целом. Таким образом, в результирующую таблицу будут включены только те группы, которые удовлетворяют условию. Пример: Подсчитать общую грузоподъемность барж, построенных в те даты, когда производилось более 5 барж. Select sum (Gruz) as gpod, Data_izg from Barja
group by Data_izg
having count (*) > 5;
3.5.4 Упорядочивание строк результирующей таблицы Фраза order by
позволяет упорядочить результирующую таблицу по
значению первого или нескольких столбцов. Пример: Вывести сведения о баржах, упорядочив их по дате изготовления, а при одинаковых значениях дат – по грузоподъемности.
Select * from Barja order by Data_izg , Gruz;
36
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.5.5 Подзапросы Подзапрос – это запрос, входящий в состав другого запроса. Подзапрос может располагаться либо во фразе where, либо во фразе having. Подзапросы бывают следующие: - скалярный (возвращает в качестве результата 1 значение); - строковый (возвращает в качестве результата несколько значений в виде одной строки); - матричный (возвращает несколько строк). Часто встречаются такие запросы, в которых важен только тот факт, пуст подзапрос или нет, т.е. вернул ли подзапрос в качестве результата хотя бы одну строку. Фраза exists принимает true, если подзапрос не пуст и наоборот. Пример: Вывести фамилии сотрудников, на которых не был издан ни один приказ в сентябре 2012. Select s.FIO from Sotrudnil s, where not exists (select p.* from Prikaz2 p where p.Data between '01.09.2012' and '30.09.2012' and p.Tab_nomer = s.Tab_nomer); Фразы any(some) и all используются совместно с подзапросами, которые возвращают столбец значений. В случае использования any или some условие считается выполненным, если оно выполняется хотя бы для одного значения столбца. В случае all условие должно выполниться для столбца в целом. Такое средство позволяет реализовать часто встречающийся запрос на поиск наибольших или наименьших среди вычисленных промежуточных итогов. 37
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Пример: Вывести те даты, в которые в общей сложности были изготовлены баржи с наибольшей грузоподъемностью. Select Data_izg from Barja group by Data_izg having sum (Gruz) > = all (select sum (Gruz) from Barja group by Data_izg ); 3.5.6 Многотабличные запросы В таких запросах обязательно используются псевдонимы таблиц, т.к. имена столбцов в разных таблицах могут совпадать. Все исходные таблицы соединяются в единую таблицу по общим столбцам. Таким образом, в многотабличных запросах фраза where содержит условие соединения двух и более таблиц. Пример: Вывести полную информацию
о назначении сотрудников на
пассажирское судно с указанием наименований пассажирского судна, а также фамилий сотрудников.
Select s . FIO, p . Data, p . Tab_nomer, p. Name_sudno_Pas From Sotrudnik s, Prikaz2 p where p . Tab_nomer = s . Tab_nomer; В многотабличных запросах помимо условия соединения можно указать условие выборки. Как и в однотабличных запросах, в многотабличных запросах можно использовать обобщающие функции. Пример: 38
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Подсчитать количество приказов, изданных в 2012 году, в которых упоминался сотрудник Иванов.
Select count (*) as kol from Sotrudnik s, Prikaz2 p where p.Tab_nomer = s. Tab_nomer and s. FIO = ’Иванов’ and p. Data between ’01.01.2012’ and ’31.12.2012’; 3.6 Хранимые процедуры Хранимые процедуры – это объекты базы данных, которые представляют собой программу, написанную на языке, встроенном в СУБД. Хранимые процедуры выполняются на сервере и используются в режиме «клиент-сервер» для проверки сложных ограничений целостности, для реализации запросов, а также для выполнения операций вставки, удаления и обновления. Они содержат управляющие конструкции -
циклы, ветвление и
операторы языка SQL, стандартные и модифицированные. Модифицированные операторы языка SQL позволяют сохранять результаты выполнения запросов в заданных переменных. Если процедура реализует запрос, возвращающий в качестве результата несколько строк, то Select выполняется в цикле и при этом на каждой итерации цикла очередная строка передается клиенту. 3.6.1 Синтаксис хранимых процедур СУБД FireBird Различают два типа процедур: исполняемые хранимые процедуры и хранимые процедуры выборки. Первый тип предназначен для выполнения некоторых действий, проверки некоторых условий или для манипулирования данными. Хранимые процедуры выборки предназначены для реализации 39
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
запросов. Процедуры могут иметь входные и выходные параметры. Создается процедура командой: create procedure < имя > ( < список входных параметров >) returns ( < список выходных параметров > ) as < объявление локальных переменных > begin < тело процедуры > end; С помощью входных параметров процедура получает исходные данные, с помощью выходных – возвращает результаты. В теле процедуры можно использовать управляющие конструкции -
операторы цикла while, for и
операторы модифицированного языка SQL. Для оператора select модификация заключается в том, что результат выполнения запроса можно сохранить в переменных, предварительно описанных: select Tab_nomer, FIO from Sotrudnik into sTab_nomer, sfio; где sTab_nomer – целое, sfio – строка. Объявляются переменные в теле процедуры с помощью конструкции: declare ; Для объявления нескольких переменных (даже одного типа) необходимо несколько таких конструкций: declare a integer; declare b integer;
40
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
3.6.2 Использование хранимых процедур для вставки, удаления и обновления данных Такие процедуры имеют входные параметры, но не имеют выходных. Процедуры вставки и обновления строк таблиц в качестве входных параметров получает значения полей: create procedure Sotrudnik _ins (pTab_nomer integer, pfio char(30), pDr_Date date, pAdres char(20)) as begin insert into Sotrudnik ( Tab_nomer, FIO, Dr_Date, Adres ) values ( :pTab_nomer, : pfio, : pDr_Date, : pAdres); end; Исполняемые процедуры вызываются командой: Execute procedure < имя > (< список фактических параметров >); Execute procedure Sotrudnik _ins ( 1, 'Petrov_P.P.', '05.09.1990', 'Orenburg' ); Список фактических и входных параметров должны совпадать по количеству, типу и порядку следования. Процедура обновления имеет вид: create procedure Sotrudnik _Update (pTab_nomer integer, pfio char(30), pDr_Date date, pAdres char(20)) as begin update Sotrudnik set FIO = : pfio, Dr_Date = : pDr_Date, Adres = : pAdres Where Tab_nomer = : pTab_nomer, end; В
процедурах
обновления
обновляются
значения
одной
строки,
идентифицируемой с помощью фразы where. Первичный ключ в реляционной 41
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
базе данных, как правило, генерируется автоматически, поэтому крайне редко осуществляется операция обновления самого первичного ключа. 3.7 Триггеры и генераторы 3.7.1 Поддержка первичных ключей СУБД может поддерживать специальный тип полей для обеспечения уникальности первичных ключей. Генератор – объект БД, который используется для получения значения по типу счетчика. Он создается командой: Create generator < имя >; По умолчанию ему присваивается значение 0. Изменить значение можно командой: set generator < имя > to n; Функция gen_id (< имя >, m) прибавляет к предыдущему значению генератора целое число m и возвращает его в качестве результата. 3.7.2 Триггеры Триггеры – специальный вид хранимой процедуры. Триггер запускается автоматически при наступлении триггерного события. Различают триггеры, которые срабатывают до наступления триггерного события – before-триггеры и триггеры, которые срабатывают после наступления триггерного события
–
after-триггеры. Используются триггеры для проверки ограничений семантической целостности, обеспечения ссылочной целостности, а также реализации тех или иных действий в связанных таблицах. В теле триггеры могут содержать: управляющие конструкции, операторы SQL, вызовы хранимых процедур.
42
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Для каждой таблицы можно создать несколько триггеров, запускаться они будут в порядке создания. Общий вид оператора создания триггера: create trigger < имя > for active before | after insert | update | delete as < объявление локальных переменных > begin < тело триггера > end; Замечание: если триггер создается в FireBird, следует помнить, что символ « ; » интерпретатор SQL воспринимает как конец команды. Поэтому вместо символа « ; » следует ввести временно новый разделитель с помощью оператора: set term < новый разделитель > < старый разделитель > т.е. set term ! ; Представим, что необходимо создать триггер, реализующий проверку следующего условия при добавлении элементов в таблицу Bilet: нельзя, чтобы количество билетов превышало число кают (одна каюта = один билет). set term ! ; Создадим исключение, которое будет сгенерировано в случае ошибки: create exception lick 'Число билетов превышает число кают!'; Создадим триггер: create trigger warrior for bilet active before insert as 43
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
declare k integer; begin select count(*) from bilet b, Pas_sudno P, Otpravlenie O where (o.Name_pas_sudno =P.Name) and (b.Data=O.Data) and (b.Nomer_reisa=O.Nomer_reisa) str.b.Nomer_reisa=new.b.Nomer_reisa and str.b.Data =new.b.Data into: k; if (:k>P.kol_vo_kayut) then exception lick; end! set term ; ! Если данное условие будет нарушено, на экране появится сообщение, заданное в исключении и операция добавления новой строки в таблицу bilet будет отменена. Таким образом, before - триггеры либо разрешают, либо запрещают осуществить ту или иную операцию манипулирования данными в таблице.
44
Copyright ОАО «ЦКБ «БИБКОМ» & ООО «Aгентство Kнига-Cервис»
Список использованных источников 1 Советов, Б. Я.
Базы данных: теория и практика: учебник для
бакалавров / Б. Я. Советов, В. В. Цехановский, В. Д. Чертовской.- 2-е изд. Москва : Юрайт, 2013. - 463 с. - (Бакалавр. Базовый курс). - Прил.: с. 386-458. Библиогр.: с.459-460. - ISBN 978-5-9916-2913-3. 2 Соколинский, Л. Б. Параллельные системы баз данных: учебное пособие для студентов высших учебных заведений, обучающихся по направлениям ВПО 010400 «Прикладная математика и информатика» и 010300 «Фундаментальная информатика и информационные технологии» / Л. Б. Соколинский; Юж.-Урал. гос. ун-т. - Москва : Изд-во Моск. ун-та, 2013. - 183 с. : ил. - (Суперкомпьютерное образование / Суперкомпьютер. консорциум ун-тов России). - Библиогр.: с. 175-176. - Предм. указ.: с. 177-179. - ISBN 978-5-21106482-9. 3 Кузнецов, С. Д. Базы данных. Модели и языки : учеб. для вузов / С. Д. Кузнецов . - М. : Бином, 2008. - 720 с. - Прил.: с. 685-700. - Предм. указ.: с. 701720. - ISBN 978-5-9518-0132-6. 4 Кусмарцева, Н.Н. Разработка и эксплуатация удаленных баз данных [Электронный ресурс]: учебное пособие/ Кусмарцева Н.Н.— Электрон. текстовые данные.— Волгоград: Волгоградский институт бизнеса, Вузовское образование, 2013.— 143 c.— Режим доступа: http://www.iprbookshop.ru/11343 5 Королева О.Н. Базы данных [Электронный ресурс]: курс лекций/ Королева О.Н., Мажукин А.В., Королева Т.В.— Электрон. текстовые данные.— М.: Московский гуманитарный университет, 2012.— 66 c.— Режим доступа: http://www.iprbookshop.ru/14515
45