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

Какие знаешь характеристики primary key?

2.0 Middle🔥 81 комментариев
#Архитектура и паттерны#Работа с данными

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

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

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

Характеристики Primary Key

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

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

1. Уникальность (Uniqueness)

  • Каждое значение Primary Key должно быть уникальным в таблице
  • Не может быть двух записей с одинаковым Primary Key
  • База данных автоматически проверяет это ограничение
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(100)
);

INSERT INTO users VALUES (1, 'Alice');   -- OK
INSERT INTO users VALUES (1, 'Bob');     -- ОШИБКА: id=1 уже существует

2. Не NULL (NOT NULL)

  • Primary Key не может содержать NULL значения
  • Каждая запись ДОЛЖНА иметь значение Primary Key
  • Это автоматическое ограничение
INSERT INTO users VALUES (NULL, 'Charlie');  -- ОШИБКА: NULL не допускается
INSERT INTO users VALUES (2, 'Charlie');     -- OK

3. Неизменяемость (Immutability) — лучшая практика

  • Хотя технически можно изменить Primary Key, это очень плохая практика
  • Изменение Primary Key может нарушить Foreign Key constraints
  • Может привести к каскадным обновлениям

4. Минимальность (Minimality)

  • Primary Key должен содержать минимально необходимые колонки
  • Для составного Primary Key следует выбирать только существенные поля
  • Лишние колонки усложняют индексирование

5. Однородность (Homogeneity)

  • Primary Key должен быть одного типа данных
  • Обычно это целые числа или текст

Типы Primary Key

Simple (Простой)

  • Состоит из одной колонки
  • Самый частый вариант

Composite (Составной)

  • Состоит из нескольких колонок
  • Комбинация значений должна быть уникальной
CREATE TABLE user_roles (
    user_id INT,
    role_id INT,
    PRIMARY KEY (user_id, role_id)
);

Primary Key и индексирование

Автоматический индекс:

  • База данных автоматически создает индекс для Primary Key
  • Это обеспечивает быстрый поиск по Primary Key
  • Запросы SELECT * FROM users WHERE id = 5 выполняются очень быстро

Практические примеры в Android

Room Database:

@Entity(tableName = "users")
data class User(
    @PrimaryKey
    val id: String = UUID.randomUUID().toString(),
    val name: String,
    val email: String
)

@Entity(
    tableName = "user_roles",
    primaryKeys = ["user_id", "role_id"]
)
data class UserRole(
    val user_id: String,
    val role_id: String
)

Лучшие практики выбора Primary Key

✅ Рекомендации:

  • Выбирай INT/BIGINT для high-volume таблиц
  • Используй UUID для распределенных систем
  • Избегай составных ключей если возможно
  • Не используй бизнес-данные как Primary Key
  • Всегда выбирай неизменяемый Primary Key

❌ Избегай:

  • Changing Primary Keys после создания
  • Null values в Primary Key
  • Business keys как Primary Key
  • Излишне большие Primary Keys

Вывод

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