832.96K
AI
Category: databasedatabase

Особенности реляционных СУБД

1.

СУБД
·
ТЕМА 5
Особенности
реляционных СУБД
Как устроены таблицы, связи
и транзакции
Иванов Никита
2 курс, группа ПМ25

2.

ГРАНИЦЫ ТЕМЫ
О чём доклад
Тема узкая. Если пойти в историю, в формулы и в сравнение моделей, получится сразу три доклада.
Сюда не сворачиваю
О чём буду говорить
историю баз, от файлов до облака
как данные лежат в таблицах и ссылаются
друг на друга
формулы реляционной алгебры
какие правила не дают этим ссылкам
развалиться
сравнение с объектными моделями
что система делает с запросом и с
транзакцией
Иванов Никита · 2 курс, ПМ25
2 / 12

3.

МОДЕЛЬ
Идея реляционной модели
Эдгар Кодд, 1970 год.
До этой модели программа часто сама знала дорогу к записи:
какой файл открыть, какая запись родительская, по какой ссылке
идти дальше. Хранение менялось — приходилось переписывать
и обход.
Было
Программа знает
маршрут до строки
В реляционной модели описывают, какие данные нужны. Как
строки разложены по диску, решает уже СУБД.
Стало
Программа описывает
результат
Иванов Никита · 2 курс, ПМ25
3 / 12

4.

ТАБЛИЦЫ
Из чего состоит таблица
множество строк. В разговоре его и
называют таблицей.
Группы
id
название
курс
Кортеж
одна строка.
1
ПМ25
2
Атрибут
столбец.
зачётка
фамилия
группа_id
101
Козлов
1
102
Иванова
1
Отношение
Студенты
Домен
какие значения столбцу разрешены. У
оценки это 2, 3, 4 и 5.
группа_id → группы.id
В модели порядок строк не важен и повторов нет. В живой таблице порядок на экране есть, а дубликаты возможны, пока их
сами не запретили.
Иванов Никита · 2 курс, ПМ25
4 / 12

5.

КЛЮЧИ
Ключ — это не фамилия
Первичный
Однозначно находит строку и пустым не бывает. Номер зачётки
подходит. Фамилия — нет: одинаковых хватает.
Кандидат
Тоже может не повторяться: почта, паспорт, СНИЛС. Главным
оставляют один ключ, остальные просто уникальны.
Внешний
Столбец этой таблицы, который показывает на первичный ключ
соседней. У студента так записан номер группы.
Иванов Никита · 2 курс, ПМ25
5 / 12

6.

СВЯЗИ
Как таблицы связаны
Один ко многим пишется внешним ключом. Многие ко многим без третьей таблицы не запишешь.
Группы
id
Студенты
PK
название
1→*
курс
зачётка
Оценки
PK
1→*
фамилия
группа_id
FK
Предметы
студент_id
PK FK
предмет_id
PK FK
оценка
*→1
id
PK
название
часы
ключ составной
1:1
1:N
M:N
Реже. Длинную анкету выносят отдельно,
чтобы основная таблица не распухала.
Обычный случай. Группа одна, студентов
много. Списком внутри группы их не
хранят.
Студент и предметы. Связь — это таблица
«Оценки», а не список в одной ячейке.
PK — первичный ключ, FK — внешний
Иванов Никита · 2 курс, ПМ25
6 / 12

7.

ОГРАНИЧЕНИЯ
Почему битую строку база не примет
01
02
03
Сущность
Ссылка
Домен
У строки есть первичный ключ, и
он не NULL. Без него её потом не
найти.
Внешний ключ либо пустой, если
пустоту разрешили, либо
показывает на существующую
строку.
Значение из допустимого набора.
Оценку можно зажать проверкой:
только 2, 3, 4 или 5.
Пример с удалением
Удаляете группу ПМ25, а в «Студентах» на неё ещё есть строки. База не оставит эти номера висеть.
Сработает правило, которое задали заранее: запрет, обнуление ссылки или каскад. Каскад ставят, только если
зависимые строки правда нужно стереть вместе. Чаще оставляют запрет.
Иванов Никита · 2 курс, ПМ25
7 / 12

8.

SQL
В запросе нет цикла
SELECT фамилия
FROM студенты
WHERE группа = 'ПМ25';
Описан результат, а не путь к нему. Какой файл открыть и с какой
строки начать, в запросе не написано.
План выбирает оптимизатор: смотрит статистику и индексы. Тот же
текст в сентябре и в мае может выполняться по-разному, если данных
стало сильно больше.
WHERE, список столбцов и JOIN — это выборка, проекция и
соединение. В формулы алгебры сегодня не ухожу.
Иванов Никита · 2 курс, ПМ25
Столбцы на слайде по-русски,
чтобы был виден смысл.
8 / 12

9.

ТРАНЗАКЦИИ
Несколько правок — одна работа
Записать студента в группу и занять место. Если место не занялось, студент не должен остаться записанным в
одиночку.
A
C
I
D
Атомарность
Согласованность
Изоляция
Долговечность
Оба шага или ни одного.
Не вышло — откат
возвращает всё, как было.
После фиксации ключи и
ограничения снова
выполнены.
Сосед не читает
незаконченную запись.
Насколько жёстко —
зависит от уровня.
После подтверждения
запись переживает сбой.
Её держит журнал.
Иванов Никита · 2 курс, ПМ25
9 / 12

10.

УЖЕ ПРО СИСТЕМУ
Что добавляет сама СУБД
Независимость данных
Снаружи таблицы. Внутри файлы, страницы, индексы. Индекс можно
добавить, не переписывая старые запросы. Большую смену схемы это всё
равно не делает лёгкой.
Представление
View — сохранённый запрос, который открывается как таблица. Данные
второй раз не копируются. Можно отдать только студентов ПМ25.
Индекс
Ускоряет поиск и соединения. Замедляет запись, потому что индекс тоже
надо поправить. На каждый столбец его не вешают.
Иванов Никита · 2 курс, ПМ25
Журнал и файлы — физическая
сторона. Запрос про неё
знать не обязан.
10 / 12

11.

НА ПРАКТИКЕ
Где ей место, а где нет
Здесь она уместна
Здесь уже тесно
данные одной формы: учёт, заказы, кадры,
расписание, счета
записи разной формы, схему меняют постоянно
один факт хранится один раз, название группы не
копируют в каждую строку
сильная вложенность раскладывается на много
связей, запросы пухнут
ошибку ловит в момент записи, а не месяц спустя
в отчёте
объект в программе и набор таблиц — не одно и
то же
операцию нельзя оставлять наполовину
сделанной
NULL — не ноль и не пустая строка. Сравнение с
ним не даёт ни «да», ни «нет»
Иванов Никита · 2 курс, ПМ25
11 / 12

12.

ИТОГ
Если оставить одну фразу
Реляционная СУБД хранит связанные таблицы, сама проверяет правила,
на запрос отвечает как на работу с множеством строк и проводит
несколько изменений одной транзакцией.
PostgreSQL
·
MySQL и MariaDB
·
SQLite
·
SQL Server
·
Oracle
Синтаксис разный, устройство одно. SQLite вообще лежит одним файлом — и тоже реляционная.
Опора: Э. Кодд, 1970; К. Дейт, «Введение в системы баз данных»; документация PostgreSQL.
Иванов Никита, 2 курс, ПМ25
Иванов Никита · 2 курс, ПМ25
12 / 12
English     Русский Rules