Комментарии (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.
Практические рекомендации
- Всегда используй Primary Key — даже если данные кажутся уникальными. Используй UUID или SERIAL
- Избегай Natural Key из нескольких столбцов — они усложняют Foreign Key
- UUID для распределённых систем — если данные реплицируются
- SERIAL для простых случаев — быстрее и проще
- Не меняй значение 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';