Модель данных
Категория и товар
У нас, очевидно, есть уже две бизнес сущности - категория каталога и товар. На данный момент пусть товар может принадлежать только одной категории. В дальнейшем можно ввести тэги, коллекции, бренды, которые тоже будут объединять товары в множества и по которым будет возможен поиск м фильтрация.
Чтобы определить, какие свойства будут у категории или товара, можно воспользоваться здравым смыслом, а так же посмотреть реализацию данных сущностей в других e-commerce решениях.
Вот, например, какие поля есть в таблице product
в OpenCart:
Дополнительно к этому в OpenCart у товара есть изображения, его варианты, опции, типы.
Типы баз данных
На первом этапе мы используем JSON файлы в качестве бэкенд данных, но в последующем задействуем настоящую базу данных, конечно.
Для прикладного программирования есть два основных типа баз данных - реляционные (SQL) и объектные (NoSQL). В первой данные хранятся в таблицах, типа Google sheet, со связями между собой, во второй - в виде JSON объектов. Реляционные БД дают структурированность, транзакционность, надежность и производительность, проверенную десятилетиям, NoSQL базы дают удобный формат иерархичного представления данных и возможность по ходу разработки менять структуру второстепенных данных не меняя схему БД.
Самый лучший вариант - использовать SQL базу c JSON полями в таблицах для иерархичных данных. Обычные поля остаются для данных, требующих индексации для быстрого доступа, - по которым нужен поиск или объединение. Таким образом получается преимущество SQL базы данных с опрятностью и удобством работы с JSON данными.
В примере с product
у нас в первом приближении будет примерно следующая таблица:
Мы создали два индекса - у title
и subtitle
, потому что по ним будет происходить поиск. Остальные данные могут находиться в data
.
То есть, пример соответствующего json файла товара для первого этапа может быть такой:
1.json
{
"id": 1,
"title": "Garfield",
"subtitle": "Мягкая игрушка кот Garfield",
"categoryId": 1,
"data": {
"description": "...",
"images": [],
"material": ["...", "..."],
"weight": "...",
"height": "..."
}
}
В дальнейшем мы будем добавлять поля (например, price
) и расширять data
.
Аналогично json для category
может иметь вид:
1.json
{
"id": 1,
"title": "Мягкие игрушки",
"data": {
"description": "...",
"icon": "..."
}
}