Леонид Борчук - Базы данных: что такое sql и нормальная...

24
1 Борчук Леонид Базы данных: что такое SQL и нормальная форма

Upload: yandex

Post on 21-May-2015

310 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

1

Борчук Леонид

Базы данных: что такое SQL и нормальная форма

Page 2: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

2

Задача

Создать БД- описание модели- создание модели- изучение модели- работа с модельюМодель – упрощенное

представление реального процесса

Page 3: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

3

Формальный подходМетодология состоит из этапов:Концептуальный: описание предметной

области, беседа с пользователямиЛогический: формализация описания

Физический: Реализация описанияПроверка на адекватностьДокументирование

Проектирование БД

Page 4: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

4

Описание модели

Этап проектированияМодель сущность-связьПонятие сущности –

философское, формально это определить нельзя (объект)

Нужен ли этап проектирования?

Проектирование БД

Page 5: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

5

Принципы

ПравильностьБез избыточности (для фактов)Простота (бритва Оккама)Использование сложившихся

приёмов

Проектирование БД

Page 6: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

6

ПримерКорабли, участвовавшие во 2-й мировой войнеКорабли в классах построены по одному и тому же

проекту, и классу обычно присваивается название первого корабля этого класса. Таблица Classes содержит имя класса, тип (bb – боевой корабль, bc – боевой крейсер), страну, в которой построен корабль, число главных орублий, калибр орудий и водоизмещение. В таблице Ships записаны название корабля, имя его класса и год спуска на воду. В тиблице Battles содержатся название и дата битвы, в таблице Outcomes – результаты участия корабля в битве (потоплен, поврежден или остался невердим).

Проектирование БД

Page 7: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

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

Page 8: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

8

Battles

Проектирование БД

Name Date

North Atlantic 5/24-27/41

Guadalcanal 11/15/42

Nortth Cape 12/26/43

Surigao Strait 10/25/44

Page 9: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

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

Page 10: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

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

Page 11: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

11

ER-диаграмма

Проектирование БД

Моделей множество, но наиболее популярной стала модель “сущность” - “связь”

Модель графическая: прямоугольники – элементы, линии – связи между ними

Предложена в 1976 году

Сейчас поддерживается (с оговорками) множеством инструментов

Page 12: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

12

ER-диаграмма

Проектирование БД

Page 13: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

13

Реляционная схема

Проектирование БД

Page 14: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

14

Как моделировать?

Проектирование БД

Предметная область одна, но её можно описать множеством способов

Т.е. спроектировать по-разному, создать разные таблицы

Например, одну супер-таблицу, или для каждого атрибута свою таблицу

Разные модели будут иметь разные свойства. Что это за свойства?

Page 15: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

15

Функциональная зависимость

Проектирование БД

Функциональная зависимость (неформально) – связи между атрибутами. Например, связь двух таблиц по какому-либо ключу.

Основа формального описания модели и её последующей нормализации

Нормализация используется для создания набора отношений с заданными свойствами.

Заданные свойства – точное представление данных, связей между ними и требуемых ограничений

Page 16: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

16

Нормальная форма

Проектирование БД

Нормализация – восходящий подход к проектированию БД (сущность – связь – нисходящий), удобен для проверки свойств модели.

Т.е. модель последовательно переводится из одного состояния в другое, эти состояния называются нормальными формами.

Нормальная форма – строгое математическое определение, совокупность требований, которым должна удовлетворять модель.

Всего нормальных форм больше 6-ти, наиболее популярны первые 3

Page 17: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

17

Нормализация

Проектирование БД

Нормализация используется для улучшения модели данных, чтобы она удовлетворяла различным ограничениям, позволяющим исключить нежелательное дублирование данных. Нормализация гарантирует, что полученная в результате её применения модель не содержит противоречий, имеет минимальную избыточность и максимальную устойчивость.

Page 18: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

18

Аномалии

Проектирование БД

Нет формального определения

Аномалии возникают в том случае, когда наши знания о предметной области оказываются, по каким-то причинам, невыразимыми в схеме БД или входящими в противоречие с ней

На практике это означает либо дополнительные манипуляции с данными либо противоречивость данных

Page 19: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

19

Аномалии

Проектирование БД

Вставки: В таблицу Outcomes вставить данные о новом корабле, который ещё не участвовал ни в одном сражении

Обновления: Поменять английскую запись “sunk” на “потоплен”

Удаления: Удалить из таблицы классов кораблей записи для страны “Япония”. При этом мы теряем факт, что Япония участвовала в морских сражениях.

Page 20: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

20

SQL

SQL

SELECT Ships.Name, Classes.Class,        Classes.country   FROM Ships, Classes, Outcomes WHERE Ships.Class = Classes.Class   AND Outcomes.Ship = Ships.NameGROUP BY Ships.Name, Classes.Class,          Classes.CountryHAVING count(distinct Battle)>1

Page 21: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

21

Простые запросы

SQL

1. Найдите класс, имя и страну для всех классов кораблей, имеющих не менее 10 орудий

2. Найдите названия всех кораблей, спущенных на воду до 1918 г.; при этом результирующий столбец должен быть озаглавлен shipName

3. Найдите названия кораблей, потопленных в сражениях, и название сражения, в котором они были потоплены

4. Найдите все корабли, названия которых совпадают с именем их класса

5. Найдите названия всех кораблей, начинающиеся с буквы R

6. Найдите все названия кораблей, состоящие из 3-х и

более слов

Page 22: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

22

Запросы > 1 отношения

SQL

1. Найдите корабли водоизмещением более 35 тонн

2. Перечислите названия, водоизмещение и число орудий кораблей, участвовавших в сражении при Гвадаканале

3. Перечислите все корабли, упомянутые в этой БД (не все они есть в таблице Ships)

4. Укажите страны, имеющие линкоры и крейсеры

5. Укажите корабли, которыее были повреждены в одном сражении, но позднее участвовали в другом

6. Укажите сражения, в которых участвовало по меньшей

мере три корабля одной и той же страны

Page 23: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

23

Подзапросы

SQL

1. Найдите страны, корабли которых имеют наибольшее число орудий

2. Найдите классы кораблей, в которых хотя бы один корабль был потоплен в сражении

3. Найдите названия кораблей с орудиями калибра 16 дюймов

4. Найдите сражения, в которых участвовали корабли класса Kongo

5. Найдите названия кораблей, имеющих наибольшее число орудий среди всех кораблей такого же водоизмещения

Page 24: Леонид Борчук - Базы данных: что такое SQL и нормальная форма

24

Агрегация

SQL

1. Определите число классов линейных кораблей

2. Определитее среднее число орудий для классов линейных кораблей

3. Определите среднее число орудий линейных кораблей

4. Для каждого класса определите год, когда был спущен на воду первый корабль этого класса

5. Для каждого класса определите число кораблей этого класса, потопленных в сражении

6. Для каждого класса, содержащего не менее 3-х кораблей, определите число кораблей этого класса, потопленных в сражении