SQL код скопирован в буфер обмена
EN PT FR

Урок 1.3 · Время чтения: ~10 мин

Реляционная база данных хранит данные в связанных таблицах. В этом уроке вы узнаете об основных строительных блоках — таблицах, столбцах, строках, первичных, внешних и уникальных ключах, а также об ограничениях — и поймёте, как модель ACID гарантирует надёжность транзакций даже при сбоях и параллельном доступе.

Концепции реляционных баз данных: таблицы, ключи и ACID

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

Схема реляционной базы данных: две таблицы, связанные первичным и внешним ключами

Что такое таблицы, столбцы и строки?

Реляционные базы данных организуют данные в структуры, называемые таблицами. Представьте таблицу как электронную таблицу:

  • Таблица: Набор связанных данных. Например, таблица может хранить информацию о клиентах, продуктах или заказах.
  • Столбец: Вертикальный набор данных в таблице. Каждый столбец представляет конкретный атрибут или характеристику данных. Например, в таблице "Клиенты" столбцы могут быть "CustomerID", "FirstName", "LastName" и "Email".
  • Строка: Горизонтальный набор данных в таблице. Каждая строка представляет один экземпляр или запись данных. В таблице "Клиенты" каждая строка будет представлять одного клиента.

Пример:

Давайте визуализируем простую таблицу "Клиенты":

CustomerIDFirstNameLastNameEmail
1JohnDoejohn.doe@example.com
2JaneSmithjane.smith@example.com
3DavidLeedavid.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 определяет свойства, которые делают транзакции безопасными и надежными.

Транзакция — это группа операций, рассматриваемая как единая единица работы. Например, перевод денег между двумя банковскими счетами обычно включает как минимум две операции:

  1. Списать деньги со счета A.
  2. Зачислить деньги на счет B.

Оба шага должны выполниться вместе, иначе не должен примениться ни один.

ACID означает:

  • Atomicity (Атомарность): Транзакция выполняется по принципу «все или ничего». Если один шаг завершился ошибкой, вся транзакция откатывается.
  • Consistency (Согласованность): Транзакция должна переводить базу данных из одного корректного состояния в другое, сохраняя все заданные правила и ограничения.
  • Isolation (Изолированность): Параллельные транзакции не должны мешать друг другу так, чтобы это приводило к некорректным результатам.
  • Durability (Долговечность): После фиксации транзакции ее изменения сохраняются навсегда, даже при отключении питания или сбое системы.

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


Ключевые выводы урока:

  • Реляционная база данных хранит данные в таблицах из столбцов и строк.
  • Первичный ключ однозначно идентифицирует каждую строку; он должен быть уникальным и не NULL.
  • Внешний ключ связывает строку одной таблицы со строкой другой, обеспечивая ссылочную целостность.
  • Уникальный ключ гарантирует уникальность значений в столбце; в одной таблице может быть несколько уникальных ключей.
  • Ограничения (NOT NULL, CHECK) автоматически соблюдаются СУБД на уровне базы данных.
  • Модель ACID (Атомарность, Согласованность, Изолированность, Долговечность) гарантирует надёжность транзакций даже при сбоях и параллельном доступе.

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


Часто задаваемые вопросы

В чём разница между первичным и уникальным ключом?

Первичный ключ однозначно идентифицирует каждую строку и не может содержать NULL. В таблице может быть только один первичный ключ. Уникальный ключ также обеспечивает уникальность, но допускает значения NULL, и таких ключей в таблице может быть несколько. Первичный ключ используется как основной идентификатор строки; уникальный — для обеспечения уникальности других столбцов, например email.

Может ли внешний ключ ссылаться на уникальный ключ, а не на первичный?

Да. Внешний ключ может ссылаться на любой столбец (или набор столбцов) с ограничением уникальности, не только на первичный ключ. Тем не менее ссылка на первичный ключ — наиболее распространённая и рекомендуемая практика.

Что происходит, если ACID-транзакция завершается с ошибкой на середине?

Атомарность гарантирует, что вся транзакция откатывается, и база данных остаётся в том состоянии, в котором была до начала транзакции. Никакие частичные изменения не сохраняются.

Вопросы для собеседования

Как объяснить первичный ключ на собеседовании?

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

Что такое ссылочная целостность и как её обеспечивают внешние ключи?

Ссылочная целостность означает, что значение внешнего ключа в одной таблице всегда должно совпадать с существующим значением первичного ключа в referenced-таблице или быть NULL. СУБД обеспечивает это автоматически: попытка вставить «осиротевший» внешний ключ или удалить связанную строку будет отклонена, если не задано правило каскадного обновления/удаления.

Что означает аббревиатура ACID и почему это важно?

ACID расшифровывается как Атомарность, Согласованность, Изолированность и Долговечность. Это гарантии, которые делают транзакции надёжными. Без ACID параллельные записи могли бы повреждать данные, частичные сбои оставляли бы базу в некорректном состоянии, а зафиксированные изменения могли бы теряться после сбоя. Именно ACID делает реляционные базы данных надёжными для финансовых, медицинских и других критически важных систем.

Урок 1.4: Базовые типы данных