Стажировка-2015. Разработка. Занятие 2. Основы...
TRANSCRIPT
Стажировка-2015
База данных – определений много, в основном, по признакам (логическая связанность, обработка на ЭВМ и т.д.)
Определения
Стажировка-2015
Система управления базами данных (СУБД) – программная система для создания и управления базами данных
Определения
Стажировка-2015
Реляционная модель – модель, основанная на реляционной алгебре (алгебра отношений на кортежах)
Определения
Стажировка-2015
Схема реляционной БД:1. Таблицы – физическое представление отношений (столбцы – атрибуты, строки – кортежи)
Реляционные БД
Стажировка-2015
Схема реляционной БД:2. Внешние файлы – для больших объемов данных (чаще бинарных) 3. Индексы – уникальные, поисковые4. Ограничения - первичные и внешние ключи, формульные
Реляционные БД
Стажировка-2015
Программный код в реляционных СУБД:1. Триггеры – для реакции на события2. Хранимые процедуры и функции – произвольные алгоритмы обработки данных
Реляционные БД
Стажировка-2015
Первичный ключ (primary key):основной ключ таблицы, уникальный как следствие, может быть простым и составным (несколько столбцов)
Реляционные БД
Стажировка-2015
Внешний ключ (foreign key):столбцы таблицы, значения которых являются подмножеством первичного ключа другой таблицы
Реляционные БД
Стажировка-2015
Нормальная форма:набор свойств отношений, для уменьшения логической противоречивости данных (1-НФ, 2-НФ, 3-НФ – самая распространенная)
Реляционные БД
Стажировка-2015
Варианты SQL:1. ANSI SQL 2. Oracle-диалект (Oracle SQL)3. Postgres-диалект4. MySQL-диалект
SQL
Стажировка-2015
Data description language (DDL):1. create/drop – database, table, index, constraint 2. alter – database, table, index, constraint
SQL
Стажировка-2015
Таблица «Факультет»:
create table `Department`( id int(20) not null, name varchar(50) not null, primary key(id)) engine=InnoDB character set=utf8;
SQL
Стажировка-2015
Индекс на таблицу «Факультет»:
create unique index `Department_unique` on Department(name);
SQL
Стажировка-2015
Таблица «Группа»:
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
Стажировка-2015
Индекс на таблицу «Группа»:
create unique index `Group_unique` on Group(department_id, name);
SQL
Стажировка-2015
Data modeling language (DML):1. insert/update/delete – модификация данных 2. select – построение множества кортежей по декларативному запросу (query)
SQL
Стажировка-2015
Вставка в таблицу «Факультет»:
insert into Department(id, name)values (1, ‘ИМИТ’), (2, ‘Физический’);
SQL
Стажировка-2015
Вставка в таблицу «Группа»:
insert into Group(id, name, department_id)values (1, ‘ММ-01’, 1), (2, ‘Ф-05-О’, 2), (3, ‘МП-01’, 1);
SQL
Стажировка-2015
Запрос к таблице «Группа»:
select g.*from Group g inner join Department d on g.department_id = d.idwhere d.name = ‘ИМИТ’;
1, ММ-013, МП-01
SQL
Стажировка-2015
Структура запроса:select <описание кортежа>from <список таблиц>[where <условия на исходные>][group by <список столбцов>][having <условия на группировку>]][order by <список столбцов>]
SQL
Стажировка-2015
Пример: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
Стажировка-2015
Соединение таблиц – получение декартова произведения таблиц, ограниченного условием соединения
Соединения
Стажировка-2015
Пример:
select *from Group g, Department dwhere g.department_id = d.id;
1, ММ-01, 1, ИМИТ2, ФФ-01-О, 2, Физический3, МП-01, 1, ИМИТ
Соединения
Стажировка-2015
Алгоритмы соединения таблиц:1. вложенными циклами (nested loops) – самый универсальный2. хэшированием3. слиянием сортированных списков
Соединения
Стажировка-2015
Виды соединений:
1. внутреннее – inner join2. внешнее – outer join 2.1 левое – left join 2.1 правое – right join 2.3 полное – full join3. перекрестное – cross join (то же, что ‘,’ в примере выше)
Соединения
Стажировка-2015
Пример:
select c.namefrom Student s right join Chair c on s.chair_id = c.idwhere s.chair_id is null;
При отсутствии нужной строки в таблице «Студент», на ее месте будет кортеж из null
Соединения
Стажировка-2015
Подзапрос:вложенный запрос в другом запросе, может быть внутри любого DML-оператора
Подзапросы
Стажировка-2015
Результат подзапроса в where используется:1. в операциях сравнения (скаляр)2. принадлежность/не принадлежность кортежа множеству – in/not in3. непустота/пустота множества – exists/not exists
Подзапросы
Стажировка-2015
Пример:
select c.namefrom Chair cwhere not exists ( select null from Student s where s.chair_id = c.id);
Подзапросы
Стажировка-2015
Операции с результатами запросов:1. distinct – исключение повторов2. union [all] - объединение3. intersect – пересечение4. except – исключение строк 2-го множества из 1-го
Подзапросы
Стажировка-2015
Минусы нормализации – изменения состава атрибутов приводят к изменениям структуры таблиц и существующих данных, соединения таблиц медленны
Денормализация БД
Стажировка-2015
Денормализация – снижение уровня нормализации чаще всего за счет сохранения результата соединения таблиц
Денормализация БД
Стажировка-2015
Минус денормализации – может быть избыточность данных, может нарушиться целостность при модификации данных
Денормализация БД
Стажировка-2015
Среди преимуществ называются:1. отсутствие схемы данных и миграций2. возможности горизонтального масштабирования
Однако зачастую недостатки все портят (о них позже)
NoSQL БД
Стажировка-2015
Использование JSON в реляционных БД – совмещаем гибкость и надежность
Подробнее позже
Современные тенденции
Стажировка-2015
Для дальнейшего изучения:1. хорошие упражнения по SQL2. хорошие лекции по БД
Подзапросы