Основы SQL: Структура и данные

Курс знакомит с понятием баз данных [blog.skillfactory.ru] и принципами реляционной модели [thecode.media]. Вы изучите структуру таблиц [ru.hexlet.io], важность первичных ключей [sql-academy.org] и основы нормализации [compress.ru].

1. Что такое базы данных и реляционные СУБД

Что такое базы данных и реляционные СУБД

Добро пожаловать в курс «Основы SQL: Структура и данные». Мы начинаем с фундамента. Прежде чем писать запросы и анализировать данные, необходимо разобраться, где эти данные живут, как они устроены и почему таблица в Excel — это еще не база данных.

От хаоса к системе: Зачем нужны базы данных

Представьте, что вы владелец небольшого книжного интернет-магазина. В самом начале вы записываете заказы в блокнот. Когда заказов становится больше, вы переносите их в электронные таблицы (например, Excel или Google Sheets). Это удобно, пока у вас 100 клиентов.

Но что произойдет, когда клиентов станет 100 000? Файл начнет открываться по несколько минут, поиск нужной строки станет мучением, а если два менеджера попытаются одновременно отредактировать файл, данные могут потеряться. Здесь на сцену выходят базы данных.

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

> База данных — это электронное хранилище, в котором информация организована так, чтобы с ней можно было быстро, удобно и безопасно работать. > > blog.skillfactory.ru

