Код-ревью Middle ER-модели и нормализация обновлено
Ревью DDL заказов
Вопрос
Аналитик набросал физическую модель для заказов. Найди проблемы.
CREATE TABLE orders (
id serial,
client_name text,
client_phone text,
items text,
total float,
status text,
created_at timestamp
);
Коротко
Хорошая модель: orders(id PK, clientid FK, status с ограничением, total numeric, createdat timestamptz NOT NULL) и orderitems(orderid, productid, qty, price) с составным ключом. Телефон клиента в заказе оправдан только как снимок контакта доставки, и тогда это осознанное решение, а не копия.
Что должен найти ревьюер
- Ошибкастрока 2Нет первичного ключа: id без PRIMARY KEY
- Стильстрока 3Данные клиента копируются в каждый заказ вместо FK на clients: аномалии обновления
- Ошибкастрока 5Товары списком в одной колонке нарушают 1НФ: нужна таблица order_items
- Ошибкастрока 6Деньги во float дают ошибки округления: numeric(12,2) или целые копейки
- Ошибкастрока 7Статус свободным текстом без справочника или CHECK: появятся «Paid», «оплачен», «paid »
- Стильстрока 8timestamp без часового пояса и без NOT NULL: для распределённой системы лучше timestamptz
Разбор
Хорошая модель: orders(id PK, client_id FK, status с ограничением, total numeric, created_at timestamptz NOT NULL) и order_items(order_id, product_id, qty, price) с составным ключом. Телефон клиента в заказе оправдан только как снимок контакта доставки, и тогда это осознанное решение, а не копия.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.