СУБД. Лекция 1

СУБД
Навроцкий Артем
Лекция 1

Знакомство и основы проектирования БД

Интересные факты

Стоимость типовых операций

Стоимость операции нс (ns) мкс (µs) мс (ms)
Получение значения из L1 0.5
Ошибка предсказания перехода в CPU 5
Получение значения из L2 7
Mutex lock/unlock 25
Получение значения из RAM 100
Сжатие 1Кб методом Zippy 3 000 3
Отправка 1Кб через 1Гбит/сек сеть 10 000 10
Чтение 4Кб с SSD (случайный доступ) 150 000 150
Чтение 1Мб из RAM (последовательный доступ) 250 000 250
Round trip внутри одного датацентра 500 000 500
Чтение 1Мб из SSD (последовательный доступ) 1 000 000 1 000 1
Позиционирование HDD 10 000 000 10 000 10
Чтение 1Мб из HDD (последовательный доступ) 20 000 000 20 000 20
Round trip между США и Нидерландами 150 000 000 150 000 150
https://gist.github.com/jboner/2841832

Задача курса

Проектирование и диаграммы

SQL

Оптимизация

“Ну и запросы у вас”, - сказала база данных и повисла.

Администрирование

На моей работе самая страшная фраза это: “ребята, за какую дату у нас есть бэкап базы данных?”
© bash.im

Реляционные БД

… многие отдали предпочтение реляционным системам баз данных, поскольку используемый в них стандартизованный язык SQL открывал возможности безболезненного перехода от одной СУБД к другой. Хотя воспользовались ими на практике только единицы, мысль о возможной смене поставщика СУБД, не связанной со сколько-нибудь ощутимыми затратами, согревала всех.
Мартин Фаулер

NoSQL

Контроль знаний

Экзамен ― это уникальная возможность для студента два раза в год узнать что-то полезное хотя бы на несколько дней.
© Французский бизнесмен и творческая личность Джордж Элгози

Литература

Определение БД

База данных (БД)
Зто взаимосвязанная информация (данные) об объектах, которая организованна специальным образом и хранится на каком-либо носителе.

Реляционная модель данных

Целое Строка Целое Типы данных
номер имя должность деньги Домены
Отношение
Табельный номер Имя Должность Оклад Премия Аттрибуты
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-й закон систематики

Особенности концептуального проектирования

Трудно что-либо предвидеть, а уж особенно будущее.
Нильс Бор

Этапы проектирования

Внешнее представление (внешняя схема) данных
Совокупностью требований со стороны конкретной функции, выполняемой пользователем.
Концептуальная схема
Полная совокупностью всех требований к данным, полученной из пользовательских представлений о реальном мире.
Внутренняя схема
Сама база данных.

Инфологическое проектирование

Концептуальное (инфологическое) проектирование
Построение семантической модели предметной области, то есть информационной модели наиболее высокого уровня абстракции.

Логическое проектирование

Логическое (даталогическое) проектирование
Создание схемы базы данных на основе конкретной модели данных, например, реляционной модели данных.

Физическое проектирование

Физическое проектирование
Создание схемы базы данных для конкретной СУБД.

Почему проект БД может быть плохим?

Блюдо Вид Дата Продукт Калорийность Вес (г) Поставщик Город Страна Цена ($)
Лобио Закуска 01.09.2012 Фасоль 307 200 "Хуанхэ" Пекин Китай 0.37
      Лук 45 40 "Наталка" Киев Украина 0.52
      Масло 742 30 "Лайма" Рига Латвия 1.55
      Зелень 18 10 "Даугава" Рига Латвия 0.99
Борщ Суп 01.09.2012 Мясо 166 80 "Наталка" Киев Украина 2.18
      Лук 45 30 "Наталка" Киев Украина 0.52
      Томаты 24 40 "Полесье" Киев Украина 0.45
      Рис 334 50 "Хуанхэ" Пекин Китай 0.44
      Масло 742 15 "Полесье" Киев Украина 1.62
      Зелень 18 15 "Наталка" Киев Украина 0.88
  1. Избыточность
  2. Потенциальная противоречивость
    (аномалии обновления)
  3. Аномалии включения
  4. Аномалии удаления

