Что такое первичный ключ (Primary Key) в реляционной базе данных?

«Что такое первичный ключ (Primary Key) в реляционной базе данных?» — вопрос из категории Базы данных, который задают на 26% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Первичный ключ (Primary Key, PK) — это ограничение в реляционной базе данных, которое однозначно идентифицирует каждую строку (запись) в таблице. Это столбец или комбинация столбцов со следующими свойствами:

Свойства первичного ключа:

  1. Уникальность (UNIQUE): В таблице не может быть двух строк с одинаковым значением первичного ключа.
  2. Непустота (NOT NULL): Значение первичного ключа не может быть NULL.
  3. Неизменяемость: Значение PK должно оставаться стабильным на протяжении всего жизненного цикла строки. Менять его крайне не рекомендуется.

Назначение:

  • Гарантирует целостность данных, предотвращая дубликаты.
  • Служит точкой ссылки для внешних ключей (Foreign Keys) из других таблиц, устанавливая связи между данными.

Пример создания в SQL:

-- Один столбец в качестве PK
CREATE TABLE Users (
    user_id INT PRIMARY KEY, -- Простой первичный ключ
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100)
);

-- Составной первичный ключ (из нескольких столбцов)
CREATE TABLE OrderItems (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id) -- Составной ключ
);

-- С автоинкрементом (часто используется для суррогатных ключей)
CREATE TABLE Products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

В Java (JPA/Hibernate):

@Entity
@Table(name = "users")
public class User {
    @Id // Указывает на первичный ключ
    @GeneratedValue(strategy = GenerationType.IDENTITY) // Стратегия генерации (автоинкремент)
    private Long id;

    private String username;
    // ... другие поля и геттеры/сеттеры
}