Составной ключ (Composite Key)

Составной ключ — это первичный ключ, состоящий из двух или более атрибутов, которые вместе обеспечивают уникальность записи.

Usage: 1. Link tables (Many-to-Many). 2. Weak entities. 3. Partitioning. Performance: Affects index size and join speed. Alternatives: Surrogate Keys (UUID/Incremental ID). Rules: Columns in a composite key cannot be NULL.

        graph LR
  Center["Составной ключ (Composite Key)"]:::main
  Rel_data_modeling["data-modeling"]:::related -.-> Center
  click Rel_data_modeling "/terms/data-modeling"
  classDef main fill:#7c3aed,stroke:#8b5cf6,stroke-width:2px,color:white,font-weight:bold,rx:5,ry:5;
  classDef pre fill:#0f172a,stroke:#3b82f6,color:#94a3b8,rx:5,ry:5;
  classDef child fill:#0f172a,stroke:#10b981,color:#94a3b8,rx:5,ry:5;
  classDef related fill:#0f172a,stroke:#8b5cf6,stroke-dasharray: 5 5,color:#94a3b8,rx:5,ry:5;
  linkStyle default stroke:#4b5563,stroke-width:2px;

      

🧒 Простыми словами

Представь расписание поездов. Номер поезда — не уникален (он ездит каждый день). Дата — тоже не уникальна (много поездов в один день). Но 'Номер поезда + Дата' — это составной ключ, который точно укажет на один конкретный рейс.

🤓 Expert Deep Dive

Технически, создание составного ключа автоматически создает 'Составной Индекс'. Это означает, что база данных будет хранить значения этих колонок в отсортированном виде одним блоком. Это ускоряет выборки, которые используют все части ключа, но делает операции вставки (INSERT) чуть медленнее. В архитектуре микросервисов составные ключи иногда используются для обеспечения идемпотентности операций при передаче сообщений между сервисами.

📚 Источники