← Назад к вопросам

В чем особенность ключа

1.0 Junior🔥 231 комментариев
#Коллекции

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Особенности ключей в базах данных

Предположу, что речь идет о PRIMARY KEY, FOREIGN KEY и других типах ключей. Расскажу об их особенностях.

PRIMARY KEY (Первичный ключ)

Особенности:

  • Уникален — не может быть два одинаковых значения
  • Not Null — не может быть пустым
  • Один на таблицу — только один PRIMARY KEY
  • Индекс — автоматически создается индекс
  • Идентификатор — однозначно определяет строку
CREATE TABLE users (
    id BIGINT PRIMARY KEY,  -- Primary key
    email VARCHAR(100),
    name VARCHAR(100)
);

FOREIGN KEY (Внешний ключ)

Особенности:

  • Ссылка — указывает на PRIMARY KEY другой таблицы
  • Referential Integrity — обеспечивает целостность данных
  • Ограничения — нельзя удалить/обновить родительскую запись, если есть зависимости
  • Каскадные операции — ON DELETE CASCADE, ON UPDATE CASCADE
CREATE TABLE orders (
    id BIGINT PRIMARY KEY,
    user_id BIGINT,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Если попытаться удалить пользователя с заказами:

DELETE FROM users WHERE id = 1;  -- Ошибка! Есть зависимые заказы

UNIQUE KEY

Особенности:

  • Уникален — как PRIMARY KEY, но может быть NULL
  • Может быть несколько — на одной таблице
  • Индекс — автоматически создается
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,  -- Уникальный, но может быть NULL
    phone VARCHAR(20) UNIQUE
);

COMPOSITE KEY (Составной ключ)

Особенности:

  • Несколько колонок — первичный ключ из 2+ полей
  • Уникальная комбинация — значения в совокупности уникальны
  • Используется в связях многие-ко-многим
CREATE TABLE student_courses (
    student_id BIGINT,
    course_id BIGINT,
    PRIMARY KEY (student_id, course_id),
    FOREIGN KEY (student_id) REFERENCES students(id),
    FOREIGN KEY (course_id) REFERENCES courses(id)
);

Одно студент может быть на одном курсе только один раз, даже если таблица содержит миллионы записей.

INDEX KEY

Особенности:

  • Для быстрого поиска — ускоряет SELECT запросы
  • Медленнее UPDATE/DELETE — индекс нужно обновлять
  • Может быть с NULL — в отличие от PRIMARY KEY
CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_created_date ON orders(created_at);

Практический пример

CREATE TABLE company (
    id BIGINT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    tax_id VARCHAR(20) UNIQUE
);

CREATE TABLE employees (
    id BIGINT PRIMARY KEY,
    company_id BIGINT NOT NULL,
    email VARCHAR(100) UNIQUE,
    hire_date DATE,
    FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE,
    INDEX idx_company (company_id),
    INDEX idx_hire_date (hire_date)
);

Это обеспечивает:

  • Быстрый поиск по company_id
  • Быстрый поиск по hire_date
  • Целостность данных (нельзя удалить компанию с сотрудниками)
  • Уникальность email адреса
В чем особенность ключа | PrepBro