Урок 1.3 · Время чтения: ~10 мин
Реляционная база данных хранит данные в связанных таблицах. В этом уроке вы узнаете об основных строительных блоках — таблицах, столбцах, строках, первичных, внешних и уникальных ключах, а также об ограничениях — и поймёте, как модель ACID гарантирует надёжность транзакций даже при сбоях и параллельном доступе.
Концепции реляционных баз данных: таблицы, ключи и ACID
В предыдущем уроке мы познакомились с основными типами баз данных. Теперь мы глубже погрузимся в основные компоненты реляционных баз данных, которые имеют основополагающее значение для понимания того, как данные организованы и доступны с помощью SQL.

Что такое таблицы, столбцы и строки?
Реляционные базы данных организуют данные в структуры, называемые таблицами. Представьте таблицу как электронную таблицу:
- Таблица: Набор связанных данных. Например, таблица может хранить информацию о клиентах, продуктах или заказах.
- Столбец: Вертикальный набор данных в таблице. Каждый столбец представляет конкретный атрибут или характеристику данных. Например, в таблице "Клиенты" столбцы могут быть "CustomerID", "FirstName", "LastName" и "Email".
- Строка: Горизонтальный набор данных в таблице. Каждая строка представляет один экземпляр или запись данных. В таблице "Клиенты" каждая строка будет представлять одного клиента.
Пример:
Давайте визуализируем простую таблицу "Клиенты":
| CustomerID | FirstName | LastName | |
|---|---|---|---|
| 1 | John | Doe | john.doe@example.com |
| 2 | Jane | Smith | jane.smith@example.com |
| 3 | David | Lee | david.lee@example.com |
- Вся структура - это таблица под названием "Клиенты".
- "CustomerID", "FirstName", "LastName" и "Email" - это столбцы.
- Каждая строка (например, "1 | John | Doe | john.doe@example.com") - это строка.
Что такое ключи базы данных? Первичный, внешний и уникальный
Ключи — это важнейшая концепция в реляционных базах данных. Они используются для установления связей между таблицами и обеспечения целостности данных. Вот основные типы ключей:
Первичный ключ (Primary Key)
- Первичный ключ - это столбец (или набор столбцов), который однозначно идентифицирует каждую строку в таблице.
- Характеристики первичного ключа:
- Уникальность: Никакие две строки не могут иметь одинаковое значение первичного ключа.
- Отсутствие NULL: Столбец первичного ключа не может содержать значения NULL.
- В нашей таблице "Клиенты" "CustomerID" является хорошим кандидатом на роль первичного ключа, потому что у каждого клиента уникальный идентификатор, и он не может быть пустым.
Внешний ключ (Foreign Key)
- Внешний ключ - это столбец (или набор столбцов) в одной таблице, который ссылается на первичный ключ в другой таблице.
- Внешние ключи устанавливают связи между таблицами.
- Например, если у нас есть таблица "Заказы", она может иметь столбец "CustomerID", который является внешним ключом, ссылающимся на "CustomerID" в таблице "Клиенты". Это связывает каждый заказ с клиентом, который его разместил.
Уникальный ключ (Unique Key)
- Уникальный ключ - это столбец (или набор столбцов), который гарантирует, что значения в столбце (столбцах) являются уникальными для всех строк в таблице.
- Отличие от первичного ключа:
- В таблице может быть только один первичный ключ, но может быть несколько уникальных ключей.
- Столбцы уникального ключа могут допускать значения NULL (хотя реализации немного различаются).
- В нашей таблице "Клиенты" "Email" может быть уникальным ключом, гарантируя, что у каждого клиента уникальный адрес электронной почты.
Что такое ограничения SQL?
Ограничение (constraint) — это правило, применённое к столбцу или таблице, которое СУБД соблюдает автоматически. Ключи (первичный, внешний, уникальный) — один из видов ограничений. Помимо них, в повседневном SQL используется ещё ряд важных ограничений:
| Ограничение | Назначение |
|---|---|
NOT NULL | Столбец всегда должен содержать значение; NULL недопустим. |
UNIQUE | Все значения в столбце должны быть уникальными. |
PRIMARY KEY | Объединяет NOT NULL + UNIQUE; однозначно идентифицирует строку. |
FOREIGN KEY | Значение должно совпадать с существующим значением в другой таблице. |
CHECK | Значение должно удовлетворять условию, например age >= 0. |
Например, в таблице customers можно представить такие ограничения:
customer_idвыступает какPRIMARY KEY, то есть однозначно идентифицирует каждого клиента.emailможет иметь ограничениеUNIQUE, чтобы два клиента не могли использовать один и тот же адрес.ageможет подчиняться правилуCHECK, напримерage >= 0, чтобы отрицательные значения не допускались.
СУБД автоматически соблюдает эти правила и отклоняет некорректные изменения, что помогает поддерживать корректность данных без дополнительной логики в приложении.
Что такое ACID? Надёжность транзакций в реляционных БД
При работе с реляционными базами данных ещё одной ключевой концепцией является модель ACID. ACID определяет свойства, которые делают транзакции безопасными и надежными.
Транзакция — это группа операций, рассматриваемая как единая единица работы. Например, перевод денег между двумя банковскими счетами обычно включает как минимум две операции:
- Списать деньги со счета A.
- Зачислить деньги на счет B.
Оба шага должны выполниться вместе, иначе не должен примениться ни один.
ACID означает:
- Atomicity (Атомарность): Транзакция выполняется по принципу «все или ничего». Если один шаг завершился ошибкой, вся транзакция откатывается.
- Consistency (Согласованность): Транзакция должна переводить базу данных из одного корректного состояния в другое, сохраняя все заданные правила и ограничения.
- Isolation (Изолированность): Параллельные транзакции не должны мешать друг другу так, чтобы это приводило к некорректным результатам.
- Durability (Долговечность): После фиксации транзакции ее изменения сохраняются навсегда, даже при отключении питания или сбое системы.
Эти свойства критически важны для реальных систем, таких как банковские сервисы, электронная коммерция и управление складом, где частичные или некорректные изменения могут привести к серьезным проблемам.
Ключевые выводы урока:
- Реляционная база данных хранит данные в таблицах из столбцов и строк.
- Первичный ключ однозначно идентифицирует каждую строку; он должен быть уникальным и не NULL.
- Внешний ключ связывает строку одной таблицы со строкой другой, обеспечивая ссылочную целостность.
- Уникальный ключ гарантирует уникальность значений в столбце; в одной таблице может быть несколько уникальных ключей.
- Ограничения (
NOT NULL,CHECK) автоматически соблюдаются СУБД на уровне базы данных. - Модель ACID (Атомарность, Согласованность, Изолированность, Долговечность) гарантирует надёжность транзакций даже при сбоях и параллельном доступе.
В следующем уроке мы рассмотрим основные типы данных реляционных баз данных и научимся выбирать подходящий тип для каждого столбца.
Часто задаваемые вопросы
В чём разница между первичным и уникальным ключом?
Первичный ключ однозначно идентифицирует каждую строку и не может содержать NULL. В таблице может быть только один первичный ключ. Уникальный ключ также обеспечивает уникальность, но допускает значения NULL, и таких ключей в таблице может быть несколько. Первичный ключ используется как основной идентификатор строки; уникальный — для обеспечения уникальности других столбцов, например email.
Может ли внешний ключ ссылаться на уникальный ключ, а не на первичный?
Да. Внешний ключ может ссылаться на любой столбец (или набор столбцов) с ограничением уникальности, не только на первичный ключ. Тем не менее ссылка на первичный ключ — наиболее распространённая и рекомендуемая практика.
Что происходит, если ACID-транзакция завершается с ошибкой на середине?
Атомарность гарантирует, что вся транзакция откатывается, и база данных остаётся в том состоянии, в котором была до начала транзакции. Никакие частичные изменения не сохраняются.
Вопросы для собеседования
Как объяснить первичный ключ на собеседовании?
Первичный ключ — это столбец или комбинация столбцов, которая однозначно идентифицирует каждую строку таблицы. Он должен быть уникальным, не может содержать NULL и может быть только один на таблицу. Он служит опорной точкой для ссылок внешних ключей из других таблиц.
Что такое ссылочная целостность и как её обеспечивают внешние ключи?
Ссылочная целостность означает, что значение внешнего ключа в одной таблице всегда должно совпадать с существующим значением первичного ключа в referenced-таблице или быть NULL. СУБД обеспечивает это автоматически: попытка вставить «осиротевший» внешний ключ или удалить связанную строку будет отклонена, если не задано правило каскадного обновления/удаления.
Что означает аббревиатура ACID и почему это важно?
ACID расшифровывается как Атомарность, Согласованность, Изолированность и Долговечность. Это гарантии, которые делают транзакции надёжными. Без ACID параллельные записи могли бы повреждать данные, частичные сбои оставляли бы базу в некорректном состоянии, а зафиксированные изменения могли бы теряться после сбоя. Именно ACID делает реляционные базы данных надёжными для финансовых, медицинских и других критически важных систем.