Какой у вас опыт проектирования таблиц в реляционных базах данных?

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

Ответ

Опыт включает проектирование схем данных с учетом нормализации (обычно до 3НФ) для устранения аномалий вставки, обновления и удаления. Ключевые аспекты:

  • Ключи и связи: Определение первичных и внешних ключей для обеспечения целостности данных.
  • Индексы: Создание индексов (B-tree, составных, уникальных) для ускорения частых запросов WHERE, JOIN, ORDER BY.
  • Типы данных: Выбор оптимальных типов (например, VARCHAR(n) для строк с известной длиной, TEXT для больших, DECIMAL для финансовых расчетов).
  • Ограничения: Использование NOT NULL, UNIQUE, CHECK для валидации данных на уровне БД.

Пример схемы для интернет-магазина:

CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    password_hash CHAR(60) NOT NULL,
    created_at TIMESTAMPTZ DEFAULT NOW()
);

CREATE TABLE orders (
    id BIGSERIAL PRIMARY KEY,
    user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    status VARCHAR(50) NOT NULL,
    total DECIMAL(10,2) CHECK (total >= 0),
    INDEX idx_orders_user_id (user_id)
);

Для связей "многие-ко-многим" проектируются junction-таблицы. Подход к оптимизации (индексы, партиционирование, выбор типов) адаптируется под конкретную СУБД (PostgreSQL, MySQL).