Разделите заголовок заказа и его позиции: 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 можно вынести в справочник при самостоятельной сущности производителя. Индексы выбираются по запросам, а не добавляются на все поля автоматически.