SlideShare a Scribd company logo
1 of 24
Download to read offline
1 
Базы данных: что такое SQL и 
нормальная форма 
Борчук Леонид
2 
Задача 
Создать БД 
- описание модели 
- создание модели 
- изучение модели 
- работа с моделью 
Модель – упрощенное 
представление реального процесса
3 
Формальный подход 
Методология состоит из этапов: 
Концептуальный: описание предметной 
области, беседа с пользователями 
Логический: формализация описания 
Физический: Реализация описания 
Проверка на адекватность 
Документирование 
Проектирование БД
4 
Описание модели 
Этап проектирования 
Модель сущность-связь 
Понятие сущности – 
философское, формально это 
определить нельзя (объект) 
Нужен ли этап проектирования? 
Проектирование БД
5 
Принципы 
Правильность 
Без избыточности (для фактов) 
Простота (бритва Оккама) 
Использование сложившихся 
приёмов 
Проектирование БД
6 
Пример 
Корабли, участвовавшие во 2-й мировой войне 
Корабли в классах построены по одному и тому же 
проекту, и классу обычно присваивается название 
первого корабля этого класса. Таблица Classes 
содержит имя класса, тип (bb – боевой корабль, bc – 
боевой крейсер), страну, в которой построен корабль, 
число главных орублий, калибр орудий и 
водоизмещение. В таблице Ships записаны название 
корабля, имя его класса и год спуска на воду. В 
тиблице Battles содержатся название и дата битвы, в 
таблице Outcomes – результаты участия корабля в 
битве (потоплен, поврежден или остался невердим). 
Проектирование БД
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 
Battles 
Name Date 
North Atlantic 5/24-27/41 
Guadalcanal 11/15/42 
Nortth Cape 12/26/43 
Surigao Strait 10/25/44 
Проектирование БД
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 
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 
Проектирование БД
Моделей множество, но наиболее популярной 
стала модель “сущность” - “связь” 
Модель графическая: прямоугольники – 
элементы, линии – связи между ними 
Предложена в 1976 году 
Сейчас поддерживается (с оговорками) 
множеством инструментов 
11 
ER-диаграмма 
Проектирование БД
12 
ER-диаграмма 
Проектирование БД
13 
Реляционная схема 
Проектирование БД
14 
Как моделировать? 
Предметная область одна, но её можно 
описать множеством способов 
Т.е. спроектировать по-разному, создать 
разные таблицы 
Например, одну супер-таблицу, или для 
каждого атрибута свою таблицу 
Разные модели будут иметь разные свойства. 
Что это за свойства? 
Проектирование БД
15 
Функциональная 
зависимость 
Функциональная зависимость (неформально) – 
связи между атрибутами. Например, связь двух 
таблиц по какому-либо ключу. 
Основа формального описания модели и её 
последующей нормализации 
Нормализация используется для создания набора 
отношений с заданными свойствами. 
Заданные свойства – точное представление 
данных, связей между ними и требуемых 
ограничений 
Проектирование БД
16 
Нормальная форма 
Нормализация – восходящий подход к 
проектированию БД (сущность – связь – 
нисходящий), удобен для проверки свойств 
модели. 
Т.е. модель последовательно переводится из 
одного состояния в другое, эти состояния 
называются нормальными формами. 
Нормальная форма – строгое математическое 
определение, совокупность требований, 
которым должна удовлетворять модель. 
Всего нормальных форм больше 6-ти, наиболее 
популярны первые 3 
Проектирование БД
17 
Нормализация 
Нормализация используется для улучшения 
модели данных, чтобы она удовлетворяла 
различным ограничениям, позволяющим 
исключить нежелательное дублирование 
данных. Нормализация гарантирует, что 
полученная в результате её применения 
модель не содержит противоречий, имеет 
минимальную избыточность и 
максимальную устойчивость. 
Проектирование БД
18 
Аномалии 
Нет формального определения 
Аномалии возникают в том случае, когда 
наши знания о предметной области 
оказываются, по каким-то причинам, 
невыразимыми в схеме БД или входящими в 
противоречие с ней 
На практике это означает либо 
дополнительные манипуляции с данными 
либо противоречивость данных 
Проектирование БД
19 
Аномалии 
Вставки: В таблицу Outcomes вставить 
данные о новом корабле, который ещё не 
участвовал ни в одном сражении 
Обновления: Поменять английскую запись 
“sunk” на “потоплен” 
Удаления: Удалить из таблицы классов 
кораблей записи для страны “Япония”. При 
этом мы теряем факт, что Япония 
участвовала в морских сражениях. 
Проектирование БД
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 
Простые запросы 
1. Найдите класс, имя и страну для всех классов кораблей, 
имеющих не менее 10 орудий 
2. Найдите названия всех кораблей, спущенных на воду до 
1918 г.; при этом результирующий столбец должен быть 
озаглавлен shipName 
3. Найдите названия кораблей, потопленных в сражениях, 
и название сражения, в котором они были потоплены 
4. Найдите все корабли, названия которых совпадают с 
именем их класса 
5. Найдите названия всех кораблей, начинающиеся с буквы 
R 
6. Найдите все названия кораблей, состоящие из 3-х и 
более слов 
SQL
22 
Запросы > 1 отношения 
1. Найдите корабли водоизмещением более 35 тонн 
2. Перечислите названия, водоизмещение и число орудий 
кораблей, участвовавших в сражении при Гвадаканале 
3. Перечислите все корабли, упомянутые в этой БД (не все 
они есть в таблице Ships) 
4. Укажите страны, имеющие линкоры и крейсеры 
5. Укажите корабли, которыее были повреждены в одном 
сражении, но позднее участвовали в другом 
6. Укажите сражения, в которых участвовало по меньшей 
мере три корабля одной и той же страны 
SQL
23 
Подзапросы 
1. Найдите страны, корабли которых имеют наибольшее 
число орудий 
2. Найдите классы кораблей, в которых хотя бы один 
корабль был потоплен в сражении 
3. Найдите названия кораблей с орудиями калибра 16 
дюймов 
4. Найдите сражения, в которых участвовали корабли 
класса Kongo 
5. Найдите названия кораблей, имеющих наибольшее число 
орудий среди всех кораблей такого же водоизмещения 
SQL
24 
Агрегация 
1. Определите число классов линейных кораблей 
2. Определитее среднее число орудий для классов 
линейных кораблей 
3. Определите среднее число орудий линейных кораблей 
4. Для каждого класса определите год, когда был спущен 
на воду первый корабль этого класса 
5. Для каждого класса определите число кораблей этого 
класса, потопленных в сражении 
6. Для каждого класса, содержащего не менее 3-х 
кораблей, определите число кораблей этого класса, 
потопленных в сражении 
SQL

More Related Content

More from Yandex

Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 
Эталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовYandex
 
Поиск списков в неструктурированных данных
Поиск списков в неструктурированных данныхПоиск списков в неструктурированных данных
Поиск списков в неструктурированных данныхYandex
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыYandex
 
Beminar js
Beminar jsBeminar js
Beminar jsYandex
 

More from Yandex (20)

Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 
Эталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатовЭталонное описание фильма на основе десятков дубликатов
Эталонное описание фильма на основе десятков дубликатов
 
Поиск списков в неструктурированных данных
Поиск списков в неструктурированных данныхПоиск списков в неструктурированных данных
Поиск списков в неструктурированных данных
 
Производительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформыПроизводительность параметрического поиска на основе опенсорс-платформы
Производительность параметрического поиска на основе опенсорс-платформы
 
Beminar js
Beminar jsBeminar js
Beminar js
 

Леонид Борчук - Базы данных: что такое 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-диаграмма Проектирование БД
  • 13. 13 Реляционная схема Проектирование БД
  • 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