Оптимизация схемы базы данных

Разделите заголовок заказа и его позиции: orders хранит покупателя и дату, order_items — товары, количество и цену покупки. Сейчас строка Order смешивает оба уровня.

Короткий ответ

Что ответить на собеседовании

Разделите заголовок заказа и его позиции: orders хранит покупателя и дату, order_items — товары, количество и цену покупки. Сейчас строка Order смешивает оба уровня.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо выполнить рефакторинг текущей схемы базы данных: проанализировать её структуру, выявить слабые места и предложить варианты улучшения.

User(id, name, sex, birthday)
Product(id, maker, model, type)
Order(user_id, product_id, date, count, code, price, total_sum)

Ответ

Разделите заголовок заказа и его позиции: orders хранит покупателя и дату, order_items — товары, количество и цену покупки. Сейчас строка Order смешивает оба уровня.

Добавьте первичные ключи и внешние связи: orders.id/user_id, order_items.id/order_id/product_id. Цена в позиции должна быть snapshot на момент покупки, а не вычисляться из текущей цены товара. Count должен быть положительным, денежные значения — decimal или целые минимальные единицы с валютой. Total_sum либо вычисляется, либо поддерживается согласованно с позициями. Maker можно вынести в справочник при самостоятельной сущности производителя. Индексы выбираются по запросам, а не добавляются на все поля автоматически.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее