Ответ
Первичный ключ (Primary Key) — это один или несколько столбцов в таблице, значения которых уникально идентифицируют каждую строку. Это фундаментальный концепт в реляционных базах данных.
Ключевые свойства:
- Уникальность (Uniqueness): Каждое значение в столбце (или комбинация значений в столбцах) первичного ключа должно быть уникальным. Дубликаты не допускаются.
- Отсутствие NULL (NOT NULL): Поле первичного ключа не может содержать
NULL
значений. Каждая запись обязана иметь значение первичного ключа. - Неизменность (Immutability): Хотя базы данных технически могут позволить изменять значение первичного ключа, это считается плохой практикой. Ключ, идентифицирующий запись, не должен меняться в течение её жизненного цикла.
Основное назначение:
- Идентификация записей: Главная задача — обеспечить надежный способ найти, обновить или удалить конкретную строку в таблице.
- Связывание таблиц: Первичный ключ одной таблицы используется как внешний ключ (Foreign Key) в другой для создания связей между ними.
- Оптимизация запросов: Наличие первичного ключа почти всегда означает создание кластеризованного индекса (в большинстве СУБД), что делает поиск по этому ключу максимально быстрым.
Типы первичных ключей:
- Суррогатный ключ (Surrogate Key): Искусственно сгенерированный ключ, не имеющий бизнес-смысла. Чаще всего это автоинкрементное целое число (
AUTO_INCREMENT
,SERIAL
) или UUID. Это предпочтительный подход в большинстве случаев. - Естественный ключ (Natural Key): Ключ, который является атрибутом из реального мира (например, номер паспорта, email, VIN-код автомобиля). Используется реже, так как такие данные могут меняться или оказаться неуникальными.
- Составной ключ (Composite Key): Ключ, состоящий из двух или более столбцов. Используется, когда уникальность строки можно определить только комбинацией значений.
Примеры:
1. SQL (Суррогатный ключ)
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- Суррогатный ключ
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE
);
2. Go (с использованием ORM GORM)
В Go при работе с базами данных через ORM, такой как GORM, первичный ключ обычно определяется тегом структуры.
// Пример структуры для ORM GORM в Go
type User struct {
// GORM по умолчанию использует поле 'ID' как первичный ключ.
// Тег `gorm:"primary_key"` можно указать явно.
ID uint `gorm:"primary_key"`
Name string `gorm:"size:100;not null"`
Email string `gorm:"unique;not null"`
}