5. Подсистема ведения товаров (Products и связанные сущности)
5.1. Диаграмма
На этой схеме представлена часть БД для хранения информации о продуктах, которыми торгуют на площадке.
Продавец (SELLER) предоставляет свой товар (PRODUCT) для продажи на торговой платформе (MARKETPLACE).
Данные о товарах хранятся в таблице PRODUCTS. В таблице GOODS для каждого товара сохраняются общие характеристики: название, описание и набор произвольных атрибутов (цвет, размер и т.п.). Все атрибуты товара можно запросить в представлении GOODS_ATTRIBUTES. В таблице PRODUCTS — конкретные предложения товара (цена, скидки и т.п.). Каждому товару и предложению назначаются уникальные идентификаторы в момент добавления в БД.
Предложение товара принадлежит продавцу SELLER. Про продавца сохраняется вся контактная информация. Для товара могут храниться различные медиа-материалы (картинки, чертежи, звуковые описания, рекламные ролики). Ссылки на такие материалы сохраняются в таблице MEDIA и связываются с нужным товаром в таблице PRODUCT_MEDIA.
Запасы продуктов хранятся на складе - WAREHOUSE (один продукт может храниться партиями на нескольких складах). Запись в таблице WAREHOUSE_STOCK соответствует одной партии данного товара на указанном складе в наличествующем количестве (запас на складе). Про каждый склад известен его адрес и максимальная емкость. При добавлении товара на конкретный склад специальным триггером CHECK_WAREHOUSE_CAPACITY проверяется, не превысит ли новое количество максимально допустимое.
В системе предусмотрена возможность оставлять отзывы о товаре в таблице REVIEWS. Покупатели из CUSTOMERS могут добавить отзывы и указать свою оценку этого товара (REVIEW.RATING)
Список товаров, продающихся со значительными скидками (распродажа), можно получить с помощью представления SELLOUT
Вот полный список объектов базы данных, относящихся исключительно к работе с товарами (без заказов и покупателей):
5.1.1. ТАБЛИЦЫ
Основные таблицы товаров
GOODS- Основные характеристики товаров (название, описание, атрибуты)PRODUCTS- Конкретные предложения товаров от продавцовSELLERS- Продавцы
Склады и запасы
WAREHOUSE_STOCK- Запасы товаров на конкретных складахWAREHOUSES- Информация о складах
Медиафайлы
MEDIA- Медиафайлы (изображения, видео)PRODUCTS_MEDIA- Связь товаров с медиафайлами
5.1.2. ПРЕДСТАВЛЕНИЯ (VIEWS)
GOODS_ATTRIBUTES- Показ JSON атрибутов товаровSELLOUT- Товары со скидкой \(\ge\) 75%TOPCAPS- Анализ загрузки складов (включает товарные остатки)CATEGORY_OF_GOODS- категории товаров (у кого присутствует такой атрибут)
5.1.3. ФУНКЦИИ
Создание и управление товарами
CREATE_PRODUCT- Создание продукта с JSON-описанием
Информация о товарах
CALCULATE_REVENUE- Расчет выручки продавца за период (косвенно через товары)ATTR_GET_STRING– показывает значение названного атрибута для указанного по ID товара
5.1.4. ХРАНИМЫЕ ПРОЦЕДУРЫ
Управление товарами
ADD_PRODUCT_MEDIA- Добавление медиафайлов к товаруADD_PRODUCT_MEDIA_STAT- Добавление медиафайлов с возвратом статистикиUPDATE_PRODUCT_INFO- Обновление информации о продукте через JSONDEL_PRODUCT_FROM_WAREHOUSE- Удаление товара со склада (основная версия)
Информационные
GET_PRODUCT_INFO- Получение полной информации о товареGET_AVERAGE_PRODUCT_RATING- Получение средней оценки товара
5.1.5. ТРИГГЕРЫ
CHECK_ATTRIBUTES_VALUES- Валидация JSON атрибутов при вставке/обновлении вGOODSCHECK_WAREHOUSE_CAPACITY- Проверка вместимости склада перед добавлением товараUPDATE_STOCK_TRIGGER- Обновление общего количества товара на складе
5.1.6. ИСКЛЮЧЕНИЯ (EXCEPTIONS)
EXC_INVALID_QUANTITY- Недопустимое количество товараEXC_INVALID_JSON- Недопустимый формат JSON (используется в работе с атрибутами товаров)EXC_INVALID_ATTRIBUTES- Недопустимый список атрибутов товараEXC_WAREHOUSE_CAPACITY_EXCEEDED- Недостаточно товаров на складе / превышена вместимостьEXC_ILLEGAL_GOODS_ID- Товар с указанным ID отсутствует в БДEXC_INVALID_WAREHOUSE_PRODUCT- Товар отсутствует на складеEXC_INSUFFICIENT_STOCK- Недостаточно товара на складеEXC_DUPLICATE_PRODUCT_ON_WAREHOUSE- Товар с этого склада уже заказанEXC_INVALID_WAREHOUSE- Недопустимый склад
5.1.7. ИНДЕКСЫ
IDX_DISCOUNTED_PRODUCTS- Частичный индекс для товаров со скидкойIDX_POSITIVE_STOCK_QUANTITY- Частичный индекс для положительных остатков на складе
5.1.8. СВЯЗИ МЕЖДУ ОБЪЕКТАМИ ТОВАРОВ
Основные связи
PRODUCTS.GOODS_ID\(\to\)GOODS.GOODS_ID(FK_PRODUCT_GOODS1)PRODUCTS.SELLER_ID\(\to\)SELLERS.SELLER_ID(FK_PRODUCT_SELLER)PRODUCTS_MEDIAS.PRODUCT_ID\(\to\)PRODUCTS.PRODUCT_ID(FK_PRODUCT_MEDIA_PRODUCT)PRODUCTS_MEDIAS.MEDIA_ID\(\to\)MEDIA.MEDIA_ID(FK_PRODUCT_MEDIA_MEDIA)WAREHOUSE_STOCK.PRODUCT_ID\(\to\)PRODUCTS.PRODUCT_ID(FK_STOCK_PRODUCT)WAREHOUSE_STOCK.WAREHOUSE_ID\(\to\)WAREHOUSES.WAREHOUSE_ID(FK_STOCK_WAREHOUSE)
Поток данных
GOODS (основные характеристики)\(\downarrow\)
PRODUCTS (конкретные предложения)\(\to\)PRODUCTS_MEDIA (фото/видео)\(\to\)MEDIA (файлы)\(\downarrow\)
WAREHOUSE_STOCK (наличие на складах) \(\to\) WAREHOUSES (информация о складах)
5.1.9. КЛЮЧЕВЫЕ БИЗНЕС-ПРОЦЕССЫ ДЛЯ ТОВАРОВ
Создание товара \(\to\)
CREATE_PRODUCT()\(\to\)GOODS+PRODUCTS+WAREHOUSE_STOCKДобавление изображений \(\to\)
ADD_PRODUCT_MEDIA()\(\to\)MEDIA+PRODUCTS_MEDIAУправление остатками \(\to\)
DEL_PRODUCT_FROM_WAREHOUSE()\(\to\)WAREHOUSE_STOCKПолучение информации \(\to\)
GET_PRODUCT_INFO()←PRODUCTS+GOODS+SELLERSАнализ скидок \(\to\) Представление
SELLOUT←PRODUCTS+GOODS
Все эти объекты полностью независимы от заказов и покупателей и могут использоваться для:
Управления каталогом товаров
Контроля складских остатков
Работы с медиаконтентом товаров
Анализа товарной матрицы
Управления ценами и скидками