- •Разработка баз данных средствами MySql
- •Содержание
- •Введение
- •1. Основы работы в субд MySql
- •Системы управления базами данных
- •Основные характеристики MySql
- •Команда create database
- •Работа с таблицами
- •Синтаксис команды create table
- •Удаление таблиц
- •Синтаксис команды drop table
- •Типы данных
- •Числовые данные
- •Строковые данные
- •Календарные данные
- •Тип данных null
- •Выбор типа данных
- •1 Вариант.
- •2 Вариант.
- •3 Вариант.
- •2. Работа с таблицами. Ввод, извлечение, поиск и удаление данных Запись данных в таблицы
- •Заполните таблицу employee_data 5-10 записями. Запрос данных из таблицы MySql
- •Выборка данных с помощью условий
- •Операторы больше и меньше
- •Поиск текстовых данных по шаблону
- •Предложение group by и having
- •Удаление записей из таблицы
- •Задание 1
- •Задание 2
- •Задание 3
- •3. Логические операции в MySql
- •Операторы in и between
- •Упорядочивание данных
- •Ограничение количества извлекаемых данных
- •Извлечение подмножеств
- •Ключевое слово distinct
- •Изменение записей
- •Задание 1
- •Задание 2
- •Задание 3
- •Вычисление среднего значения
- •Именование столбцов
- •Подсчет числа записей
- •Группировка данных
- •5. Математические функции в MySql. Строковые функции. Работа с датой Математические функции MySql
- •Строковые функции
- •Ascii(строка)
- •Concat(строка1, строка2, ...)
- •Особенности типа данных Date
- •Операции с датами
- •Определение диапазонов
- •Использование Date для сортировки данных
- •Выбор данных с помощью Date
- •Текущие даты
- •Тип столбца Null
- •Задание 1
- •Задание 2
- •Задание 3
- •6. Переменные и временные таблицы. Многотабличные запросы
- •7. Вложенные запросы в MySql
- •8. Хранимые процедуры и функции
- •9. Курсоры в MySql. Представления. Конструкции управления потоком данных
- •10. Анализ и моделирование предметной области
- •1. Выбор и текстовое описание предметной области
- •2. Разработка концептуальной er-модели предметной области
- •3. Определение функциональных требований
- •11. Проектирование базы данных
- •1. Создание логической реляционной модели базы данных
- •2. Нормализация логической реляционной модели базы данных
- •1Нф (Первая Нормальная Форма)
- •2Нф (Вторая Нормальная Форма)
- •3Нф (Третья Нормальная Форма)
- •12. Проектирование физической модели бд и ее реализация
- •1. Создание физической модели базы данных
- •2. Реализация физической модели базы данных в коде
- •13. Наполнение и тестирование бд
- •1. Наполнение базы данных
- •2. Тестирование базы данных
- •14. Создание приложения к бд в среде delphi 7, с использованием AnyDac framework 1.7.0
- •1. Начало работы
- •2. Связь с таблицами
- •3. Отображение таблицы на форме
- •4. Компонент adQuery
- •5. Экспорт данных в Excel
- •6. Работа с внешними ключами
- •Рекомендуемая литература
- •Разработка баз данных средствами MySql
- •460844, Г. Оренбург, ул. Советская, 19
13. Наполнение и тестирование бд
1. Наполнение базы данных
После проектирования и реализации базы данных необходимо наполнить её тестовыми данными и произвести тестирование правильности её работы с точки зрения логики.
Для вставки используется SQL-оператор INSERT.
Чтобы не нарушать ограничения ссылочной целостности, заполнение таблиц надо начинать с наиболее независимых таблиц, двигаясь последовательно к более зависимым, также как и при их создании.
Рассмотрим пример вставки данных для нашей учебной базы данных.
Таблица Kompanija
INSERT INTO Kompanija (kod, nazvanie) VALUES (NULL, 'Aeroflot');
INSERT INTO Kompanija (kod, nazvanie) VALUES (NULL, 'LuftHanza');
INSERT INTO Kompanija (kod, nazvanie) VALUES (NULL, 'KrasAir');
INSERT INTO Kompanija (kod, nazvanie) VALUES (NULL, 'British Airlines');
INSERT INTO Kompanija (kod, nazvanie) VALUES (NULL, 'TransAero');
INSERT INTO Kompanija (kod, nazvanie) VALUES (NULL, 'Air France');
Посмотреть результат в таблице:
SELECT * FROM Kompanija;
Таблица Samolet
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(1, 1, 'IL-86', 'P', 360);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(2, 1, 'IL-86', 'P', 360);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(3, 1, 'Yak-40', 'P', 25);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(4, 1, 'Tu-144', 'P', 150);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(5, 1, 'Tu-144', 'P', 150);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(6, 1, 'An-2', 'P', 15);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(7, 2, 'Boeing 747', 'P',
380);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(8, 2, 'Boeing 747', 'P',
380);
INSERT INTO samolet(nomer, kompanija_kod, model, tip, vmestimost) VALUES(9, 1, 'Boeing 747', 'P',
380);
Посмотреть результат в таблице:
SELECT * FROM Samolet;
Задание: Создайте код вставки данных в вашу базу, заполните таблицы тестовыми данными и исправьте возможные ошибки. |
2. Тестирование базы данных
Реляционная модель данных существует не сама по себе, а для последующего использования. Её использование заключается в задействовании над ней операций реляционной алгебры. В реляционной алгебре существует следующий набор операций:
1. Проекция
2. Выборка
3. Соединение
4. Умножение
5. Объединение
6. Пересечение
7. Вычитание
На основе реляционной алгебры построена DML-часть языка SQL. В отличие от многих других языков программирования, выражающих то, какие действия необходимо предпринять для достижения результата, язык SQL интересен тем, что описывает результат, который необходимо получить.
Первая группа языков называется процедурными и объектными или языками 3-го поколения. К ним относятся Basic, Pascal, C, C++, Java, С# и др.
Языки второго типа называются декларативными или языками 4-го поколения. Представителями этой группы являются языки SQL, Prolog, Haskel и др. Они были названы языками 4-го поколения потому, что позволили во многих случаях сократить время, затраты и объём кода, необходимого для выполнения той или иной операции над данными.
Рассмотрим, как реализуются операции реляционной алгебры в языке SQL.
Проекция
Проекция представляет собой операцию извлечения значений определённых столбцов таблицы и реализуется с помощью конструкции SELECT, имеющей следующий синтаксис:
SELECT имя_столбца1, имя_столбца2, ... , имя_столбцаN
FROM Имя_Таблицы
Пример 1 (список авиакомпаний):
SELECT nazvanie
FROM Kompanija;
Для того чтобы упорядочить результаты проекции, используется выражение ORDER BY с указанием набора столбцов, по которым надо сортировать результаты и направления сортировки:
SELECT имя_столбца1, имя_столбца2, ... , имя_столбцаN
FROM Имя_Таблицы
ORDER BY имя_столбца3 [DESC], имя_столбца2 [DESC], ... , имя_столбцаN
Слово DESC показывает необходимость сортировки в обратном порядке.
Пример 2 (список авиакомпаний, упорядоченный по названию):
SELECT nazvanie
FROM Kompanija
ORDER BY nazvanie;
Пример 3 (список авиакомпаний, упорядочнный по имени в обратном порядке):
SELECT nazvanie
FROM Kompanija
ORDER BY nazvanie DESC;
Кроме того, иногда может возникнуть задача получения данных без дубликатов, например, списка всех моделей самолётов, которые имеютсяу авиакоманий. Это достигается с помощью ключевого слова DISTINCT.
Пример 4 (модели самолётов):
SELECT DISTINCT model
FROM Samolet;
Выборка
Операция выборки необходима для извлечения определённых строк таблицы, удовлетворяющих определённым условиям, и реализуется с помощью конструкции WHERE:
SELECT имя_столбца1, имя_столбца2, ... , имя_столбцаN
FROM Имя_ТаблицыN
WHERE условие1
[ AND условие2 ] ...
[ OR условиеN ]
где в качестве условий могут выступать конструкции вида:
● имя_столбца1 знак1 значение1,
● имя_столбца2 знак3 имя_столбца3,
(где знак — это =, <, >, <=, <=, !=)
соединённые логическими условиями И (AND), ИЛИ (OR), НЕ (NOT).
Пример 1 (аэропорты Москвы):
SELECT kod, nazvanie
FROM Aeroport
WHERE gorod = 'Moscow';
Пример 2 (аэророрты в городах США, начинающихся на букву «N»):
SELECT *
FROM Aeroport
WHERE strana = 'USA'
AND gorod LIKE 'N%';
Соединение
Операция соединения необходима для получения взаимосвязанных данных из более чем одной таблицы одновременно и реализуется с помощью конструкции JOIN ... ON:
SELECT Таблица1.имя_столбца1, Таблица1.имя_столбца2,
... ,
Таблица2.имя_столбца1, Таблица2.имя_столбца2,
...
FROM Имя_Таблицы1
JOIN Имя_Таблицы2
ON условие_связывания_таблиц
где условие связывания таблиц обычно представляет собой условие совпадения значений ключевых столбцов вида:
Имя_таблицы1.Имя_ключевого_столбца1 = Имя_таблицы2.Имя_ключевого_столбца2
Пример 1 (список самолётов каждой авиакомпании):
SELECT Kompanija.nazvanie, Samolet.model
FROM Kompanija
JOIN Samolet
ON Kompanija.kod = Samolet.kompanija_kod;
Умножение
Операция умножения нужна для получения произведения двух множеств, такое произведение называется декартовым и реализуется с помощью конструкции CROSS JOIN:
SELECT Таблица1.имя_столбца1, Таблица1.имя_столбца2,
... ,
Таблица2.имя_столбца1, Таблица2.имя_столбца2,
...
FROM Имя_Таблицы1
CROSS
JOIN Имя_Таблицы2
Пример 1 (все возможные рейсы из Москву на Украину без учёта конкретных аэропортов):
SELECT DISTINCT
AV.gorod, AP.gorod
FROM Aeroport AV —- Аэропорт вылета
CROSS
JOIN Aeroport AP —- Аэропорт прилёта
WHERE AV.strana = 'Russia'
AND AV.gorod = 'Moscow'
AND AP.strana = 'Ukraine';
Объединение
Операция объединения необходима для получения объединённых результатов нескольких запросов из разных источников и реализуется с помощью конструкции UNION:
SELECT Таблица1.имя_столбца1, Таблица1.имя_столбца2,
... ,
FROM Имя_Таблицы1
UNION
SELECT Таблица2.имя_столбца1, Таблица2.имя_столбца2,
...
FROM Имя_Таблицы2
[ UNION ]
...
Особенностью работы этой конструкции является требование полного совпадения порядка и типов столбцов входящих в неё запросов, а также неявное удаление дубликатов.
Пример 1 (список моделей самолётов авиакомпний «Аэрофлот» и «Люфтганза»):
SELECT SA.model
FROM samolet SA
JOIN Kompanija KA
ON SA.kompanija_kod = KA.kod
WHERE KA.nazvanie = 'Aeroflot'
UNION
SELECT SL.model
FROM samolet SL
JOIN Kompanija KL
ON SL.kompanija_kod = KL.kod
WHERE KL.nazvanie = 'Lufthanza';
Эту же задачу можно было бы реализовать и проще, с помощью проекции и выборки с условием OR, но в учебных целях используется UNION.
Пересечение
Операция пересечения нужна для получения результатов, общих для нескольких запросов.
Она не имеет прямой поддержки в MySQL 5.0 и реализуется с помощью условий связывания или условий ограничений (JOIN ... ON... или WHERE ...).
Пример1 (модели самолётов, которые есть и у «Люфтганзы» и у «Аэрофлота»):
SELECT DISTINCT SA.model
FROM Samolet SA
JOIN Kompanija KA
ON SA.kompanija_kod = KA.kod
AND KA.nazvanie = 'Aeroflot'
JOIN Samolet SL
ON SA.model = SL.model
JOIN Kompanija KL
ON SL.kompanija_kod = KL.kod
AND KL.nazvanie = 'Lufthanza'
Вычитание
Операция объединения необходима для получения разности результатов нескольких запросов из разных источников. Она не имеет прямой поддержки в MySQL 5.0 и реализуется с помощью условий связывания, условий ограничений (JOIN ... ON... или WHERE ...) или подзапросами. Попробуйте самостоятельно получить список моделей самолётов, которые есть только у «Аэрофлота», но не у прочих авиакомпаний.
Задание: Напишите SELECT-запросы, реализующие справочные и аналитические функциональные требования вашей задачи. |