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

Что такое Primery key?

1.6 Junior🔥 241 комментариев
#SQL и базы данных

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

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

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

Что такое Primary Key

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

Основные характеристики Primary Key

  • Уникальность — каждое значение в PK столбце(ах) должно быть уникальным
  • NOT NULL — значение не может быть пустым
  • Только один PK на таблицу — хотя PK может состоять из нескольких столбцов (составной ключ)
  • Индекс — БД автоматически создаёт индекс на PK для быстрого поиска
  • Ссылка для внешних ключей — другие таблицы ссылаются на PK через Foreign Key

Примеры Primary Key

1. Простой Primary Key (один столбец)

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE
);

2. Составной Primary Key (несколько столбцов)

CREATE TABLE order_items (
    order_id INT NOT NULL,
    item_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_id, item_id)
);

3. Auto-increment Primary Key (самостоятельно генерируемый)

CREATE TABLE products (
    product_id SERIAL PRIMARY KEY,
    product_name VARCHAR(100),
    price DECIMAL(10, 2)
);

Типы Primary Key

Natural Key — использует реальные данные:

CREATE TABLE users (
    email VARCHAR(100) PRIMARY KEY,
    name VARCHAR(100)
);

Surrogate Key — искусственный уникальный идентификатор (UUID, SERIAL):

CREATE TABLE users (
    user_id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(100) UNIQUE,
    name VARCHAR(100)
);

Primary Key и Foreign Key

CREATE TABLE users (
    user_id INT PRIMARY KEY
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

Здесь user_id в таблице orders является Foreign Key, который ссылается на Primary Key в таблице users.

Практические рекомендации

  1. Всегда используй Primary Key — даже если данные кажутся уникальными. Используй UUID или SERIAL
  2. Избегай Natural Key из нескольких столбцов — они усложняют Foreign Key
  3. UUID для распределённых систем — если данные реплицируются
  4. SERIAL для простых случаев — быстрее и проще
  5. Не меняй значение PK — это нарушит referential integrity

Проверка Primary Key в PostgreSQL

SELECT constraint_name, column_name
FROM information_schema.key_column_usage
WHERE table_name = 'users' AND constraint_type = 'PRIMARY KEY';