Важно различать два понятия, которые новички часто путают:

  • База данных (БД) — это само хранилище данных (файлы на диске).
  • Система управления базами данных (СУБД) — это программное обеспечение, которое позволяет создавать базы данных, обновлять их и управлять ими (например, PostgreSQL, MySQL, Oracle).
  • Если провести аналогию с библиотекой: БД — это книги на полках, а СУБД — это библиотекарь, который точно знает, где стоит нужная книга, и выдает её вам по запросу.

    Реляционные базы данных: Мир таблиц

    Существует множество типов баз данных, но самым популярным стандартом в мире бизнеса и аналитики остаются реляционные базы данных (Relational Database Management System — RDBMS). Эту модель предложил Эдгар Кодд в 1970 году.

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

    > Реляционная база данных — это тип БД, в которой данные организованы в виде связанных таблиц, также называемых отношениями. > > selectel.ru

    Главное отличие реляционной БД от простого списка файлов — это строгая структура и наличие связей. Вы не храните всё в одной куче. Вы разделяете данные на логические группы (сущности) и настраиваете связи между ними.

    Анатомия таблицы: Строки и Столбцы

    В реляционной базе данных вся информация хранится в таблицах. Давайте разберем структуру таблицы на примере таблицы Clients (Клиенты).

    | ClientID | FirstName | LastName | Email | RegistrationDate | | :--- | :--- | :--- | :--- | :--- | | 101 | Иван | Петров | ivan@mail.ru | 2023-01-15 | | 102 | Анна | Сидорова | anna@yandex.ru | 2023-02-20 | | 103 | Дмитрий | Волков | volkov@gmail.com | 2023-03-05 |

    1. Столбцы (Columns)

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

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

    2. Строки (Rows)

    Строку часто называют записью или кортежем. Каждая строка — это отдельный объект или событие. В нашем примере одна строка — это один конкретный клиент со всеми его характеристиками.

    3. Ячейка (Cell)

    Это пересечение строки и столбца, где хранится единичное значение данных (например, конкретный email ivan@mail.ru).

    Типы данных: Почему порядок важен

    В Excel вы можете написать в одной ячейке число 100, а в ячейке под ней — текст сто рублей. СУБД такого не позволит. При создании таблицы вы обязаны определить тип данных для каждого столбца. Это гарантирует целостность информации.

    Основные типы данных:

    * Числовые (Integer, Decimal, Float): Для хранения количества, цен, возраста. С ними можно производить арифметические операции. * Строковые (Char, Varchar, Text): Для хранения имен, адресов, описаний. Varchar(50) означает, что в строку можно записать текст длиной до 50 символов. * Логические (Boolean): Хранят только два значения: TRUE (Истина) или FALSE (Ложь). Например, столбец IsActive (Активен ли клиент). * Дата и время (Date, Timestamp): Для хранения календарных дат и точного времени событий.

    Использование правильных типов данных критически важно для производительности и корректности расчетов. Например, если вы сохраните цены как текст, вы не сможете просто так посчитать сумму заказа.

    Первичный ключ (Primary Key)

    Как отличить одного Ивана Петрова от другого? В реальной жизни мы используем паспортные данные или ИНН. В базах данных для этого существует Первичный ключ (Primary Key).

    Первичный ключ — это столбец (или набор столбцов), который уникально идентифицирует каждую строку в таблице.

    Требования к первичному ключу:

  • Уникальность: Значение не может повторяться. Не может быть двух клиентов с одинаковым ClientID.
  • Непустое значение: Ключ всегда должен существовать (NOT NULL).
  • Неизменность: В идеале значение первичного ключа не должно меняться со временем.
  • В примере выше первичным ключом является столбец ClientID. Даже если у Ивана Петрова появится полный тезка, у них будут разные ID (например, 101 и 154), и система их не перепутает.

    Нормализация данных: Борьба с избыточностью

    Одна из главных концепций реляционных баз данных — нормализация. Это процесс организации данных для уменьшения избыточности.

    Представьте, что мы храним данные о заказах вот так:

    | OrderID | ClientName | ClientAddress | Product | Price | | :--- | :--- | :--- | :--- | :--- | | 1 | Иван Петров | ул. Ленина, 1 | Ноутбук | 50000 | | 2 | Иван Петров | ул. Ленина, 1 | Мышка | 1000 |

    Здесь мы видим проблему: имя и адрес Ивана Петрова дублируются. Если Иван переедет, нам придется искать все его заказы и менять адрес в каждой строке. Это долго и чревато ошибками.

    Нормализация предлагает разделить эту информацию на две таблицы:

  • Clients (хранит имя и адрес один раз).
  • Orders (хранит информацию о заказе и ссылку на клиента).
  • Эффективность нормализации можно оценить математически. Допустим, мы храним текст адреса длиной байт. Если у клиента заказов, то в ненормализованной таблице адрес займет объем памяти :

    где — объем памяти для хранения адресов в плохой структуре, — количество заказов, — размер строки адреса в байтах.

    При нормализации мы храним адрес один раз в таблице клиентов, а в таблице заказов храним только короткий идентификатор клиента (ID) размером байт. Общий объем составит:

    где — объем памяти в нормализованной структуре, — память на одну запись адреса, — количество заказов, — память на хранение ID (обычно 4 или 8 байт).

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

    Итоги

    Мы разобрали фундамент, на котором строится работа с данными. Вот ключевые моменты:

  • БД vs СУБД: База данных — это хранилище, СУБД — программа для управления им.
  • Реляционная модель: Данные хранятся в таблицах, связанных между собой логическими отношениями.
  • Строгая структура: Таблицы состоят из строк (записей) и столбцов (атрибутов). Каждый столбец имеет строго определенный тип данных.
  • Первичный ключ: Уникальный идентификатор строки, который позволяет точно отличить одну запись от другой.
  • Нормализация: Принцип разделения данных на разные таблицы для устранения дублей и защиты от ошибок.
  • В следующей статье мы перейдем к практике и изучим язык SQL, с помощью которого мы будем «разговаривать» с базой данных.

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

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

    В предыдущей статье мы выяснили, что реляционная база данных — это не просто свалка информации, а упорядоченная система. Основным строительным блоком этой системы является таблица. Если база данных — это библиотека, то таблица — это конкретный стеллаж с каталогом, где каждая карточка стоит на своем месте.

    В этой статье мы детально разберем анатомию таблицы. Понимание того, как взаимодействуют строки и столбцы, критически важно для написания правильных SQL-запросов в будущем.

    Таблица: Контейнер для сущностей

    В реляционных базах данных (SQL) вся информация хранится в таблицах. Таблица — это двумерная структура, состоящая из вертикальных столбцов и горизонтальных строк. У каждой таблицы есть уникальное имя, которое отражает суть хранящихся в ней данных (например, Employees, Orders, Products).

    > Таблица — это структура, в которой данные организованы в виде строк и столбцов. Каждая строка представляет собой отдельную запись или объект, а каждый столбец — это поле, определяющее свойства этих записей. > > productstar.ru

    Главное отличие таблицы БД от листа в Excel заключается в строгости структуры. Вы не можете начать рисовать график посередине таблицы или объединить пять ячеек в одну ради красоты. Таблица в SQL всегда прямоугольная и предсказуемая.

    Столбцы (Columns): Правила игры

    Столбцы — это вертикальные элементы таблицы. Их также называют полями (fields) или атрибутами.

    Столбец определяет структуру данных. Когда вы создаете таблицу, вы сначала придумываете названия столбцов и решаете, какой тип данных будет в них храниться. Это похоже на создание бланка анкеты: вы пишете «Имя», «Возраст», «Телефон». Пока анкета пуста, данные в ней отсутствуют, но структура уже есть.

    Ключевые характеристики столбца:

  • Имя: Уникальное название внутри таблицы (например, price или email).
  • Тип данных: Правило, определяющее, что можно писать в этот столбец (число, текст, дата).
  • Смысл: Каждый столбец описывает одну конкретную характеристику объекта.
  • Согласно источникам, столбец можно определить как вертикальное разделение объектов по категориям. В базе данных такая информация, как имя, пол и возраст, размещается в разных столбцах.

    > Столбец — это вертикальный ряд ячеек. Колонки чаще всего располагаются друг за другом в непрерывной последовательности. > > guru99.com

    Пример структуры

    Рассмотрим таблицу Products (Товары):

    | ProductID | ProductName | Price | IsInStock | | :--- | :--- | :--- | :--- | | (Число) | (Текст) | (Дробное число) | (Логическое) |

    Здесь Price — это столбец. Он идет сверху вниз. В нем хранятся цены всех товаров. Вы не найдете в этом столбце название товара или дату поставки.

    Строки (Rows): Реальные данные

    Строки — это горизонтальные элементы таблицы. Их часто называют записями (records) или кортежами.

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

    > Строка — это серия данных, расположенных горизонтально. В строке объекты данных располагаются лицом к лицу и лежат рядом друг с другом на прямой линии. > > guru99.com

    Важные свойства строк:

  • Единство смысла: Одна строка описывает ровно один объект (одного клиента, один заказ, один товар).
  • Независимость: Порядок строк в таблице, как правило, не имеет значения для хранения. База данных может хранить их в любом порядке, пока вы явно не попросите отсортировать их при выводе.
  • Вернемся к таблице Products и добавим в нее строки:

    | ProductID | ProductName | Price | IsInStock | | :--- | :--- | :--- | :--- | | 101 | Ноутбук | 50000.00 | True | | 102 | Мышь | 1500.00 | True | | 103 | Клавиатура | 3000.00 | False |

    Здесь горизонтальная запись 102 | Мышь | 1500.00 | True — это строка. Она содержит полную информацию о конкретном товаре.

    Ячейка (Cell): Атом информации

    На пересечении строки и столбца находится ячейка. Это минимальная единица хранения данных. В одной ячейке должно храниться только одно значение.

    Если в Excel вы можете написать в одной ячейке «Иван Иванов, тел. 89001234567», то в правильно спроектированной SQL-таблице это считается ошибкой. Такие данные нужно разделять на разные столбцы (Name и Phone), чтобы с ними было удобно работать.

    Понятие NULL

    Иногда информации для ячейки нет. Например, клиент при регистрации не указал номер телефона. В этом случае в ячейку записывается специальный маркер — NULL.

    NULL — это не ноль и не пустая строка (пробел). NULL означает «значение отсутствует» или «неизвестно».

    Математика объема таблицы

    Понимание структуры помогает оценить, сколько места займет ваша база данных. Это важно при проектировании высоконагруженных систем.

    Допустим, мы хотим рассчитать примерный объем памяти , который займет таблица. Мы можем использовать следующую формулу:

    Для упрощения понимания отбросим служебные заголовки и выравнивание (padding), оставив суть. Объем данных можно грубо оценить как произведение количества строк на сумму размеров всех столбцов в одной строке:

    где: * — общий объем данных в байтах. * — количество строк (records) в таблице. * — размер данных в конкретном столбце в байтах (например, число обычно занимает 4 или 8 байт, а дата — 8 байт).

    Пример расчета: Представьте таблицу с 1 000 000 клиентов (). У нас есть 3 столбца:

  • ID (число): 4 байта.
  • Name (строка): в среднем 20 байт.
  • Age (число): 4 байта.
  • Суммарный размер одной строки:

    Общий объем таблицы:

    Этот расчет показывает, почему добавление нового столбца в огромную таблицу — это «дорогая» операция (увеличивается ширина каждой из миллиона строк), а добавление новой строки — «дешевая» (просто добавляется 28 байт в конец).

    Сравнение: Строки против Столбцов

    Новички часто путают, где что находится. Давайте систематизируем различия, опираясь на данные профильных ресурсов.

    | Характеристика | Строка (Row) | Столбец (Column) | | :--- | :--- | :--- | | Направление | Горизонтальное (слева направо) | Вертикальное (сверху вниз) | | Что содержит | Данные об одном объекте | Данные одного типа (категории) | | Аналогия | Заполненная анкета | Поле в бланке анкеты | | Тип данных | Смешанный (имя, число, дата) | Строгий (только числа или только текст) | | Динамика | Часто добавляются и удаляются | Редко меняются (изменение структуры) |

    > Ряды идут слева направо. С другой стороны, столбцы располагаются сверху вниз. Вы можете определить строку как порядок, в котором объекты размещаются рядом, а столбец — как вертикальное разделение объектов на основе категории. > > guru99.com

    Почему важна атомарность

    При проектировании столбцов важно следовать принципу атомарности: одна ячейка — один факт.

    Плохой пример: Столбец Address: «г. Москва, ул. Ленина, д. 10, кв. 5». Почему это плохо? Если вам понадобится найти всех клиентов из Москвы, базе данных придется сканировать и разбирать текст внутри каждой ячейки. Это медленно и сложно.

    Хороший пример: Разбить адрес на столбцы: * City: «Москва» * Street: «ул. Ленина» * House: «10» * Flat: «5»

    Теперь поиск по городу «Москва» займет доли секунды, так как СУБД будет искать точное совпадение в конкретном столбце City.

    Итоги

    Мы разобрали физическую и логическую структуру таблицы. Вот что нужно запомнить:

  • Таблица — это жесткая структура для хранения данных, состоящая из пересечения вертикалей и горизонталей.
  • Столбец (Column) задает структуру и тип данных (например, «Цена», которая всегда является числом). Изменение столбцов — сложный процесс.
  • Строка (Row) содержит конкретную информацию об одном объекте (например, конкретный товар с его ценой и названием). Строки добавляются постоянно.
  • Ячейка — место пересечения строки и столбца, хранящее единичное значение. Если значения нет, используется NULL.
  • Атомарность — принцип, согласно которому в одной ячейке должен храниться только один неделимый факт, чтобы с данными было удобно работать.