Курс Информатика

Базы данных:
от идеи до архитектуры

База данных — это просто организованное хранилище информации. Как шкаф с папками: каждая папка — тема, внутри — листы с записями. Только вместо папок — файлы на сервере, а вместо библиотекаря — система управления, которая мгновенно находит нужное.

Раздел 01

Зачем нужны базы данных?

Без баз данных придётся хранить информацию в текстовых файлах, таблицах или «в голове». Это медленно, ненадёжно и масштабируется плохо.

Объяснение простым языком

Представьте, что вы ведёте журнал оценок в тетради. Всё работает, пока студентов 20. А когда их 20 000? А когда нужны оценки по 50 предметам? А когда родитель хочет посмотреть средний балл за семестр? Тетрадь ломается. База данных — это тетрадь, которая не ломается никогда, потому что за неё отвечает компьютерная программа (СУБД — система управления базой данных), которая умеет искать, считать, обновлять и защищать данные.

Централизация

Все данные в одном месте. Нет дублей в разных файлах, нет «версий правды». Один источник информации, доступный всем нужным программам.

Быстрый поиск

Вместо «перелистывания страниц» — мгновенный запрос: «Найди всех студентов с оценкой 5 по алгебре». Даже среди миллионов записей — результат за миллисекунды.

Безопасность

База данных умеет разрешать доступ одним и запрещать другим. Например, преподаватель видит все оценки, а студент — только свои. Плюс автоматическое резервное копирование.

Масштабируемость

От 10 записей до 10 миллиардов — база данных работает одинаково. Нужно больше — просто добавляешь сервер. Файловая система так не умеет.

Раздел 02

Реляционные базы данных (SQL)

Самый популярный и понятный тип баз данных. Данные хранятся в таблицах, которые связаны между собой — отсюда слово «реляционные» (от англ. relation — связь).

Объяснение простым языком

Откройте Excel. Вот таблица «Студенты»: столбцы — ID, Имя, Группа, Email. Каждая строка — один студент. Теперь вторая таблица — «Оценки»: ID оценки, ID студента, Предмет, Оценка, Дата. Таблицы связаны через ID студента — это как номер страницы в оглавлении. Зная ID, база данных мгновенно «подтягивает» все оценки нужного студента.

ID Имя Группа Email
1Алексей СмирновИТ-21alex@mail.ru
2Мария ИвановаИТ-21maria@mail.ru
3Дмитрий КозловИТ-22dmitry@mail.ru

Таблицы и строки

Таблица = совокупность записей с одинаковой структурой. Столбец задаёт тип данных (число, текст, дата), а строка — одну конкретную запись. Удобно, наглядно, привычно.

Структура

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

Первичный ключ (PK) — уникальный номер каждой строки (как паспорт). Внешний ключ (FK) — номер из другой таблицы (как ссылка). Именно через ключи таблицы «понимают» друг друга.

Связи

Язык SQL

SQL (Structured Query Language) — язык общения с базой. Запрос SELECT * FROM студенты WHERE группа = 'ИТ-21' означает: «Дай всех студентов из группы ИТ-21». Читается почти как английское предложение.

Запросы

Типы связей между таблицами

Один-к-одному (1:1) — каждый студент имеет один паспорт, каждый паспорт принадлежит одному студенту.
Один-ко-многим (1:N) — один преподаватель ведёт несколько групп, но каждая группа у одного преподавателя.
Многие-ко-многим (M:N) — студенты посещают множество предметов, и на одном предмете много студентов. Для такой связи нужна промежуточная таблица.

Основные SQL-команды

1

SELECT — выборка данных

SELECT имя, оценка FROM оценки WHERE предмет = 'Математика' — покажи имена и оценки по математике.

2

INSERT — добавление данных

INSERT INTO студенты (имя, группа) VALUES ('Ольга', 'ИТ-22') — добавь новую студентку Ольгу в группу ИТ-22.

3

UPDATE — изменение данных

UPDATE оценки SET оценка = 5 WHERE id = 12 — измени оценку записи с номером 12 на пятёрку.

4

DELETE — удаление данных

DELETE FROM студенты WHERE id = 3 — удали запись о студенте с номером 3.

