45
Стажировка-2014 Базы данных Занятие 5

Стажировка-2014, занятие 5. Базы данных

  • Upload
    7bits

  • View
    126

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Базы данных

Занятие 5

Page 2: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

База данных – определений много, в основном, по признакам (логическая связанность, обработка на ЭВМ и т.д.)

Определения

Page 3: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Система управления базами данных (СУБД) – программная система для создания и управления базами данных

Определения

Page 4: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Виды баз данных (по модели):1. реляционные2. иерархические3. сетевые4. объектные5. объектно-реляционные

Определения

Page 5: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Реляционная модель – модель, основанная на реляционной алгебре (алгебра отношений на кортежах)

Определения

Page 6: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Примеры реляционных СУБД:1. Oracle2. Postgres3. MySQL4. MS SQL5. SQLite

Определения

Page 7: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Схема реляционной БД:1. Таблицы – физическое представление отношений (столбцы – атрибуты, строки – кортежи)

Реляционные БД

Page 8: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Схема реляционной БД:2. Внешние файлы – для больших объемов данных (чаще бинарных) 3. Индексы – уникальные, поисковые4. Ограничения - первичные и внешние ключи, формульные

Реляционные БД

Page 9: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Программный код в реляционных СУБД:1. Триггеры – для реакции на события2. Хранимые процедуры и функции – произвольные алгоритмы обработки данных

Реляционные БД

Page 10: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Первичный ключ (primary key):основной ключ таблицы, уникальный как следствие, может быть простым и составным (несколько столбцов)

Реляционные БД

Page 11: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Внешний ключ (foreign key):столбцы таблицы, значения которых являются подмножеством первичного ключа другой таблицы

Реляционные БД

Page 12: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Нормальная форма:набор свойств отношений, для обеспечения целостности данных (1-НФ, 2-НФ, 3-НФ – самая распространенная)

Реляционные БД

Page 13: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Department:idname

Пример БД в 3-й нормальной форме

Page 14: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Group:idnamedepartment_id

Пример БД в 3-й нормальной форме

Page 15: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Chair:idnamedepartment_id

Пример БД в 3-й нормальной форме

Page 16: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Student:idfirst_namelast_namegroup_idchair_id

Пример БД в 3-й нормальной форме

Page 17: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Денормализация – снижение уровня нормализации, как правило с целью повышения производительности (чаще всего уход от 3-НФ)

Денормализация БД

Page 18: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Student:idfirst_namelast_namegroup_idchair_namedepartment_name

Денормализация БД

Page 19: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Минус денормализации – нужно тщательнее следить за целостностью и непротиворечивостью данных

Денормализация БД

Page 20: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Structured query language (SQL) – язык написания запросов к реляционной БД

SQL

Page 21: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Варианты SQL:1. ANSI SQL 2. Oracle-диалект (Oracle SQL)3. Postgres-диалект4. MySQL-диалект

SQL

Page 22: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Data description language (DDL):1. create/drop – database, table, index, constraint 2. alter – database, table, index, constraint

SQL

Page 23: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Все дальнейшие примеры для выполнения на MySQL 5.x

Реляционные БД

Page 24: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Создание БД:create database `omsu` character set utf8collate utf8_general_ci;

SQL

Page 25: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Таблица «Факультет»:

create table `Department`( id int(20) not null, name varchar(50) not null, primary key(id)) engine=InnoDB character set=utf8;

SQL

Page 26: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Индекс на таблицу «Факультет»:

create unique index `Department_unique` on Department(name);

SQL

Page 27: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Таблица «Группа»:

create table `Group`( id int(20) not null, name varchar(50) not null, department_id int(20) not null, primary key(id), foreign key (department_id) references Department(id)) engine=InnoDB character set=utf8;

SQL

Page 28: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Индекс на таблицу «Группа»:

create unique index `Group_unique` on Group(department_id, name);

SQL

Page 29: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Data modeling language (DML):1. insert/update/delete – модификация данных 2. select – построение множества кортежей по декларативному запросу (query)

SQL

Page 30: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Вставка в таблицу «Факультет»:

insert into Department(id, name)values (1, ‘ИМИТ’), (2, ‘Физический’);

SQL

Page 31: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Вставка в таблицу «Группа»:

insert into Group(id, name, department_id)values (1, ‘ММ-01’, 1), (2, ‘Ф-05-О’, 2), (3, ‘МП-01’, 1);

SQL

Page 32: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Запрос к таблице «Факультет»:

select name from Department;

ИМИТФизический

SQL

Page 33: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Запрос к таблице «Группа»:

select g.*from Group g inner join Department d on g.department_id = d.idwhere d.name = ‘ИМИТ’;

1, ММ-013, МП-01

SQL

Page 34: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Структура запроса:select <описание кортежа>from <список таблиц>[where <условия на исходные>][group by <список столбцов>][having <условия на группировку>]][order by <список столбцов>]

SQL

Page 35: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Пример:select d.name, count(g.id)from Group g inner join Department d on g.department_id = d.idwhere d.name like ‘%И%’group by d.namehaving count(g.id) > 1order by d.name;

ИМИТ, 2

SQL

Page 36: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Соединение таблиц – получение декартова произведения таблиц, ограниченного условием соединения

Соединения

Page 37: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Пример:

select *from Group g, Department dwhere g.department_id = d.id;

1, ММ-01, 1, ИМИТ2, ФФ-01-О, 2, Физический3, МП-01, 1, ИМИТ

Соединения

Page 38: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Алгоритмы соединения таблиц:1. вложенными циклами (nested loops) – самый универсальный2. хэшированием3. слиянием сортированных списков

Соединения

Page 39: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Виды соединений:

1. внутреннее – inner join2. внешнее – outer join 2.1 левое – left join 2.1 правое – right join 2.3 полное – full join3. перекрестное – cross join (то же, что ‘,’ в примере выше)

Соединения

Page 40: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Пример:

select c.namefrom Student s right join Chair c on s.chair_id = c.idwhere s.chair_id is null;

При отсутствии нужной строки в таблице «Студент», на ее месте будет кортеж из null

Соединения

Page 41: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Подзапрос:вложенный запрос в другом запросе, может быть внутри любого DML-оператора

Подзапросы

Page 42: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Результат подзапроса в where используется:1. в операциях сравнения (скаляр)2. принадлежность/не принадлежность кортежа множеству – in/not in3. непустота/пустота множества – exists/not exists

Подзапросы

Page 43: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Пример:

select c.namefrom Chair cwhere not exists ( select null from Student s where s.chair_id = c.id);

Подзапросы

Page 44: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Операции с результатами запросов:1. distinct – исключение повторов2. union [all] - объединение3. intersect – пересечение4. except – исключение строк 2-го множества из 1-го

Подзапросы

Page 45: Стажировка-2014, занятие 5. Базы данных

Стажировка-2014

Для дальнейшего изучения:1. хорошие упражнения по SQL2. хорошие лекции по БД

Подзапросы