4. СУБД и базы данных
База данных
База данных — взаимосвязанная информация (данные)
об объектах, которая организованна специальным
образом и хранится на каком-либо носителе.
Система управления базами данных
СУБД — совокупность программных и лингвистических
средств общего или специального назначения,
обеспечивающих управление созданием и
использованием баз данных.
5. СУБД и базы данных
Функции СУБД
• управление данными во внешней памяти
• управление данными в оперативной памяти
• журнализация изменений, резервное копирование и
восстановление базы данных после сбоев
• поддержка языков БД (язык определения данных, язык
манипулирования данными).
6. СУБД и базы данных
Решаемые проблемы
• структура хранения
• примитивные операции (проекции, селекции, соединения и т.п.)
• эффективный поиск данных
• управление памятью
• совместный доступ к данным
• изоляция и блокировки
• атомарные операции
7. СУБД и базы данных
Классификация СУБД по модели данных
• Иерархические
• Сетевые
• Реляционные
• Объектно-ориентированные
• Объектно-реляционные
8. Реляционные СУБД
Реляционная СУБД — СУБД, управляющая реляционными базами
данных.
Реляционная база данных — база данных, основанная на реляционной
модели данных.
Основные понятия реляционной модели данных:
• Отношение, relation, таблица
• Кортеж, tuple, строка
• Атрибут, столбец
• Реляционная алгебра – запрос
17. Реляционная модель данных
Произведение
Мультфильмы
Каналы
Код_мульта Название_мульт
а
Код_канала
Название_канал
а
0
0
СТС
The Simpsons
1
Family Guy
1
Код_мульта Duck Tales
Название_мул Код_канала
2
ьта
2х2
Название_кан
ала
0
The Simpsons
0
СТС
0
The Simpsons
1
2х2
1
Family Guy
0
СТС
21. SQL
• DDL (Data Definition Language) - oпределение
структуры отношений
• DML (Data Manipulation Language) - изменение
хранимых данных
• DQL (Data Query Language) - запросы
22. Data Query Language
Выборка
SELECT id, name, length(name) AS len
FROM users
WHERE email LIKE '%@mail.ru' AND age > 10
ORDER BY name DESC
LIMIT 10 OFFSET 15
23. Data Query Language
Агрегация
SELECT name, count(id) cnt
FROM users
GROUP BY name
ORDER BY cnt
HAVING cnt > 1
Агрегатные функции: COUNT, SUM, AVG, GROUP_CONCAT
24. Data Query Language
Соединения
SELECT h.name, a.name
FROM heroes h
INNER JOIN abilities a ON h.id = a.hero_id
SELECT h.name, a.name
FROM heroes h, abilities a
WHERE h.id = a.hero_id
25. Data Query Language
Разновидности JOIN
• CROSS JOIN (A, B)
• INNER JOIN (JOIN)
• LEFT OUTER JOIN ( A LEFT JOIN B )
• RIGH OUTER JOIN ( A RIGHT JOIN B )
• FULL OUTER JOIN ( A LEFT JOIN B UNION A RIGHT
JOIN B)
27. Data Query Language
Вложенные запросы
SELECT title
FROM article t1
JOIN (
SELECT rubric_id, MAX(id) max_id
FROM article
GROUP BY rubric_id LIMIT 5
) t2
ON t1.id = t2.max_id;
29. Data Manipulation Language
INSERT INTO users (name, age) VALUES ('petr', 10);
UPDATE users SET age = 10 WHERE name = 'petr';
UPDATE users SET age = age + 1;
DELETE FROM users WHERE name = 'masha';
DELETE FROM users WHERE age > 150;
REPLACE INTO users (name, age) VALUES ('petr', 10);
INSERT INTO users (name, age) VALUES ('petr', 10) ON DUPLICATE
KEY UPDATE name = 'petr', age = 10;
30. Data Definition Language
CREATE TABLE users (
id INTEGER UNSIGNED NOT NULL,
email VARCHAR(64) NOT NULL,
name VARCHAR(255) NOT NULL,
birthdate DATE,
registred DATETIME DEFAULT NOW(),
PRIMARY KEY (id),
UNIQUE KEY (email),
KEY birthdate_idx (birthdate)
);
31. Data Definition Language
CREATE TABLE users (
id SERIAL,
name VARCHAR(255) NOT NULL
);
CREATE TABLE cars (
id SERIAL,
number VARCHAR(10) NOT NULL,
owner_id BIGINT NOT NULL,
FOREIGN KEY (owner_id) REFERENCES users (id)
DELETE CASCADE
);
ON
32. Data Definition Language
DROP TABLE useless;
ALTER TABLE users
ADD COLUMN language enum('ru', 'en')
NOT NULL DEFAULT 'ru' after name;
ALTER TABLE users DROP COLUMN langauge;
ALTER TABLE users ADD INDEX ('name');
ALTER TABLE users
CHANGE nickname fullname varchar(255) NOT NULL;
CREATE DATABASE test;
35. Проектирование
Задачи проектирования
• Обеспечение хранения в БД всей необходимой информации.
• Обеспечение возможности получения данных по всем необходимым
запросам.
• Сокращение избыточности и дублирования данных.
• Обеспечение целостности данных (правильности их содержания):
исключение противоречий в содержании данных, исключение их
потери и т.д.
36. Нормализация
Ключ
Минимальный набор аттрибутов, обеспечивающий уникальность
кортежа. Если у двух кортежей совпадают все ключевые аттрибуты →
кортежи совпадают. Никакое подмножество ключа не является
ключом.
Первичный ключ
Если существует несколько ключей, один из них называют первичным.
37. 1ая нормальная форма
Переменная отношения находится в первой нормальной форме тогда и
только тогда, когда в любом допустимом значении отношения каждый
его кортеж содержит только одно значение для каждого из атрибутов.
Сотрудник
Номер телефона
Иванов И. И.
283-56-82
390-57-34
Петров П. П.
708-62-34
Сотрудник
Номер телефона
Иванов И. И.
283-56-82
Иванов И. И.
390-57-34
Петров П. П.
708-62-34
38. 2ая нормальная форма
Схема отношений находится во второй нормальной форме тогда и
только тогда, когда она находится в первой нормальной форме и каждый
неключевой атрибут X неприводимо зависит от ее потенциального
ключа.
(т.е. невозможно выделить подключ, от которого зависит)
Сотрудник
Должность
Компьютер
Гришин
Кладовщик
Нет
Васильев
Программис Есть
т
Иванов
Кладовщик Нет
Сотрудник
Должность
Должность
Компьютер
Гришин
Кладовщик
Кладовщик
Васильев
Программис
Программис Есть
Нет
39. 3 и 4 нормальные формы
3я нормальная форма
Схема отношений R находится в третьей нормальной форме тогда и
только тогда, когда она находится во второй нормальной форме и ни
один неключевой атрибут R не находится в транзитивной
функциональной зависимости от потенциального ключа R.
4я нормальная форма (Бойса-Кодда)
Переменная отношения находится в четвёртой нормальной форме, если
она находится в нормальной форме Бойса — Кодда и не содержит
нетривиальных многозначных зависимостей
40. Проектирование
Формализация на практике
• Логическое разделение сущностей
• Выделение синтетических первичных ключей
• Связи 1:N, N:1 реализуются через внешний ключ
• Связи N:M реализуются через промежуточную таблицу
• Атрибут с фиксированным числом значений – внешняя
таблица либо поле типа enum
42. Проектирование
Внешние ключи
Внешний ключ – подмножество атрибутов некоторой схемы отношения R2,
значения которых должны совпадать со значениями некоторого
потенциального ключа некоторой схемы отношения R1.
Изменение/удаление внешнего ключа
• RESTRICT
• CASCADE
• SET NULL
• NO ACTION
44. Индексы
• Первичный ключ PRIMARY
• Уникальный индекс UNIQUE
• Неуникальный индекс INDEX
• Пространственный индекс SPATIAL
• Полнотекстовый индекс FULLTEXT
45. Индексы
B-дерево
• Сбалансированное дерево.
• Эффективное заполнение блоков
• Применяется для индексирования ключевых и неключевых
атрибутов
• Возможность поиска диапазона значений
47. Индексы
Хеш-таблица
• Быстрый доступ к данным
• Вероятность возникновения длинной цепочки блоков
• Отсутствие возможности поиска диапазона значений
49. Методы оптимизации
«Ну и запросы у вас…» – сказала
база данных и повисла
• Создавать индексы для полей по которым происходит соединение
таблиц (JOIN)
• Создавать индексы для полей по которым фильтруются записи
(WHERE)
• Создавать индексы для полей по которым идет сортировка (ORDER)
• Проверять план выполнения запроса (EXPLAIN)
• Управление оптимизатором (принудительное использование индекса,
порядок соединения таблиц)
50. ACID
1.Atomicity – атомарность операций
2.Consistency – согласованность
3.Isolation – изоляция клиентов
4.Durability – гарантия сохранения после успешного
завершения операции
51. Транзакции
Транзакция – группа операций,
которые либо происходят все
вместе, либо не происходят
вообще
START TRANSACTION;
SELECT balance FROM checking WHERE customer_id = 10233276;
UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
COMMIT;
52. Транзакции
Уровни изоляции
Уровень
изоляции
Возможност Возможност Возможност Блокир
ь чернового ь
ь
овка
чтения
невоспроиз фантомного чтения
водимого
чтения
чтения
READ
UNCOMMITTED
Да
Да
Да
Нет
READ
COMMITTED
Нет
Да
Да
Нет
REPEATABLE
READ
Нет
Нет
Да
Нет
SERIALIZABLE
Нет
Нет
Нет
Да
54. Хранимые процедуры
Хранимая процедура – набор команд SQL, которые могут
компилироваться и храниться на сервере.
DELIMITER //
DROP PROCEDURE IF EXISTS p1//
CREATE PROCEDURE `p1` ()
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
COMMENT 'A procedure'
BEGIN
SELECT 'Hello World !';
END//
55. Триггеры
Триггер – программа, к которой обращается ядро СУБД до, и/или после
обрабатывания записи в таблице
CREATE TRIGGER add_count_comment AFTER INSERT ON comments
FOR EACH ROW BEGIN
UPDATE user SET user.countcomment= user.countcomment+1 WHERE
user.id = NEW.user_id;
UPDATE blog SET comment = comment+1 WHERE id = NEW.owner_id;
END
56. Репликация
Репликация — это процесс, под которым понимается копирование
данных из одного источника на множество других и наоборот.