5

JOIN — объединение таблиц

SELECT * FROM студенты JOIN оценки ON студенты.id = оценки.student_id — покажи студентов вместе с их оценками.

ACID — 4 правила надёжности

Атомарность — транзакция выполняется целиком или не выполняется вовсе. Перевод 5000 ₽: деньги списались и зачислились одновременно, иначе откат.
Согласованность — после транзакции база остаётся в корректном состоянии. Баланс не может стать отрицательным.
Изоляция — параллельные транзакции не мешают друг другу. Два человека одновременно снимают деньги — каждый видит свою версию.
Долговечность — после подтверждения транзакция сохраняется даже при отключении питания.

Раздел 03

NoSQL базы данных

Когда данные не влезают в таблицы — слишком разные, слишком быстрые или слишком большие — на помощь приходят NoSQL базы. «NoSQL» не значит «без SQL», а скорее «не только SQL».

Объяснение простым языком

Реляционная база — как шкаф с одинаковыми ящиками. NoSQL — как комната, где можно поставить шкаф, коробку, мешок или что угодно. Не нужно заранее решать структуру — можно начать хранить данные, а структуру «доращивать» по мере необходимости. Это особенно удобно в больших проектах (соцсети, онлайн-игры, IoT-устройства), где данные приходят быстрее, чем вы успеваете проектировать схему.

Документоориентированные

Данные хранятся как документы (обычно JSON). У каждого документа может быть своя структура. Пример: MongoDB. Идеально для каталогов товаров, блогов, профилей пользователей — где у каждого объекта набор полей свой.

JSON-документы

Ключ-значение (Key-Value)

Самый простой тип: каждому значению присваивается ключ, как слово в словаре. Знаешь ключ — получаешь значение мгновенно. Пример: Redis. Используют для кэширования, сессий, счётчиков лайков — везде, где нужна скорость.

Максимальная скорость

Графовые

Данные как сеть: узлы (люди, статьи, товары) и связи между ними (дружит, ссылается, купил). Пример: Neo4j. Идеальны для соцсетей, рекомендаций, навигации — везде, где важны связи «кто с кем дружит».

Связи

Строчные (Column-Family)

Похожи на таблицы, но столбцы не обязательны для каждой строки. Каждая строка может иметь свой набор столбцов. Пример: Cassandra. Используют для аналитики больших данных — логов, телеметрии, истории.

Большие объёмы

Сравнение: SQL vs NoSQL

SQL (реляционные)

  • Строгая структура (схема фиксирована)
  • Гарантия ACID
  • Мощные JOIN-запросы между таблицами
  • Идеальны для транзакций (банки, магазины)
  • Сложнее масштабировать горизонтально

NoSQL

  • Гибкая структура (схема не нужна)
  • Высокая производительность на чтение
  • Легко масштабировать горизонтально
  • Идеальны для Big Data и real-time
  • Сложнее с транзакциями и JOIN
Раздел 04

Нормализация: убираем хаос

Объяснение простым языком

Представьте таблицу, где в одной колонке «Студент» записано «Иванов;Петров;Сидоров». А в колонке «Предмет» — «Математика;Физика;Информатика». Это антитон нормализации. Нормализация — процесс превращения одного огромного беспорядка в несколько маленьких аккуратных таблиц, связанных ключами. Цель: одно значение — одно место хранения. Если Иванов поменял фамилию, меняем её в одном месте, а не в тысяче записей.

1NF — первая нормальная форма

Каждая ячейка таблицы содержит только одно значение. Никаких списков внутри ячеек: «Математика, Физика» — нельзя. Нужна отдельная строка для каждого предмета. Атомарность данных.

Атомарность

2NF — вторая нормальная форма

Все неключевые поля зависят от всего первичного ключа, а не от его части. Если PK — составной (ID студента + ID предмета), то оценка зависит от пары, но имя студента — только от ID студента. Имя нужно вынести в отдельную таблицу.

Полная зависимость

3NF — третья нормальная форма

Нет транзитивных зависимостей. Если у группы есть «Факультет», а у факультета — «Декан», то не храните декана в таблице групп. Вынесите факультеты отдельно. Каждое поле зависит только от ключа — ни от чего лишнего.

