… многие отдали предпочтение реляционным системам баз данных, поскольку используемый в них
стандартизованный язык SQL открывал возможности безболезненного перехода от одной СУБД к другой. Хотя
воспользовались ими на практике только единицы, мысль о возможной смене поставщика СУБД, не связанной со
сколько-нибудь ощутимыми затратами, согревала всех.
Мартин Фаулер
NoSQL
Концепция Map-Reduce
Краткий обзор существующих решений
Tarantool
Контроль знаний
Экзамен ― это уникальная возможность для студента два раза в год узнать что-то полезное хотя бы на
несколько дней.
Заводны Дж, Шварц Б., Зайцев П.,
Ткаченко В., Ленц А. MySQL.
Оптимизация производительности
Саймон А. Р. Стратегические технологии баз данных
http://www.intuit.ru/catalog/database/
http://citforum.ru/database/
http://www.sql.ru/
http://www.mysql.com/
Определение БД
База данных (БД)
Зто взаимосвязанная информация (данные) об объектах, которая организованна специальным образом и хранится на
каком-либо носителе.
Реляционная модель данных
Целое
Строка
Целое
Типы данных
номер
имя
должность
деньги
Домены
Отношение
Табельный номер
Имя
Должность
Оклад
Премия
Аттрибуты
2934
Иванов
Инженер
112
40
Кортежи
2935
Петров
Вед. Инженер
144
50
2936
Сидоров
Бухгалтер
92
35
Ключ
Терминология
Домен
Тип данных, то есть допустимое множество значений.
Кортеж
Множество пар {имя атрибута, значение}, которое содержит одно вхождение каждого имени атрибута,
принадлежащего схеме отношения.
Отношение
Множество кортежей (не упорядоченное).
Целостность базы данных
Соответствие имеющейся в базе данных информации её внутренней логике, структуре и всем явно заданным
правилам.
Реляционная модель данных
Реляционная модель данных (РМД)
Логическая модель данных, прикладная теория построения баз данных, которая является приложением к
задачам обработки данных таких разделов математики как теории множеств и логика первого порядка.
Реляционная модель данных включает следующие компоненты:
Структурный аспект (составляющая)
Данные в базе данных представляют собой набор отношений.
Аспект (составляющая) целостности
Отношения (таблицы) отвечают определенным условиям целостности. РМД поддерживает декларативные
ограничения целостности уровня домена (типа данных), уровня отношения и уровня базы данных.
Аспект (составляющая) обработки (манипулирования)
РМД поддерживает операторы манипулирования отношениями (реляционная алгебра, реляционное исчисление).
Реляционная алгебра
Эдгар Франк «Тед» Кодд
Выборка
Проекция
Объединение
Пересечение
Разность
Произведение
Деление
Соединение
Выборка (A WHERE c)
Персоны
Имя
Возраст
Вес
Harry
34
80
Donald
29
70
Helena
54
54
Peter
34
80
`sigma_("Возраст" >= 34)("Персоны")`
Имя
Возраст
Вес
Harry
34
80
Helena
54
54
Peter
34
80
Проекция (PROJECT A {x, y, …, z})
Персоны
Имя
Возраст
Вес
Harry
34
80
Donald
29
70
Helena
54
54
Peter
34
80
`Pi_("Возраст", "Вес")("Персоны")`
Возраст
Вес
29
70
54
54
34
80
Объединение (A UNION B)
Персоны
Имя
Возраст
Вес
Harry
34
80
Donald
29
70
Helena
54
54
Peter
34
80
Персонажи
Имя
Возраст
Вес
Daffy
24
19
Donald
29
70
Scrooge
81
27
`"Персоны" uu "Персонажи"`
Имя
Возраст
Вес
Harry
34
80
Donald
29
70
Helena
54
54
Peter
34
80
Daffy
24
19
Scrooge
81
27
Пересечение (A INTERSECT B)
Персоны
Имя
Возраст
Вес
Harry
34
80
Donald
29
70
Helena
54
54
Peter
34
80
Персонажи
Имя
Возраст
Вес
Daffy
24
19
Donald
29
70
Scrooge
81
27
`"Персоны" nn "Персонажи"`
Имя
Возраст
Вес
Donald
29
70
Разность (A MINUS B)
Персоны
Имя
Возраст
Вес
Harry
34
80
Donald
29
70
Helena
54
54
Peter
34
80
Персонажи
Имя
Возраст
Вес
Daffy
24
19
Donald
29
70
Scrooge
81
27
`"Персоны" \\ "Персонажи"`
Имя
Возраст
Вес
Harry
34
80
Helena
54
54
Peter
34
80
Произведение (A TIMES B)
Мультфильмы
Код_Мульта
Название_Мульта
1
The Simpsons
2
Family Guy
3
Duck Tales
Каналы
Код_Канала
Название_Канала
1
СТС
2
2x2
`"Мультфильмы" xx "Каналы"`
Код_Мульта
Название_Мульта
Код_Канала
Название_Канала
1
The Simpsons
1
СТС
2
Family Guy
1
СТС
3
Duck Tales
1
СТС
1
The Simpsons
2
2x2
2
Family Guy
2
2x2
3
Duck Tales
2
2x2
Деление (A DIVIDEBY B)
Мультфильмы
Код_Мульта
Название_Мульта
Название_Канала
1
The Simpsons
RenTV
1
The Simpsons
2x2
1
The Simpsons
СТС
2
Family Guy
RenTV
2
Family Guy
2x2
3
Duck Tales
СТС
3
Duck Tales
2x2
Каналы
Название_Канала
RenTV
2x2
`"Мультфильмы" -: "Каналы"`
Код_Мульта
Название_Мульта
1
The Simpsons
2
Family Guy
Соединение ((A TIMES B) WHERE P)
Мультфильмы
Код_Мульта
Название_Мульта
Название_Канала
1
The Simpsons
2x2
2
Family Guy
2x2
3
Duck Tales
RenTV
Каналы
Код_Канала
Частота
RenTV
3.1415
2x2
783.25
`"Мультфильмы" ⋈ "Каналы"`
Код_Мульта
Название_Мульта
Название_Канала
Код_Канала
Частота
1
The Simpsons
2x2
2x2
783.25
2
Family Guy
2x2
2x2
783.25
3
Duck Tales
RenTV
RenTV
3.1415
Деление (A DIVIDEBY B)
Мультфильмы
Код_Мульта
Название_Мульта
Название_Канала
1
The Simpsons
RenTV
1
The Simpsons
2x2
1
The Simpsons
СТС
2
Family Guy
RenTV
2
Family Guy
2x2
3
Duck Tales
СТС
3
Duck Tales
2x2
Каналы
Название_Канала
RenTV
2x2
`"Мультфильмы" -: "Каналы"`
Код_Мульта
Название_Мульта
1
The Simpsons
2
Family Guy
Проектирования БД
Проектирование баз данных
Процесс создания схемы базы данных и определения необходимых ограничений целостности.
Основные задачи
Обеспечение хранения в БД всей необходимой информации.
Обеспечение возможности получения данных по всем необходимым запросам.
Сокращение избыточности и дублирования данных.
Обеспечение целостности данных (правильности их содержания): исключение противоречий в содержании данных,
исключение их потери и т.д.
Сложная система, спроектированная наспех, никогда не работает, и исправить ее, чтобы заставить
работать, невозможно.
Законы Мерфи. 16-й закон систематики
Особенности концептуального проектирования
Трудно что-либо предвидеть, а уж особенно будущее.
Нильс Бор
Максимум командной работы;
Привлечение наиболее опытных специалистов;
Заглядываем в будущее.
Этапы проектирования
Внешнее представление (внешняя схема) данных
Совокупностью требований со стороны конкретной функции, выполняемой пользователем.
Концептуальная схема
Полная совокупностью всех требований к данным, полученной из пользовательских представлений о реальном
мире.
Внутренняя схема
Сама база данных.
Инфологическое проектирование
Концептуальное (инфологическое) проектирование
Построение семантической модели предметной области, то есть информационной модели наиболее высокого уровня
абстракции.
сущности
атрибуты
связи
Логическое проектирование
Логическое (даталогическое) проектирование
Создание схемы базы данных на основе конкретной модели данных, например, реляционной модели данных.
В реляционной модели данных — подмножество атрибутов отношения, удовлетворяющее требованиям уникальности
и минимальности (несократимости).
Уникальность означает, что не существует двух кортежей данного отношения, в которых значения
этого подмножества атрибутов совпадают (равны).
Минимальность (несократимость) означает, что в составе потенциального ключа отсутствует
меньшее подмножество атрибутов, удовлетворяющее условию уникальности. Иными словами, если из
потенциального ключа убрать любой атрибут, он утратит свойство уникальности.
Первичный ключ (англ. primary key)
В реляционной модели данных один из потенциальных ключей отношения, выбранный в качестве основного ключа
(или ключа по умолчанию).
Если в отношении имеется единственный потенциальный ключ, он является и первичным ключом. Если
потенциальных ключей несколько, один из них выбирается в качестве первичного, а другие называют
«альтернативными».
Структура таблицы тем
Заголовок
Дата
Автор
E-Mail
Текст
Оценка
Ответы
Руслан и Людмила
01.01.1820
Пушкин А.С.
sukin_syn@mail.ru
…
500
120
Война и Мир
01.03.1869
Толстой Л.Н.
tolstoy@inbox.ru
…
100
345
Отцы и Дети
15.08.1862
Иван Тургенев
nedobobov@mail.ru
…
256
18
Повести Белкина
12.06.1830
Пушкин А.С.
sukin_syn@mail.ru
…
400
96
Муму
10.11.1852
Иван Тургенев
nedobobov@mail.ru
…
312
46
Первичный ключ
Первичный ключ выбирается исходя из соображений удобства и сохранения уникальности. Если такого ключа нет, то
имеет смысл добавить специальное поле.
TopicID
Заголовок
Дата
Автор
E-Mail
Текст
Оценка
Ответы
5
Руслан и Людмила
01.01.1820
Пушкин А.С.
sukin_syn@mail.ru
…
500
120
8
Война и Мир
01.03.1869
Толстой Л.Н.
tolstoy@inbox.ru
…
100
345
12
Отцы и Дети
15.08.1862
Иван Тургенев
nedobobov@mail.ru
…
256
18
43
Повести Белкина
12.06.1830
Пушкин А.С.
sukin_syn@mail.ru
…
400
96
16
Муму
10.11.1852
Иван Тургенев
nedobobov@mail.ru
…
312
46
Справочник пользователей
Нормальная форма
Свойство отношения в реляционной модели данных, характеризующее его с точки зрения избыточности,
потенциально приводящей к логически ошибочным результатам выборки или изменения данных. Нормальная форма
определяется как совокупность требований, которым должно удовлетворять отношение.
E-Mail
Пароль
Имя
Дата
Привилегии
Разделы
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Админ, Модератор
Новости, Флуд
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
Модератор
Флуд, Юмор
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
Игрок
E-Mail
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
Админ
Поэзия
1-ая нормальная форма
Переменная отношения находится в первой нормальной форме (1НФ) тогда и только тогда, когда
в любом допустимом значении отношения каждый его кортеж содержит только одно значение для каждого из атрибутов.
E-Mail
Пароль
Имя
Дата
Привилегии
Разделы
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Админ, Модератор
Новости, Флуд
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
Модератор
Флуд, Юмор
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
Игрок
E-Mail
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
Админ
Поэзия
1-ая нормальная форма
Переменная отношения находится в первой нормальной форме (1НФ) тогда и только тогда, когда
в любом допустимом значении отношения каждый его кортеж содержит только одно значение для каждого из атрибутов.
E-Mail
Пароль
Имя
Дата
Привилегии
Разделы
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Админ
Новости
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Админ
Флуд
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Модератор
Новости
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Модератор
Флуд
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
Модератор
Флуд
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
Модератор
Юмор
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
Игрок
E-Mail
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
Админ
Поэзия
2-ая нормальная форма
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она
находится в первой нормальной форме, и каждый неключевой атрибут неприводимо зависит от ее потенциального ключа.
E-Mail
Пароль
Имя
Дата
Привилегии
Разделы
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Админ
Новости
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Админ
Флуд
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Модератор
Новости
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
Модератор
Флуд
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
Модератор
Флуд
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
Модератор
Юмор
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
Игрок
E-Mail
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
Админ
Поэзия
2-ая нормальная форма
Переменная отношения находится во второй нормальной форме тогда и только тогда, когда она
находится в первой нормальной форме, и каждый неключевой атрибут неприводимо зависит от ее потенциального ключа.
E-Mail
Пароль
Имя
Дата
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
E-Mail
Привилегии
Разделы
tolstoy@mail.ru
Админ
Новости
tolstoy@mail.ru
Админ
Флуд
tolstoy@mail.ru
Модератор
Новости
tolstoy@mail.ru
Модератор
Флуд
saltykov@inbox.ru
Модератор
Флуд
saltykov@inbox.ru
Модератор
Юмор
fmd@mail.ru
Игрок
E-Mail
sukin_syn@mail.ru
Админ
Поэзия
3-я нормальная форма
Переменная отношения находится в третьей нормальной форме, когда она находится во второй
нормальной форме, и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от ключевых.
TopicId
Заголовок
Дата
E-Mail
Автор
5
Руслан и Людмила
01.01.1820
sukin_syn@mail.ru
Пушкин А.С.
8
Война и Мир
01.03.1869
tolstoy@inbox.ru
Толстой Л.Н.
12
Отцы и Дети
15.08.1862
nedobobov@mail.ru
Иван Тургенев
43
Повести Белкина
12.06.1830
sukin_syn@mail.ru
Пушкин А.С.
16
Муму
10.11.1852
nedobobov@mail.ru
Иван Тургенев
3-я нормальная форма
Переменная отношения находится в третьей нормальной форме, когда она находится во второй
нормальной форме, и отсутствуют транзитивные функциональные зависимости неключевых атрибутов от ключевых.
E-Mail
Автор
sukin_syn@mail.ru
Пушкин А.С.
tolstoy@inbox.ru
Толстой Л.Н.
nedobobov@mail.ru
Иван Тургенев
TopicID
Заголовок
Дата
Автор
E-Mail
Текст
Оценка
Ответы
5
Руслан и Людмила
01.01.1820
Пушкин А.С.
sukin_syn@mail.ru
…
500
120
8
Война и Мир
01.03.1869
Толстой Л.Н.
tolstoy@inbox.ru
…
100
345
12
Отцы и Дети
15.08.1862
Иван Тургенев
nedobobov@mail.ru
…
256
18
43
Повести Белкина
12.06.1830
Пушкин А.С.
sukin_syn@mail.ru
…
400
96
16
Муму
10.11.1852
Иван Тургенев
nedobobov@mail.ru
…
312
46
4-ая нормальная форма
Переменная отношения находится в четвёртой нормальной форме, если она находится в третьей
нормальной форме и не содержит нетривиальных многозначных зависимостей.
E-Mail
Привилегии
Разделы
tolstoy@mail.ru
Админ
Новости
tolstoy@mail.ru
Админ
Флуд
tolstoy@mail.ru
Модератор
Новости
tolstoy@mail.ru
Модератор
Флуд
saltykov@inbox.ru
Модератор
Флуд
saltykov@inbox.ru
Модератор
Юмор
fmd@mail.ru
Игрок
E-Mail
sukin_syn@mail.ru
Админ
Поэзия
4-ая нормальная форма
Переменная отношения находится в четвёртой нормальной форме, если она находится в третьей
нормальной форме и не содержит нетривиальных многозначных зависимостей.
E-Mail
Привилегии
tolstoy@mail.ru
Админ
tolstoy@mail.ru
Модератор
saltykov@inbox.ru
Модератор
fmd@mail.ru
Игрок
sukin_syn@mail.ru
Админ
E-Mail
Разделы
tolstoy@mail.ru
Новости
tolstoy@mail.ru
Флуд
saltykov@inbox.ru
Флуд
saltykov@inbox.ru
Юмор
fmd@mail.ru
E-Mail
sukin_syn@mail.ru
Поэзия
Суррогатный ключ
Даже при наличии естественного ключа добавление суррогатного в большинстве случаев
оправдано.
E-Mail
Пароль
Имя
Дата
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
E-Mail
Привилегии
tolstoy@mail.ru
Админ
tolstoy@mail.ru
Модератор
saltykov@inbox.ru
Модератор
fmd@mail.ru
Игрок
sukin_syn@mail.ru
Админ
E-Mail
Разделы
tolstoy@mail.ru
Новости
tolstoy@mail.ru
Флуд
saltykov@inbox.ru
Флуд
saltykov@inbox.ru
Юмор
fmd@mail.ru
E-Mail
sukin_syn@mail.ru
Поэзия
Суррогатный ключ
Даже при наличии естественного ключа добавление суррогатного в большинстве случаев
оправдано.
UserID
E-Mail
Пароль
Имя
Дата
12
tolstoy@mail.ru
*****
Толстой Л.Н.
09.09.1828
48
saltykov@inbox.ru
*****
Николай Щедрин
27.01.1826
543
fmd@mail.ru
*****
Федор Михайлович
11.11.1821
5
sukin_syn@mail.ru
*****
Пушкин А.С.
06.06.1799
UserID
Привилегии
12
Админ
12
Модератор
48
Модератор
543
Игрок
5
Админ
UserID
Разделы
12
Новости
12
Флуд
48
Флуд
48
Юмор
543
E-Mail
5
Поэзия
Реляционная часть
один-к-одному (1:1)
один-ко-многим (1:M)
многие-к-одному (M:1)
многие-ко-многим (M:N)
Типы данных MySQL
Числовые
Строковые
Календарные
NULL
NULL
SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
1 = NULL
1 <> NULL
1 < NULL
1 > NULL
SELECT 1 IS NULL, 1 IS NOT NULL, NULL IS NULL, NULL IS NOT NULL;
1 IS NULL
1 IS NOT NULL
NULL IS NULL
NULL IS NOT NULL
0
1
1
0
Целые числа
Тип столбца, поля
Обьем занимаемой памяти
Диапазон допустимых значений
TINYINT [ (M) ]
1 байт
От -128 до 127
От 0 до 255
SMALLINT [ (M) ]
2 байта
От -32768 до 32767
От 0 до 65535
MEDIUM INT [ (M) ]
3 байта
От -8388608 до 8388608
От 0 до 16777215
INT [ (M) ]
4 байта
От -2147683648 до 2147683648
От 0 до 4294967295
BIGINT [ (M) ]
8 байт
От -263 до 263 -1
От 0 до 264
Числа с плавающей точкой
Тип столбца, поля
Обьем занимаемой памяти
Диапазон допустимых значений
DECIMAL [ (M [, D ] ) ],
DEC [ (M [, D ] ) ],
NUMERUC [ (M [, D ] ) ]
4 байта на 9 цифр
Повышенная точность до 65 цифр
FLOAT [ (M, D) ]
4 байта
-3.402823466E+38
до -1.175494351E-38
0
1.175494351E-38
до 3.402823466E+38
IF NOT EXISTS
(
SELECT *
FROM information_schema.tables
WHERE table_name = 'myTable'
AND table_schema = 'myDb'
)
THEN
CREATE TABLE myTable
(
id INT(10) NOT NULL,
myField VARCHAR(255) NULL,
PRIMARY KEY(id)
);
END IF;
Метод идемпотентных изменений
Очень удобное выполнение миграций с любой промежуточной версии до последней — нужно
всего лишь выполнить на базе данных один файл (Changes.sql)
Потенциально возможны ситуации, в которых будут теряться данные, за этим придется
следить.
Для того, чтобы изменения были идемпотентными, нужно потратить больше времени (и кода)
на их написание.
Генерация БД на базе исходного кода
Удобно наблюдать изменения в структуре между версиями при помощи средств системы
контроля версий;
Как и любой исходный код, структуру БД удобно комментировать;
Для того, чтобы с нуля создать чистую базу данных последней версии, нужно выполнить
всего лишь один файл;
Скрипты-миграции более надежны, чем в других методах, так как генерируются
автоматически;
Мигрировать с новых версий на старые почти так же просто, как со старых на новые
(проблемы могут возникнуть только с пресловутыми изменениями данных);
В случае слияния двух веток репозитория, merge структуры БД осуществляется проще, чем
при использовании других подходов;
Изменения данных придется хранить отдельно, и затем вручную вставлять в
сгенерированные скрипты-миграции;
Вручную выполнять миграции очень неудобно, необходимы автоматизированные средства.