Разработка выполнялась в соответствии с техническим заданием, описанным в файле technical_specification.docx.
Стек технологий: SQL, PostgreSQL, dbdiagram.io
Проект моделирует структуру данных интернет-магазина с поддержкой категорий любого уровня вложенности, системой заказов и мягким удалением данных. Схема предназначена для использования в e-commerce платформах и аналитических системах.
Категории товара могут иметь неограниченный уровень вложенности. Схема данных категорий номенклатуры должна безболезненно позволять добавлять категории любого уровня вложенности. На этапе проектирования максимальный уровень вложенности неизвестен.
- categories — дерево категорий с parent_id и флагом is_deleted
- category_closure — таблица связей предок-потомок для навигации по дереву
- products — товары, связанные с категориями
- customers — покупатели
- orders — заказы, имеют статус (cart_order/placed/paid/shipped/cancelled')
- order_items — состав заказа (товары и количество)
1). При размещении заказа status = placed, количество товара уменьшается. При отмене status = cancelled — возвращается к прежней величине. Это должно выполняться в транзакции на уровне приложения.
2). Удаление категорий пока запрещено, чтобы сохранить целостность дерева. Но учитывая, что удалять категории всё же нужно, есть флаг is_deleted = false, который можно поменять на true, и категория перестанет быть активной.
3). Работа с деревом - вставка, удаление и перемещение категорий:
- в таблице categories есть поле parent_id, которое указывает на прямого предка, такое решение упрощает процесс вставки и перемещения новой категории;
- category_closure хранит все возможные пары предок-потомок и упрощает навигацию по дереву;
- при добавлении категории вставляются строки: • (id, id, 0) • (предок, id, depth_ancestor + 1) Это можно реализовать через триггер или на уровне приложения. 4).В таблицах products, customers, orders, order_items есть возможность мягкого удаления, с помощью флага is_deleted. Так сохраняется структура и не нарушаются внешние ключи.
Импортируй SQL-файл schema.sql в свою базу.