Концептуальное проектирование

Выявление сущностей и связей

Первичный ключ

Потенциальный ключ

В реляционной модели данных — подмножество атрибутов отношения, удовлетворяющее требованиям уникальности и минимальности (несократимости).

Уникальность означает, что не существует двух кортежей данного отношения, в которых значения этого подмножества атрибутов совпадают (равны).

Минимальность (несократимость) означает, что в составе потенциального ключа отсутствует меньшее подмножество атрибутов, удовлетворяющее условию уникальности. Иными словами, если из потенциального ключа убрать любой атрибут, он утратит свойство уникальности.

Первичный ключ (англ. 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 Поэзия

Реляционная часть

Типы данных MySQL

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
DOUBLE [ (M, D) ],
REAL [ (M, D) ],
DOUBLE PRECISION [ (M, D) ]
8 байт -1.7976931348623157E+308
до -2.2250738585072014E-308
0
2.2250738585072014E-308
до 1.7976931348623157E+308

Бинарные

Тип столбца, поля Обьем занимаемой памяти Диапазон допустимых значений
BIT [ (M) ] (M + 7) / 8 байт От 1 до 64 бита, в зависимости от M
BOOLEAN [ (M) ] 1 байт 0 или 1

Строки

Тип столбца, поля Обьем занимаемой памяти Диапазон допустимых значений
CHAR (M) M M символов
VARCHAR (M) L + 1 M символов
TINYBLOB, TINYTEXT L + 1 28 - 1 символов
BLOB, TEXT L + 2 216 - 1 символов
MEDIUMBLOB, MEDIUMTEXT L + 3 224 - 1 символов
LONGBLOB, LONGTEXT L + 4 2(32) — 1 символов
ENUM ('value1', 'value2',...) 1 или 2 65 536 элементов
SET ('value1', 'value2',...) 1,2,3,4 или 8 64 элемента

Дата и время

Тип столбца, поля Обьем занимаемой памяти Диапазон допустимых значений
DATE 3 байта От "1000-01-01" до "9999-12-31"
TIME 3 байта От "-828:59:59" до "828:59:59"
DATATIME 8 байт От "1000-01-01 00:00:00"
до "9999-12-31 59:59:59"
TIMESTAMP 4 байта От "1970-01-01 00:00:00"
до "2038-12-31 59:59:59"
"0000-00-00 00:00:00"
YEAR 1 байт От 1901 до 2155 для YEAR (4)
От 1970 до 2069 для YEAR (2)

TIMESTAMP и DATETIME по разному работают с временными зонами.

TIMESTAMP по-умолчанию автоматически обновляется при изменении кортежа.

Версионирование схемы БД

Хотелки:

Метод инкрементных изменений

Database
|- Baseline.sql
|- 0001.03.01.sql
|- 0002.03.01.sql
|- 0003.03.01.sql
|- 0004.03.02.sql
|- 0005.03.02.sql
|- 0006.03.02.sql
|- 0007.03.02.sql
CREATE TABLE MigrationHistory (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    MajorVersion VARCHAR(2),
    MinorVersion VARCHAR(2),
    FileNumber   VARCHAR(4),
    Description  VARCHAR(255),
    DateApplied  TIMESTAMP
);

INSERT INTO MigrationHistory (MajorVersion, MinorVersion, FileNumber, Description, DateApplied)
VALUES ('03', '01', '0000', 'Baseline', NOW());

INSERT INTO MigrationHistory (MajorVersion, MinorVersion, FileNumber, Description, DateApplied)
VALUES ('03', '01', '0001', 'Update users table', NOW());

Метод инкрементных изменений

Метод идемпотентных изменений

Database
 |- 3.01
 |   |- Baseline.sql
 |   | - Changes.sql
 |
 | - 3.02
     |- Baseline.sql
     |- Changes.sql
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;

Метод идемпотентных изменений

Генерация БД на базе исходного кода

Навроцкий Артем
@gent: navrotskiy@corp.mail.ru
Спасибо за внимание!