Skip to content

Latest commit

 

History

History
89 lines (89 loc) · 12 KB

database.md

File metadata and controls

89 lines (89 loc) · 12 KB
  1. Оглавление
  2. Транзакции
    1. Проблемы выполнения параллельных транзакций
    2. Уровни изоляции транзакций
  3. ACID
  4. Индексы
  5. Блокировки
  6. ORM
  7. NoSQL
  8. Реляционные базы данных
  9. Нормальная форма
  10. Основные элементы яызка SQL
  11. Агрегатные функции
  12. Тригеры
  • Общее:
    • Транзакции: Последовательность из нескольких запросов, которые либо выполняются целиком и успешно, соблюдая целостность данных, либо не выполняются вовсе.
      • Проблемы выполнения параллельных транзакций:
        • Lost Update - при изменении одного блока данных разными транзакциями, теряются все данные, кроме последнего записаного.
        • Dirty Read - чтение данных, измененных транзакцией, которая в последствии не подтвердится (откат транзакции).
        • Non-Repeatable Read - при одинаковом запросе в рамках одной транзакции, данные могут быть изменены другой транзакцией.
        • Phantom Reads - при одинаковом запросе в рамках одной транзакции, другая транзакция может добавить новые данные.
      • Уровни изоляции транзакций:
        • Read uncommitted - параллельно исполняющиеся транзакции видят все изменения другой транзакации.
        • Read committed - пишущая транзакция блокирует изменяемые данные для читающих транзакций, до своего завершения. Читающая транзакция освобождает данные, по завершению чтения, поэтому при повторном чтении, данные могут быть изменены (Non-Repeatable Read).
        • Repeatable read - транзакция блокирует изменения читаемых данных, до своего завершения. При этом другие транзакции могут вставлять новые строки, что приводит к фантомным чтениям.
        • Serializable - транзакции полностью изолированы, блокируется запись, чтение и вставка любых данных, которые отвечают условию транзакции.
      • Синтаксис:
        • В PostgreSQL это блок запросов начинающийся с запроса BEGIN и заканчивающийся запросом COMMIT. Любая ошибка внутри транзакции откатит изменения, которые были сделаны после запроса BEGIN. При необходимости можно откатить изменения самостоятельно выполнив ROLLBACK до COMMIT.
    • ACID: Гарантии, которая должна давать база данных, чтобы поддерживать транзакции. Без деталий реализации.
      • Atomicity (Атомарность) - атомарность гарантирует, что каждая транзакция будет выполнена полностью или не будет выполнена совсем. Не допускаются промежуточные состояния. Например, при банковском переводе, если какая-либо транзакция произведёт списание, но не произведёт зачисления, то система останется в некорректном состоянии и свойство согласованности будет нарушено.
      • Consistency (Согласованность) - каждая успешная транзакция, фиксирует только допустимые данные. Это свойство соблюдается программистами, при написании кода транзакции.
      • Isolation (Изолированность) - во время выполнения транзакции, параллельные транзакции не должны оказывать влияния на её результат.
      • Durability (Надежность) - если транзакция завершена, то независимо от какого-либо сбоя, эти изменения не будут отменены. Данные сохраняются в энергонезависимую память.
    • Индексы: это специальная структура внутри базы данных, создаваемая для ускорения поиска. Представляет собой сбалансированное дерево (btree)
  • Реляционные базы данных: представляет собой набор таблиц (сущностей). Таблицы состоят из колонок и строк (кортежей). Между таблицами существуют отношения, которые формируются с помощью ключей (первичных и вторичных).
    • Ключи (Первичные, вторичные):
      • Первичный клююч - это поле или набор полей, которое содержит уникальное значение для каждой записи.
      • Внешний ключ (foreign key) - поле, которое связывает зависимую и подчиненную таблицу, указывая на один из столбцов главной таблицы, например на первичный ключ из главной таблицы.
    • Первая нормальная форма:
      • Каждая ячейка таблицы может хранить только одно значение
      • Все данные в одной колонке могут быть только одного типа
      • Каждая запись в таблице должна однозначно отличаться от других записей
    • Вторая нормальная форма:
      • Таблица должна быть в первой нормальной форме
      • Все атрибуты (не ключевые) таблицы должны зависеть от первичного ключа
    • Третья нормальная форма:
      • Таблица должна быть во второй нормальной форме
      • Все колонки в таблице зависят от первичного ключа и не зависят друг от друга
    • Виды связей:
      • Один ко многим -
      • Один к одному -
      • Многие ко многим -
  • Блокировки:
  • ORM:
  • NoSQL:
  • Основные элементы яызка SQL:
    • Агрегатные функции:
      • COUNT() - считает количество записей в выборке. SELECT COUNT(*) FROM users
        • Когда аргументом функции является *, она считает количество строк.
        • Если в неё передать имя конкретного поля, то она посчитает количество строк, в которых это поле НЕ равно NULL.
      • MAX/MIN - функции MAX и MIN позволяют находить максимальное и минимальное значение. SELECT MAX(birthday) FROM users WHERE gender = 'male'
      • SUM - сумма всех значений. SELECT SUM(amount) FROM orders WHERE created_at BETWEEN '2016-01-01' AND '2016-12-31'
      • AVG - среднее арифметическое всех значений. SELECT AVG(amount) FROM orders WHERE created_at BETWEEN '2016-01-01' AND '2016-12-31'
    • INSERT - вставка данных в таблицу. INSERT INTO courses (name, slug) VALUES ('Bash', 'bash')
    • UPDATE - обновление записей в таблице, в части где SET описывается какое значение установить в какое поле. UPDATE courses SET body = 'updated!' WHERE slug = 'bash'
    • DELETE - удаление данных из таблицы. DELETE FROM courses WHERE slug = 'bash';
      • TRUNCATE - предназначен для полной очистки таблицы, не описан в стандарте, но реализован в большинстве СУБД. TRUNCATE courses
    • SELECT - выборка данных из таблицы. SELECT * FROM users
    • ALTER - изменение структуры таблицы. ALTER TABLE users ADD COLUMN age int
      • ADD - добавление столбца.
      • RENAME - переименование столбца.
      • DROP - удаление столбца.
    • ORDER BY - отсортировать по возрастанию (ASC) или убыванию (DESC), например SELECT * FROM users ORDER BY created_at ASC. NULL считается больше любого значения, чтобы избежать этого можно добавить флаг NULLS FIRST/LAST
    • WHERE - логическое условие, например SELECT * FROM users WHERE id != 3.
      • Для диапазонов используется BETWEEN - SELECT * FROM users WHERE created_at BETWEEN '2018-01-01' AND '2018-10-05'
      • Для поиска значения, которое соответсвует одному значению из набора используется IN - SELECT * FROM users WHERE id IN (1, 2, 5)
      • Для поиска с частичным совпадением используется LIKE - SELECT * FROM users WHERE first_name LIKE 'A%'
    • LIMIT и OFFSET - позволяет брать определенный набор записей из таблицы, например 10 записей, начиная с 11 - SELECT * FROM users ORDER BY id LIMIT 10
    • DISTINCT - SELECT DISTINCT first_name FROM users. Убирает все дублирующие строки из результирующего набора.
      • DISTINCT ON -
    • GROUP BY -
    • HAVING -
    • JOIN -
      • INNER JOIN - в выборку попадают только те записи, для которых есть соответствие в таблице после ключевого слова JOIN.
      • LEFT JOIN - берет все данные из одной таблицы и присоединяет к ним данные из другой, если они присутствуют, иначе заполняет их NULL
      • RIGHT JOIN - обратно LEFT JOIN
  • Тригеры:
  • Репликация:
  • Шардирование: