Спецкурс 2014, занятие 6. Базы данных
DESCRIPTION
Спецкурс в ОмГУ, 2014 г.TRANSCRIPT
Спецкурс ОмГУ-‐2014
Базы данных
Занятие 6
Спецкурс ОмГУ-‐2014
База данных – определений много, в основном, по признакам (логическая связанность, обработка на ЭВМ и т.д.)
Определения
Спецкурс ОмГУ-‐2014
Система управления базами данных (СУБД) – программная система для создания и управления базами данных
Определения
Спецкурс ОмГУ-‐2014
Виды баз данных (по модели): 1. реляционные 2. иерархические 3. сетевые 4. объектные 5. объектно-‐реляционные
Определения
Спецкурс ОмГУ-‐2014
Реляционная модель – модель, основанная на реляционной алгебре (алгебра отношений на кортежах)
Определения
Спецкурс ОмГУ-‐2014
Примеры реляционных СУБД: 1. Oracle 2. Postgres 3. MySQL 4. MS SQL 5. SQLite
Определения
Спецкурс ОмГУ-‐2014
Схема реляционной БД: 1. Таблицы – физическое представление отношений (столбцы – атрибуты, строки – кортежи)
Реляционные БД
Спецкурс ОмГУ-‐2014
Схема реляционной БД: 2. Внешние файлы – для больших объемов данных (чаще бинарных) 3. Индексы – уникальные, поисковые 4. Ограничения -‐ первичные и внешние ключи, формульные
Реляционные БД
Спецкурс ОмГУ-‐2014
Программный код в реляционных СУБД: 1. Триггеры – для реакции на события 2. Хранимые процедуры и функции – произвольные алгоритмы обработки данных
Реляционные БД
Спецкурс ОмГУ-‐2014
Первичный ключ (primary key): основной ключ таблицы, уникальный как следствие, может быть простым и составным (несколько столбцов)
Реляционные БД
Спецкурс ОмГУ-‐2014
Внешний ключ (foreign key): столбцы таблицы, значения которых являются подмножеством первичного ключа другой таблицы
Реляционные БД
Спецкурс ОмГУ-‐2014
Нормальная форма: набор свойств отношений, для обеспечения целостности данных (1-‐НФ, 2-‐НФ, 3-‐НФ – самая распространенная)
Реляционные БД
Спецкурс ОмГУ-‐2014
Department: id name
Пример БД в 3-‐й нормальной форме
Спецкурс ОмГУ-‐2014
Group: id name department_id
Пример БД в 3-‐й нормальной форме
Спецкурс ОмГУ-‐2014
Chair: id name department_id
Пример БД в 3-‐й нормальной форме
Спецкурс ОмГУ-‐2014
Student: id first_name last_name group_id chair_id
Пример БД в 3-‐й нормальной форме
Спецкурс ОмГУ-‐2014
Денормализация – снижение уровня нормализации, как правило с целью повышения производительности (чаще всего уход от 3-‐НФ)
Денормализация БД
Спецкурс ОмГУ-‐2014
Student: id first_name last_name group_id chair_name department_name
Денормализация БД
Спецкурс ОмГУ-‐2014
Минус денормализации – нужно тщательнее следить за целостностью и непротиворечивостью данных
Денормализация БД
Спецкурс ОмГУ-‐2014
Structured query language (SQL) – язык написания запросов к реляционной БД
SQL
Спецкурс ОмГУ-‐2014
Варианты SQL: 1. ANSI SQL 2. Oracle-‐диалект (Oracle SQL) 3. Postgres-‐диалект 4. MySQL-‐диалект
SQL
Спецкурс ОмГУ-‐2014
Data descripcon language (DDL): 1. create/drop – database, table, index, constraint 2. alter – database, table, index, constraint
SQL
Спецкурс ОмГУ-‐2014
Все дальнейшие примеры для выполнения на MySQL 5.x
Реляционные БД
Спецкурс ОмГУ-‐2014
Создание БД: create database `omsu` character set u�8 collate u�8_general_ci;
SQL
Спецкурс ОмГУ-‐2014
Таблица «Факультет»: create table `Department`( id int(20) not null, name varchar(50) not null, primary key(id) ) engine=InnoDB character set=u�8;
SQL
Спецкурс ОмГУ-‐2014
Индекс на таблицу «Факультет»: create unique index `Department_unique` on Department(name);
SQL
Спецкурс ОмГУ-‐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=u�8;
SQL
Спецкурс ОмГУ-‐2014
Индекс на таблицу «Группа»: create unique index `Group_unique` on Group(department_id, name);
SQL
Спецкурс ОмГУ-‐2014
Data modeling language (DML): 1. insert/update/delete – модификация данных 2. select – построение множества кортежей по декларативному запросу (query)
SQL
Спецкурс ОмГУ-‐2014
Вставка в таблицу «Факультет»: insert into Department(id, name) values (1, ‘ИМИТ’), (2, ‘Физический’);
SQL
Спецкурс ОмГУ-‐2014
Вставка в таблицу «Группа»: insert into Group(id, name, department_id) values (1, ‘ММ-‐01’, 1), (2, ‘Ф-‐05-‐О’, 2), (3, ‘МП-‐01’, 1);
SQL
Спецкурс ОмГУ-‐2014
Запрос к таблице «Факультет»: select name from Department; ИМИТ Физический
SQL
Спецкурс ОмГУ-‐2014
Запрос к таблице «Группа»: select g.* from Group g inner join Department d on g.department_id = d.id where d.name = ‘ИМИТ’; 1, ММ-‐01 3, МП-‐01
SQL
Спецкурс ОмГУ-‐2014
Структура запроса: select <описание кортежа> from <список таблиц> [where <условия на исходные>] [group by <список столбцов>] [having <условия на группировку>]] [order by <список столбцов>]
SQL
Спецкурс ОмГУ-‐2014
Пример: select d.name, count(g.id) from Group g inner join Department d on g.department_id = d.id where d.name like ‘%И%’ group by d.name having count(g.id) > 1 order by d.name; ИМИТ, 2
SQL
Спецкурс ОмГУ-‐2014
Соединение таблиц – получение декартова произведения таблиц, ограниченного условием соединения
Соединения
Спецкурс ОмГУ-‐2014
Пример: select * from Group g, Department d where g.department_id = d.id; 1, ММ-‐01, 1, ИМИТ 2, ФФ-‐01-‐О, 2, Физический 3, МП-‐01, 1, ИМИТ
Соединения
Спецкурс ОмГУ-‐2014
Алгоритмы соединения таблиц: 1. вложенными циклами (nested loops) – самый универсальный 2. хэшированием 3. слиянием сортированных списков
Соединения
Спецкурс ОмГУ-‐2014
Виды соединений: 1. внутреннее – inner join 2. внешнее – outer join 2.1 левое – le; join 2.1 правое – right join 2.3 полное – full join 3. перекрестное – cross join (то же, что ‘,’ в примере выше)
Соединения
Спецкурс ОмГУ-‐2014
Пример: select c.name from Student s right join Chair c on s.chair_id = c.id where s.chair_id is null; При отсутствии нужной строки в таблице «Студент», на ее месте будет кортеж из null
Соединения
Спецкурс ОмГУ-‐2014
Подзапрос: вложенный запрос в другом запросе, может быть внутри любого DML-‐оператора
Подзапросы
Спецкурс ОмГУ-‐2014
Результат подзапроса в where используется: 1. в операциях сравнения (скаляр) 2. принадлежность/не принадлежность кортежа множеству – in/not in 3. непустота/пустота множества – exists/not exists
Подзапросы
Спецкурс ОмГУ-‐2014
Пример: select c.name from Chair c where not exists ( select null from Student s where s.chair_id = c.id );
Подзапросы
Спецкурс ОмГУ-‐2014
Операции с результатами запросов: 1. dis=nct – исключение повторов 2. union [all] -‐ объединение 3. intersect – пересечение 4. except – исключение строк 2-‐го множества из 1-‐го
Подзапросы
Спецкурс ОмГУ-‐2014
Для дальнейшего изучения: 1. хорошие упражнения по SQL 2. хорошие лекции по БД
Подзапросы