Чистота связей
Раздел 05

Индексы: ускорение поиска

Объяснение простым языком

Когда вы ищете слово в книге без оглавления — читаете страница за страницей (это полный перебор). Индекс — это оглавление. Без него поиск по миллиону записей занимает секунды; с индексом — миллисекунды. Стоимость: индекс занимает дополнительное место на диске и немного замедляет добавление новых записей (нужно обновлять оглавление). Но для частых запросов выгода колоссальная.

B+

B-дерево (B-Tree)

Самый частый тип индекса. Данные упорядочены, как страницы в телефонной книге. Поиск, диапазоны, сортировка — всё работает быстро. Используется по умолчанию в большинстве СУБД (PostgreSQL, MySQL, Oracle).

H

Хеш-индекс

Быстрое точное совпадение: «Найди запись с email = test@mail.ru». Работает мгновенно (O(1)), но не умеет выделять диапазоны и сортировать. Идеален для ключей кэша и session ID.

F

Полноценный текстовый (Full-Text)

Индекс для поиска по тексту: «найди все статьи, где упоминается "база данных"». Понимает морфологию, стоп-слова, релевантность. Используется в поисковиках, блогах, CRM.

До и после оптимизации

До оптимизации

  • Данные дублируются в 10 таблицах
  • Запрос «найди студентов» — 4.2 секунды
  • База весит 120 ГБ
  • Обновление фамилии — правка в 500 местах
  • При сбое — данные потеряны

После оптимизации

  • Каждое значение хранится в одном месте (3NF)
  • Тот же запрос — 12 миллисекунд
  • База весит 18 ГБ
  • Фамилия обновляется одной командой
  • Автоматические бэкапы каждые 6 часов
Раздел 06

Оптимизация запросов для высоких нагрузок

Объяснение простым языком

Запрос к базе данных — как вопрос библиотекарю. Плохой вопрос: «Дай мне все книги». Хороший вопрос: «Дай мне все книги по математике, изданные после 2020 года, в твёрдой обложке». Чем точнее запрос — тем быстрее ответ. Оптимизация — это искусство задавать правильные вопросы и помогать базе данных отвечать быстро.

EXPLAIN — диагностика

Команда EXPLAIN SELECT ... показывает, как база выполняет запрос: какой индекс использует, сколько строк сканирует. Это как посмотреть маршрут навигатора перед поездкой.

Диагностика

Кэширование (Redis)

Часто запрашиваемые данные сохраняются в быстрой памяти (Redis/Memcached). Первый запрос — к базе, далее — из кэша. Ускорение в 100–1000 раз для статичных данных (например, страница товара в каталоге).

Скорость ×1000

Репликация и шардирование

Репликация: копии базы на разных серверах — читают все, записывает мастер. Увеличивает отказоустойчивость. Шардирование: база делится на «осколки» по признаку (город, дата). Каждый осколок обслуживает свой сервер.

Масштабирование

Пул соединений

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

Эффективность
Раздел 07

Популярные СУБД и инструменты

На практике вы столкнётесь с несколькими системами. Вот основные.

PostgreSQL

Мощная open-source СУБД. Поддерживает JSON, GIS, полнотекстовый поиск, триггеры, витрины данных. Фаворит стартапов и enterprise. «Ормезон» реляционных баз — надёжный и гибкий.

SQL

MySQL

Самая популярная в мире СУБД. Простая, быстрая, проверенная. WordPress, YouTube, Facebook начали с MySQL. Идеальна для веб-приложений, где скорость чтения важнее сложных транзакций.

SQL

MongoDB

Лидер среди документоориентированных. Хранит JSON-документы (BSON). Горизонтальное масштабирование из коробки. Идеален для каталогов, логов, мобильных бэкендов.

NoSQL

Redis

Хранилище ключ-значение в оперативной памяти. Микросекундные операции. Кэш, сессии, очереди, лимитеры запросов. Не замена базы данных, но идеальный компаньон.

Кэш

Базы данных — фундамент любого IT-проекта. Изучайте, практикуйтесь, создавайте.