Приходилось ли вам проектировать модель данных для проекта?

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

Ответ

Да, проектировал модели данных для различных проектов. Процесс включает:

  1. Анализ требований: Выявление сущностей, их атрибутов и взаимосвязей.
  2. Нормализация: Приведение схемы к 3NF (третьей нормальной форме) для устранения избыточности и аномалий обновления.
  3. Выбор типа БД: Определение, подходит ли реляционная (PostgreSQL, MySQL) или документная (MongoDB) модель.
  4. Проектирование индексов: Создание индексов на основе частых запросов и условий WHERE/JOIN для оптимизации производительности.
  5. Документирование: Описание схемы, отношений и бизнес-правил.

Пример для реляционной БД (PostgreSQL):

-- Сущность Пользователь
CREATE TABLE users (
    id BIGSERIAL PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    username VARCHAR(100) 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,
    total_amount DECIMAL(12,2) NOT NULL CHECK (total_amount >= 0),
    status VARCHAR(50) NOT NULL DEFAULT 'NEW'
);

-- Индекс для быстрого поиска заказов пользователя
CREATE INDEX idx_orders_user_id ON orders(user_id);