Что такое первичный ключ в базе данных?sql-16

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

Основные характеристики первичного ключа

  1. Уникальность
    Никакие две записи в таблице не могут иметь одинаковое значение первичного ключа.

  2. Не NULL
    Первичный ключ не может содержать пустые значения (NULL).

  3. Неизменяемость (в идеале)
    Хотя технически можно изменить PK, это считается плохой практикой, так как может нарушить ссылочную целостность.

Пример создания первичного ключа

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,  -- Простой первичный ключ (одно поле)
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE
);
CREATE TABLE orders (
    order_id INT,
    customer_id INT,
    order_date DATE,
    PRIMARY KEY (order_id, customer_id)  -- Составной первичный ключ (два поля)
);

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

ХарактеристикаПервичный ключ (PK)Уникальное ограничение (UNIQUE)
NULL значенияЗапрещеныРазрешены (но только один NULL)
Количество в таблицеТолько один PKМножество UNIQUE полей
Использование в связяхЧасто FK ссылаются на PKРедко используются для FK

Практическое применение PK

  1. Обеспечение целостности данных
    PK гарантирует, что каждая запись может быть однозначно идентифицирована.

  2. Создание связей между таблицами
    Внешние ключи (Foreign Keys) других таблиц ссылаются на PK для установления отношений.

  3. Производительность
    Автоматически создаётся кластеризованный индекс (в большинстве СУБД), что ускоряет поиск.

Ошибки при работе с первичными ключами

  • Использование изменяемых данных (например, email как PK)

    -- Плохая практика:
    CREATE TABLE users (
        email VARCHAR(100) PRIMARY KEY,  -- email может измениться!
        name VARCHAR(100)
    );
    
  • Избыточные составные ключи

    -- Избыточно:
    CREATE TABLE order_items (
        order_id INT,
        product_id INT,
        quantity INT,
        PRIMARY KEY (order_id, product_id, quantity)  -- quantity не нужен в PK!
    );
    

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