Первая НФ - Все поля являются скалярными, не должно быть повторений
Вторая НФ - Все ключевые значения должны завесить от первичного ключа, т.е. набор ключевых значений должен быть уникальным
Третья НФ - Все ключевые и не ключевые значения должны завесить от первичного ключа
НФ Бойса-Кодда - Ключевые атрибуты составного ключа не должны зависеть от неключевых атрибутов
Четвертая НФ - В таблицах должны отсутствовать нетривиальные многозначные зависимости
Четвертая НФ - В таблицах должны отсутствовать нетривиальные многозначные зависимости
Пятая НФ - В таблице каждая нетривиальная зависимость соединения должна определяться потенциальным ключом этой таблицы.
Доменно-ключевая НФ - Каждое наложенное ограничение на таблицу должно являться логическим следствием ограничений доменов и ограничений ключей, которые накладываются на данную таблицу.
Шестая НФ - Таблица находится в 6NF, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь.
Вторая НФ - Все ключевые значения должны завесить от первичного ключа, т.е. набор ключевых значений должен быть уникальным
Третья НФ - Все ключевые и не ключевые значения должны завесить от первичного ключа
НФ Бойса-Кодда - Ключевые атрибуты составного ключа не должны зависеть от неключевых атрибутов
Четвертая НФ - В таблицах должны отсутствовать нетривиальные многозначные зависимости
Четвертая НФ - В таблицах должны отсутствовать нетривиальные многозначные зависимости
Пятая НФ - В таблице каждая нетривиальная зависимость соединения должна определяться потенциальным ключом этой таблицы.
Доменно-ключевая НФ - Каждое наложенное ограничение на таблицу должно являться логическим следствием ограничений доменов и ограничений ключей, которые накладываются на данную таблицу.
Шестая НФ - Таблица находится в 6NF, когда она неприводима, то есть не может быть подвергнута дальнейшей декомпозиции без потерь.
Это отхождение от правил нормализации бд, для повышения скорости доступа к данным. Например, в
highload проектах.
Кластерный индекс, вид индекса хранящегося вместе с данными, поэтому возможен только один
PK.
Обязательно уникальный, используется для ссылок.
Обязательно уникальный, используется для ссылок.
Транзакция — это набор операций по работе с базой данных (БД), объединенных в одну
атомарную
пачку.
Команды для работы с транзакциями в MySQL:
Уровни изоляции транзакций:
- Read uncommitted - плохая согласованность, но большая скорость выполнения. Каждая транзакция видит незафиксированные изменения другой транзакции (грязное чтение).
- Read committed - видны только зафиксированные действия (неповторяющееся чтение (чтение UPDATE и DELETE) и чтение фантомов (чтение INSERT))
- Repeatable read - Уровень, позволяющий предотвратить феномен неповторяющегося чтения. Т.е. мы не видим в исполняющейся транзакции измененные и удаленные записи другой транзакцией. Но все еще видим вставленные записи из другой транзакции.
- Serializable - Уровень, при котором транзакции ведут себя как будто ничего более не существует, никакого влияния друг на друга нет. В классическом представлении этот уровень избавляет от эффекта чтения фантомов.
Самый медленный режим работы
Команды для работы с транзакциями в MySQL:
BEGIN
, COMMIT
, ROLLBACK
.Уровни изоляции транзакций:
- Read uncommitted - плохая согласованность, но большая скорость выполнения. Каждая транзакция видит незафиксированные изменения другой транзакции (грязное чтение).
- Read committed - видны только зафиксированные действия (неповторяющееся чтение (чтение UPDATE и DELETE) и чтение фантомов (чтение INSERT))
- Repeatable read - Уровень, позволяющий предотвратить феномен неповторяющегося чтения. Т.е. мы не видим в исполняющейся транзакции измененные и удаленные записи другой транзакцией. Но все еще видим вставленные записи из другой транзакции.
- Serializable - Уровень, при котором транзакции ведут себя как будто ничего более не существует, никакого влияния друг на друга нет. В классическом представлении этот уровень избавляет от эффекта чтения фантомов.
Самый медленный режим работы
Atomicity — Атомарность - Атомарность гарантирует, что каждая транзакция будет выполнена
полностью или не будет выполнена совсем. Не допускаются промежуточные состояния.
Consistency — Согласованность - Благодаря тому, что транзакция не допускает промежуточных результатов, база остается консистентной. То есть до выполнения операции и после база остается консистентной
Isolation — Изолированность - Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.
Durability — Надёжность - Если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.
Consistency — Согласованность - Благодаря тому, что транзакция не допускает промежуточных результатов, база остается консистентной. То есть до выполнения операции и после база остается консистентной
Isolation — Изолированность - Во время выполнения транзакции параллельные транзакции не должны оказывать влияния на её результат.
Durability — Надёжность - Если пользователь получил подтверждение от системы, что транзакция выполнена, он может быть уверен, что сделанные им изменения не будут отменены из-за какого-либо сбоя.
Объект базы данных, создаваемый с целью повышения производительности поиска данных.
B-tree - сбалансированное дерево, каждый элемент представляет собой скалярное значение которое ссылается на первичный ключ. Каждое плечо в дереве может иметь несколько потомков.
Сложность выборки log(N)
Hash индекс - строит хэш таблицу на основание хэш функции, поваляет осуществлять быстрые выборки. Чаще всего применяется для индексирования строчных или двоичных данных.
Сложность выборки линейная
Пространственные индексы - Пространственный индекс представляет собой тип расширенного индекса, позволяющий индексировать пространственные столбцы. Пространственный столбец представляет собой столбец таблицы, в котором содержатся данные пространственного типа, например geometry или geography.
Bitmap - В bitmap-структурах создается двухмерный массив со столбцом для каждой строки в индексируемой таблице. Каждый столбец представляет отдельное значение в bitmap-индексе. Этот двухмерный массив показывает каждое значение индекса, умноженное на количество строк в этой таблице.
Особое преимущество bitmap-индексирования проявляется, когда одна таблица включает несколько bitmap-индексов. Мощность каждого столбца может быть невысокой. Создание нескольких bitmap-индексов предоставляет очень сильный подход для быстрого ответа на сложные SQL-запросы.
Составной индекс - Составным называют индекс, который: может включать более одного (до 16) столбцов, выступающих ключевыми значениями.
Покрывающие индексы - Покрывающими индексами называются некластеризованные индексы, которые разрешают один или несколько схожих результатов запроса напрямую, без доступа к базовой таблице и без уточняющих запросов.
B-tree - сбалансированное дерево, каждый элемент представляет собой скалярное значение которое ссылается на первичный ключ. Каждое плечо в дереве может иметь несколько потомков.
Сложность выборки log(N)
Hash индекс - строит хэш таблицу на основание хэш функции, поваляет осуществлять быстрые выборки. Чаще всего применяется для индексирования строчных или двоичных данных.
Сложность выборки линейная
Пространственные индексы - Пространственный индекс представляет собой тип расширенного индекса, позволяющий индексировать пространственные столбцы. Пространственный столбец представляет собой столбец таблицы, в котором содержатся данные пространственного типа, например geometry или geography.
Bitmap - В bitmap-структурах создается двухмерный массив со столбцом для каждой строки в индексируемой таблице. Каждый столбец представляет отдельное значение в bitmap-индексе. Этот двухмерный массив показывает каждое значение индекса, умноженное на количество строк в этой таблице.
Особое преимущество bitmap-индексирования проявляется, когда одна таблица включает несколько bitmap-индексов. Мощность каждого столбца может быть невысокой. Создание нескольких bitmap-индексов предоставляет очень сильный подход для быстрого ответа на сложные SQL-запросы.
Составной индекс - Составным называют индекс, который: может включать более одного (до 16) столбцов, выступающих ключевыми значениями.
Покрывающие индексы - Покрывающими индексами называются некластеризованные индексы, которые разрешают один или несколько схожих результатов запроса напрямую, без доступа к базовой таблице и без уточняющих запросов.
Механизм синхронизации содержимого нескольких копий объекта.
Master-master - репликация когда возможно писать сразу в несколько таблиц
Master-slave - репликация когда возможно читать сразу из несколько таблиц
Используется в основном slave репликация.
Назначение: повышение скорости или бэкап бд.
Slave хранят текущую позицию в мастер бд, после чего ходят в мастер и считывают из лога запросов отставшие от slave данные из мастера.
Master-master - репликация когда возможно писать сразу в несколько таблиц
Master-slave - репликация когда возможно читать сразу из несколько таблиц
Используется в основном slave репликация.
Назначение: повышение скорости или бэкап бд.
Slave хранят текущую позицию в мастер бд, после чего ходят в мастер и считывают из лога запросов отставшие от slave данные из мастера.
Партиционирование - это разбиение больших таблиц на логические части по выбранным
критериям.
В MySQL ключевое слово
В MySQL ключевое слово
PARTITION
, указывает условия по какому принципу будет
происходить партиционирование. Физически происходит разбивка на разные файлы по типа партиций и
запись данных по правилам в них.
Шардирование - это разделение данных из одной бд в разные.
Существует два принципа шардирования:
Существует два принципа шардирования:
- Шардирование по гео - т.е. мы разносим данные по серверам в зависимости от их геолокации
- Шардирование по типам данных - т.е. мы разносим данные по их связанности, например одна бд для товаров, другая для заказов
Для поиска медленных запросов нужно пройти следующий процесс:
- Проверить код на наличие ошибок (например запросы в цикле)
- Вычислить запрос который выполняется медленно
- Првоерить запрос при помощи EXPLAIN
- Если возможно добавить необходимы индексы
- Если это не поможет применить репликацию или шардирование