Введение в базы данных и SQL
Введение в базы данных и SQL
Представьте, что вы работаете аналитиком в быстрорастущей сети кофеен. В первый месяц работы у компании была всего одна точка, и все продажи записывались в обычную таблицу Excel. В ней были колонки: дата, название напитка, цена, имя бариста.
Пока продаж было сто в день, таблица работала отлично. Вы могли легко посчитать выручку за смену или найти самый популярный кофе. Но через год сеть выросла до пятидесяти кофеен. Ежедневно совершаются десятки тысяч транзакций. Файл Excel стал весить сотни мегабайт, он открывается по пять минут, зависает при попытке построить сводную таблицу, а если два менеджера попытаются отредактировать его одновременно — данные могут быть безвозвратно испорчены.
Именно в этот момент бизнес переходит от электронных таблиц к профессиональным инструментам хранения данных.
Что такое база данных и СУБД
Чтобы решить проблему медленной работы и путаницы, информацию переносят в базу данных (БД) — организованную структуру для хранения, изменения и извлечения информации.
Базу данных можно сравнить с огромным, идеально структурированным складом. На этом складе товары не валяются в куче, а лежат на строго отведенных полках, каждая из которых имеет свой номер и категорию.
Однако сам по себе склад не может выдавать товары или вести их учет. Ему нужен заведующий. В мире IT таким заведующим выступает система управления базами данных (СУБД) — специальное программное обеспечение, которое позволяет пользователям и приложениям взаимодействовать с базой данных.
СУБД берет на себя всю черновую работу: она следит за тем, чтобы данные не потерялись при сбое питания, чтобы два пользователя не изменили одну и ту же запись одновременно, и чтобы поиск нужной информации среди миллионов строк занимал доли секунды.
Самые популярные СУБД в аналитике данных — это PostgreSQL, MySQL, Microsoft SQL Server и Oracle. Несмотря на разные названия и компании-разработчики, все они работают по схожим принципам и понимают один и тот же язык запросов.
Реляционная модель данных
Существуют разные способы организации данных, но в бизнесе (особенно в финансах, ритейле и e-commerce) абсолютным стандартом являются реляционные базы данных. Термин происходит от английского слова relation (отношение), но на практике это означает, что данные хранятся в виде связанных таблиц.
В реляционной базе данных вся информация строго структурирована в виде двумерных массивов. Каждая таблица посвящена только одной сущности. Например, у нас будет отдельная таблица для клиентов, отдельная — для товаров, и отдельная — для заказов.
Анатомия таблицы
Любая таблица в реляционной БД состоит из двух фундаментальных элементов:
- Поля (столбцы) — определяют структуру данных. Каждый столбец имеет свое уникальное имя и описывает один атрибут сущности. Например, в таблице клиентов могут быть поля:
Имя,Email,Дата регистрации. - Записи (строки) — содержат сами данные. Каждая строка представляет собой один конкретный экземпляр сущности (одного конкретного клиента).
Главное отличие таблицы в базе данных от листа в Excel заключается в жесткости структуры. В Excel вы можете в любой момент написать текст в ячейку, где до этого были только числа, или закрасить ячейку желтым цветом. Реляционная база данных такого не позволит. Она требует строгой дисциплины, и эта дисциплина обеспечивается типами данных.
Типы данных
При создании таблицы для каждого столбца необходимо указать тип данных — правило, которое определяет, какая именно информация может храниться в этой колонке. Это защищает базу от ошибок (например, от попытки записать слово «бесплатно» в колонку с ценой товара).
Рассмотрим основные типы данных, с которыми аналитик сталкивается каждый день:
Целые числа (Integer)
Используются для данных, которые можно посчитать поштучно.
Примеры: количество проданных товаров, возраст клиента, количество бонусных баллов.
В SQL этот тип обычно обозначается как INT или INTEGER.
Числа с плавающей точкой (Decimal / Numeric)
Используются для точных финансовых расчетов или дробных метрик.
Примеры: цена товара, сумма заказа, вес посылки в килограммах.
Часто задается с указанием точности, например DECIMAL(10,2). Это означает, что число может состоять максимум из 10 цифр, при этом 2 из них будут находиться после запятой. Если цена товара составляет 1500.50 долл., она идеально впишется в этот тип.
Строки и текст (String / Varchar)
Предназначены для хранения текстовой информации любой длины.
Примеры: имя клиента, название товара, промокод, почтовый адрес.
Обычно используется тип VARCHAR(n), где n — максимальное количество символов. Например, VARCHAR(50) подойдет для email-адреса, а для длинного отзыва клиента лучше использовать тип TEXT, который вмещает огромные объемы символов.
Дата и время (Date / Timestamp)
Критически важный тип для аналитики, так как большинство бизнес-отчетов привязаны к временным периодам (выручка за месяц, когортный анализ по неделям).
DATEхранит только дату (год, месяц, день). Пример:2023-10-25.TIMESTAMPилиDATETIMEхранит дату и точное время вплоть до миллисекунд. Пример:2023-10-25 14:30:00.
Логический тип (Boolean)
Хранит только два значения: истина (TRUE) или ложь (FALSE).
Примеры: подписан ли клиент на рассылку, оплачен ли заказ, активен ли промокод.
Первичные и внешние ключи: как связываются данные
Мы выяснили, что в реляционной базе данные разбиты на множество таблиц. Но как аналитику собрать из них единый отчет? Как узнать, какой именно клиент купил конкретный товар? Для этого существуют ключи.
Первичный ключ (Primary Key)
Первичный ключ — это столбец (или набор столбцов), который уникально идентифицирует каждую строку в таблице.
Представьте, что в вашей базе есть два клиента с именем Иван Иванов. Если они оба сделают заказ, как система поймет, кому именно начислять бонусные баллы? Имя не подходит для идентификации, так как оно может повторяться. Номер телефона может измениться.
Поэтому каждой записи присваивается уникальный идентификатор (ID). В таблице клиентов это будет customer_id.
Правила первичного ключа:
- Он должен быть абсолютно уникальным для каждой строки.
- Он не может быть пустым (не может содержать значение NULL).
- Он никогда не должен меняться со временем.
Внешний ключ (Foreign Key)
Внешний ключ — это столбец в одной таблице, который ссылается на первичный ключ в другой таблице. Именно внешние ключи создают те самые «реляции» (связи) между данными.
Рассмотрим пример. У нас есть таблица Orders (Заказы). В ней есть свой первичный ключ order_id (номер заказа). Чтобы указать, кто именно сделал этот заказ, мы добавляем в таблицу Orders колонку customer_id. Эта колонка и будет внешним ключом. Она не содержит имени клиента или его адреса — она содержит только число, которое отсылает нас к таблице Customers (Клиенты).
Такой подход называется нормализацией данных. Мы не дублируем информацию. Если Иван Иванов изменит свой номер телефона, нам нужно будет обновить его только в одном месте — в таблице Customers. Все его 50 прошлых заказов в таблице Orders автоматически будут ссылаться на актуальные данные, потому что они связаны через неизменный customer_id.
Типы связей между таблицами
В бизнес-аналитике вы будете встречать три основных типа связей:
- Один ко многим (One-to-Many). Самый частый случай. Один клиент может сделать много заказов. Одна категория товаров содержит много продуктов. В этом случае внешний ключ всегда находится на стороне «многих» (в таблице заказов).
- Один к одному (One-to-One). Встречается реже. Например, у одного сотрудника может быть только один пропуск в офис, а у пропуска — только один владелец. Обычно такие данные можно хранить в одной таблице, но их разделяют из соображений безопасности (например, чтобы скрыть паспортные данные в отдельную таблицу с ограниченным доступом).
- Многие ко многим (Many-to-Many). Один заказ может содержать много разных товаров, и один и тот же товар может присутствовать в тысячах разных заказов. Реляционные базы не умеют связывать таблицы напрямую таким образом. Для этого создается третья, промежуточная таблица (например,
Order_Items), которая содержит внешние ключи обеих таблиц.
Что такое SQL и зачем он нужен аналитику
Теперь, когда мы понимаем, как данные хранятся и связываются, возникает вопрос: как их оттуда достать?
Для общения с реляционными базами данных был создан SQL (Structured Query Language — язык структурированных запросов). Это специализированный язык программирования, который позволяет создавать таблицы, добавлять в них данные, изменять их и, самое главное для аналитика, извлекать нужную информацию.
Главная особенность SQL заключается в том, что это декларативный язык. Когда вы пишете код на Python или C++, вы должны пошагово объяснить компьютеру, как получить результат (создай цикл, открой файл, прочитай строку, сравни значение). В SQL вы просто описываете, что вы хотите получить, а СУБД сама решает, как это сделать наиболее эффективным способом.
Пример бизнес-задачи: руководство просит вас узнать общую сумму продаж кофе «Капучино» за сентябрь 2023 года.
Если бы вы делали это в Excel, вам пришлось бы:
- Открыть огромный файл.
- Включить фильтр по дате (сентябрь 2023).
- Включить фильтр по названию (Капучино).
- Выделить колонку с ценой и посмотреть сумму внизу экрана.
В SQL вы пишете один запрос, который читается почти как обычный английский текст:
SELECT SUM(price)
FROM sales
WHERE product_name = 'Капучино'
AND sale_date BETWEEN '2023-09-01' AND '2023-09-30';
Этот запрос отправится к СУБД. Она сама найдет нужную таблицу (sales), отфильтрует строки по условиям (WHERE) и сложит значения в колонке цены (SUM). В ответ вы получите не миллион строк, а одну единственную цифру — готовую выручку.
Почему аналитику недостаточно Excel или Python?
- Объем данных. Excel физически ограничен 1 048 576 строками. Современный бизнес генерирует такой объем данных за несколько дней. Базы данных могут хранить миллиарды строк.
- Скорость. СУБД используют сложные математические алгоритмы и индексы для поиска. Запрос к таблице на 10 миллионов строк может выполниться за миллисекунды.
- Единый источник правды. В компании может быть сто аналитиков. Если каждый скачает себе файл Excel, через день у всех будут разные данные. База данных лежит на защищенном сервере, и все аналитики обращаются к одним и тем же актуальным данным в реальном времени.
- Автоматизация. SQL-запросы можно встроить в BI-системы (Tableau, Power BI, Superset). Вы пишете запрос один раз, подключаете его к дашборду, и руководство каждое утро видит свежие графики без вашего участия.
Жизненный цикл аналитической задачи
Чтобы лучше понять место SQL в вашей будущей работе, давайте посмотрим, как выглядит типичный процесс решения аналитической задачи.
Шаг 1: Понимание бизнес-требования. Менеджер по маркетингу спрашивает: «Какая рекламная кампания привела нам самых лояльных клиентов в прошлом году?»
Шаг 2: Перевод бизнеса на язык данных. Вы, как аналитик, понимаете, что «лояльный клиент» — это тот, кто сделал больше 5 заказов. Значит, вам нужно найти клиентов с количеством заказов > 5, посмотреть дату их регистрации (прошлый год) и узнать источник их перехода.
Шаг 3: Поиск таблиц.
Вы изучаете структуру базы данных (схему) и понимаете, что вам понадобятся три таблицы: Users (пользователи), Orders (заказы) и Marketing_Campaigns (кампании).
Шаг 4: Написание SQL-запроса. Вы пишете код, который объединяет эти три таблицы с помощью внешних ключей (оператор JOIN, который мы подробно изучим в следующих статьях), фильтрует данные по дате и группирует их по названию кампании.
Шаг 5: Анализ и визуализация. СУБД возвращает вам небольшую, агрегированную таблицу (например, 10 строк с названиями кампаний и количеством лояльных клиентов). Вы загружаете этот небольшой результат в Excel, Python или BI-систему, строите красивую диаграмму и отправляете менеджеру.
Как видите, SQL — это мост между сырыми, непонятными терабайтами данных и готовыми бизнес-решениями. Без умения строить этот мост работа аналитика данных просто невозможна. В следующих статьях мы начнем писать наши первые запросы и шаг за шагом разберем все ключевые команды этого мощного языка.