0Pricing
SQL Academy · Урок

Выбор ключей и типов

Выбирайте между первичными ключами BIGSERIAL и UUID, решайте, что использовать — TEXT или VARCHAR(n), — и подбирайте подходящий тип для каждого столбца

«Выбор ключей и типов» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Выбор первичного ключа

Три практических варианта:

  1. BIGSERIAL — монотонно возрастающее 64-битное целое число
  2. UUID — глобально уникальное 128-битное значение
  3. Естественный ключ — идентификатор из реального мира (электронная почта, ISBN)

Когда выигрывает BIGSERIAL

Вариант по умолчанию для большинства приложений:

  • Малый размер (8 байт), быстрый индекс, эффективно использует кэш
  • Монотонность → новые данные группируются в конце индекса
  • Удобно читать в URL (например, /posts/42)

Когда выигрывает UUID

Выбирайте UUID, если:

  • Вам нужны глобально уникальные идентификаторы (несколько центров обработки данных, приложения с работой без подключения)
  • Вы не хотите раскрывать объём бизнеса через идентификаторы в URL
  • Вы хотите сгенерировать идентификатор на стороне клиента до выполнения вставки

Цена — 16 байт (против 8 у BIGINT), а UUID версии 4 рандомизируют вставки в индексе.

Почему естественные ключи рискованны

Адреса электронной почты меняются. Артикулы переименовываются. Коды стран разделяются. Используйте суррогатный ключ как PK, а для естественного ключа задайте ограничение UNIQUE.

Типы столбцов: строки

Для большинства текстовых столбцов:

  • VARCHAR(n) — когда есть жёсткая верхняя граница (адреса электронной почты, коды)
  • TEXT — для свободного текста и длинного содержимого
  • CITEXT — когда сравнение всегда должно быть без учёта регистра (например, для адресов электронной почты)

Типы столбцов: числа

Для числовых столбцов:

  • BIGINT — для идентификаторов и счётчиков
  • NUMERIC(p, s) — для денежных значений
  • REAL/DOUBLE PRECISION — только для научных вычислений

Типы столбцов: время

Для столбцов времени:

  • TIMESTAMPTZ — для событий (по умолчанию)
  • DATE — для календарных дат (дни рождения, праздники)
  • TIME — для времени суток без даты (часы работы магазина)

Логическое значение или статус

Если у столбца в будущем может быть больше двух состояний, лучше использовать текстовый статус с CHECK, а не логическое значение:

-- Will probably grow:
status TEXT NOT NULL CHECK (status IN ('draft','published','archived'))

-- vs the trap of "is_published BOOLEAN" when you later need a third state.

Сопутствующие ограничения

Каждый столбец должен иметь:

  • Наиболее узкий подходящий тип
  • NOT NULL, если NULL не имеет отдельного смысла
  • DEFAULT, если столбец обычно содержит одно и то же значение
  • CHECK, если существует правило предметной области
  • Индекс, если столбец используется в WHERE/JOIN/ORDER

Последствия для хранения

Узкие типы = меньшие строки = больше строк на странице = выше доля попаданий в кэш. Замена TEXT на VARCHAR(20) не экономит место (хранение одинаково). Замена BIGINT на INT вдвое уменьшает ширину столбца.

Типы внешних ключей должны совпадать

Типы столбца внешнего ключа и столбца PK, на который он ссылается, должны полностью совпадать:

-- Wrong (silently won't use the index efficiently):
user_id INT REFERENCES users(id)   -- where users.id is BIGINT

-- Right:
user_id BIGINT REFERENCES users(id)

Итоги

Выбор типа — это часть проектирования.

  • BIGSERIAL или UUID для PK
  • NUMERIC для денежных значений
  • TIMESTAMPTZ для событий
  • TEXT с CHECK для изменяющегося статуса
  • NOT NULL по умолчанию

Проверка знаний

Вы храните время событий для пользователей из разных часовых поясов. Какой тип выбрать?

Часто задаваемые вопросы

Урок «Выбор ключей и типов» бесплатный?

Да — полный текст урока «Выбор ключей и типов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Выбор ключей и типов»?

Выбирайте между первичными ключами BIGSERIAL и UUID, решайте, что использовать — TEXT или VARCHAR(n), — и подбирайте подходящий тип для каждого столбца Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Выбор ключей и типов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Моделирование блога: пользователи, публикации, комментарии
  2. Выбор ключей и типов
  3. Индексы для распространённых запросов
  4. Заполнение базы данных тестовыми данными
← Назад к SQL Academy