Леонид Борчук - Базы данных: что такое SQL и нормальная форма
1. 1
Базы данных: что такое SQL и
нормальная форма
Борчук Леонид
2. 2
Задача
Создать БД
- описание модели
- создание модели
- изучение модели
- работа с моделью
Модель – упрощенное
представление реального процесса
3. 3
Формальный подход
Методология состоит из этапов:
Концептуальный: описание предметной
области, беседа с пользователями
Логический: формализация описания
Физический: Реализация описания
Проверка на адекватность
Документирование
Проектирование БД
4. 4
Описание модели
Этап проектирования
Модель сущность-связь
Понятие сущности –
философское, формально это
определить нельзя (объект)
Нужен ли этап проектирования?
Проектирование БД
5. 5
Принципы
Правильность
Без избыточности (для фактов)
Простота (бритва Оккама)
Использование сложившихся
приёмов
Проектирование БД
6. 6
Пример
Корабли, участвовавшие во 2-й мировой войне
Корабли в классах построены по одному и тому же
проекту, и классу обычно присваивается название
первого корабля этого класса. Таблица Classes
содержит имя класса, тип (bb – боевой корабль, bc –
боевой крейсер), страну, в которой построен корабль,
число главных орублий, калибр орудий и
водоизмещение. В таблице Ships записаны название
корабля, имя его класса и год спуска на воду. В
тиблице Battles содержатся название и дата битвы, в
таблице Outcomes – результаты участия корабля в
битве (потоплен, поврежден или остался невердим).
Проектирование БД
7. 7
Classes
class type country numGuns caliber displcmnt
Bismark bb Germany 8 15 42 000
Iowa bb USA 9 16 46 000
Kongo bc Japan 8 14 32 000
North Carol bb USA 9 16 37 000
Renown bc Gt. Britain 6 15 32 000
Revenge bb Gt. Britain 8 15 29 000
Tennessee bb USA 12 14 32 000
Yamato bb Japan 9 18 65 000
Проектирование БД
8. 8
Battles
Name Date
North Atlantic 5/24-27/41
Guadalcanal 11/15/42
Nortth Cape 12/26/43
Surigao Strait 10/25/44
Проектирование БД
9. 9
Outcomes
Bismarck North Atlantic sunk
California Surigao Strait ok
Duke of York North Cape ok
Fuso Surigao Strait sunk
Hood North Atlantic sunk
King George V North Atlantic ok
Kirishima Guadalcanal sunk
Prince of Wales North Atlantic damaged
Rodney North Atlantic ok
Schamhorst North Cape sunk
South Dakota Guadalcancal damaged
Tennessee Surigao Strait ok
Проектирование БД
10. 10
Ships
name class launched
California Tennessee 1921
Haruna Kongo 1915
Hiei Kongo 1914
Iowa Iowa 1943
Kirishima Kongo 1915
Kongo Kongo 1913
Missouri Iowa 1944
Musashi Yamato 1942
New Jersey Iowa 1943
North Carolina North Carolina 1941
Ramillies Revenge 1917
Renown Renown 1916
Проектирование БД
11. Моделей множество, но наиболее популярной
стала модель “сущность” - “связь”
Модель графическая: прямоугольники –
элементы, линии – связи между ними
Предложена в 1976 году
Сейчас поддерживается (с оговорками)
множеством инструментов
11
ER-диаграмма
Проектирование БД
14. 14
Как моделировать?
Предметная область одна, но её можно
описать множеством способов
Т.е. спроектировать по-разному, создать
разные таблицы
Например, одну супер-таблицу, или для
каждого атрибута свою таблицу
Разные модели будут иметь разные свойства.
Что это за свойства?
Проектирование БД
15. 15
Функциональная
зависимость
Функциональная зависимость (неформально) –
связи между атрибутами. Например, связь двух
таблиц по какому-либо ключу.
Основа формального описания модели и её
последующей нормализации
Нормализация используется для создания набора
отношений с заданными свойствами.
Заданные свойства – точное представление
данных, связей между ними и требуемых
ограничений
Проектирование БД
16. 16
Нормальная форма
Нормализация – восходящий подход к
проектированию БД (сущность – связь –
нисходящий), удобен для проверки свойств
модели.
Т.е. модель последовательно переводится из
одного состояния в другое, эти состояния
называются нормальными формами.
Нормальная форма – строгое математическое
определение, совокупность требований,
которым должна удовлетворять модель.
Всего нормальных форм больше 6-ти, наиболее
популярны первые 3
Проектирование БД
17. 17
Нормализация
Нормализация используется для улучшения
модели данных, чтобы она удовлетворяла
различным ограничениям, позволяющим
исключить нежелательное дублирование
данных. Нормализация гарантирует, что
полученная в результате её применения
модель не содержит противоречий, имеет
минимальную избыточность и
максимальную устойчивость.
Проектирование БД
18. 18
Аномалии
Нет формального определения
Аномалии возникают в том случае, когда
наши знания о предметной области
оказываются, по каким-то причинам,
невыразимыми в схеме БД или входящими в
противоречие с ней
На практике это означает либо
дополнительные манипуляции с данными
либо противоречивость данных
Проектирование БД
19. 19
Аномалии
Вставки: В таблицу Outcomes вставить
данные о новом корабле, который ещё не
участвовал ни в одном сражении
Обновления: Поменять английскую запись
“sunk” на “потоплен”
Удаления: Удалить из таблицы классов
кораблей записи для страны “Япония”. При
этом мы теряем факт, что Япония
участвовала в морских сражениях.
Проектирование БД
20. 20
SQL
SELECT Ships.Name, Classes.Class,
SQL
Classes.country
FROM Ships, Classes, Outcomes
WHERE Ships.Class = Classes.Class
AND Outcomes.Ship = Ships.Name
GROUP BY Ships.Name, Classes.Class,
Classes.Country
HAVING count(distinct Battle)>1
21. 21
Простые запросы
1. Найдите класс, имя и страну для всех классов кораблей,
имеющих не менее 10 орудий
2. Найдите названия всех кораблей, спущенных на воду до
1918 г.; при этом результирующий столбец должен быть
озаглавлен shipName
3. Найдите названия кораблей, потопленных в сражениях,
и название сражения, в котором они были потоплены
4. Найдите все корабли, названия которых совпадают с
именем их класса
5. Найдите названия всех кораблей, начинающиеся с буквы
R
6. Найдите все названия кораблей, состоящие из 3-х и
более слов
SQL
22. 22
Запросы > 1 отношения
1. Найдите корабли водоизмещением более 35 тонн
2. Перечислите названия, водоизмещение и число орудий
кораблей, участвовавших в сражении при Гвадаканале
3. Перечислите все корабли, упомянутые в этой БД (не все
они есть в таблице Ships)
4. Укажите страны, имеющие линкоры и крейсеры
5. Укажите корабли, которыее были повреждены в одном
сражении, но позднее участвовали в другом
6. Укажите сражения, в которых участвовало по меньшей
мере три корабля одной и той же страны
SQL
23. 23
Подзапросы
1. Найдите страны, корабли которых имеют наибольшее
число орудий
2. Найдите классы кораблей, в которых хотя бы один
корабль был потоплен в сражении
3. Найдите названия кораблей с орудиями калибра 16
дюймов
4. Найдите сражения, в которых участвовали корабли
класса Kongo
5. Найдите названия кораблей, имеющих наибольшее число
орудий среди всех кораблей такого же водоизмещения
SQL
24. 24
Агрегация
1. Определите число классов линейных кораблей
2. Определитее среднее число орудий для классов
линейных кораблей
3. Определите среднее число орудий линейных кораблей
4. Для каждого класса определите год, когда был спущен
на воду первый корабль этого класса
5. Для каждого класса определите число кораблей этого
класса, потопленных в сражении
6. Для каждого класса, содержащего не менее 3-х
кораблей, определите число кораблей этого класса,
потопленных в сражении
SQL