Какие основные типы данных используются в реляционных базах данных (SQL)?

«Какие основные типы данных используются в реляционных базах данных (SQL)?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Типы данных в SQL определяют характер информации, которая может храниться в столбце таблицы. Их можно разделить на несколько категорий.

1. Числовые типы (Numeric)

Тип Описание Пример
INT / INTEGER Целое число стандартного размера. age INT
SMALLINT, BIGINT Меньший/больший диапазон целых чисел. id BIGINT
DECIMAL(p, s) / NUMERIC(p, s) Точные числа с фиксированной точностью. p — общее число цифр, s — цифр после запятой. Идеально для финансовых расчетов. price DECIMAL(10, 2) (например, 12345678.99)
FLOAT / REAL / DOUBLE Приближенные числа с плавающей точкой. Подходят для научных данных, но могут накапливать ошибки округления. temperature FLOAT

2. Строковые типы (Character/String)

Тип Описание Пример использования
CHAR(n) Строка фиксированной длины n. Если строка короче, дополняется пробелами. Быстрее для поиска, если длина постоянна. country_code CHAR(2) ('US', 'RU')
VARCHAR(n) Строка переменной длины до n символов. Занимает место только по необходимости. Самый частый выбор для текста. username VARCHAR(50)
TEXT / CLOB Для хранения больших объемов текста (статьи, описания). Ограничения зависят от СУБД. article_body TEXT

3. Типы даты и времени (Date/Time)

Тип Описание Пример значения
DATE Только дата (год, месяц, день). '2023-11-30'
TIME Только время (часы, минуты, секунды). '14:30:00'
DATETIME / TIMESTAMP Дата и время вместе. TIMESTAMP часто автоматически обновляется и учитывает временные зоны. '2023-11-30 14:30:00'

4. Логический тип (Boolean)

  • BOOLEAN / BOOL: Хранит TRUE, FALSE или NULL. Реализован как TINYINT(1) в MySQL, как отдельный тип в PostgreSQL.

5. Бинарные типы (Binary)

  • BLOB (Binary Large Object): Для хранения бинарных данных (изображения, PDF-файлы). Лучше хранить ссылки на файлы в файловой системе или объектном хранилище.
  • BINARY, VARBINARY: Для хранения байтовых строк фиксированной/переменной длины.

6. Специальные тисы

  • ENUM: Список допустимых строковых значений. Удобно, но менее гибко, чем отдельная таблица-справочник.
  • JSON / XML: Для хранения структурированных данных в соответствующем формате (поддерживается в современных СУБД).

Пример создания таблицы с выбором типов:

CREATE TABLE products (
    -- Числовые
    id BIGINT PRIMARY KEY AUTO_INCREMENT, -- Большой диапазон для ID
    price DECIMAL(10, 2) NOT NULL,        -- Точная цена с двумя знаками после запятой
    weight_kg FLOAT,                       -- Приближенный вес
    -- Строковые
    sku CHAR(10) UNIQUE NOT NULL,         -- Фиксированный код товара
    name VARCHAR(255) NOT NULL,           -- Название переменной длины
    description TEXT,                      -- Длинное описание
    -- Дата/время и логические
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Автоматическая дата создания
    is_active BOOLEAN DEFAULT TRUE        -- Флаг активности
);

Важно: Конкретные имена типов и их детали (например, максимальная длина VARCHAR) могут отличаться между СУБД (MySQL, PostgreSQL, SQLite).