Skip to content

Модель данных

Категория и товар

У нас, очевидно, есть уже две бизнес сущности - категория каталога и товар. На данный момент пусть товар может принадлежать только одной категории. В дальнейшем можно ввести тэги, коллекции, бренды, которые тоже будут объединять товары в множества и по которым будет возможен поиск м фильтрация.

Чтобы определить, какие свойства будут у категории или товара, можно воспользоваться здравым смыслом, а так же посмотреть реализацию данных сущностей в других e-commerce решениях.

Вот, например, какие поля есть в таблице product в OpenCart:

image

Дополнительно к этому в OpenCart у товара есть изображения, его варианты, опции, типы.

Типы баз данных

На первом этапе мы используем JSON файлы в качестве бэкенд данных, но в последующем задействуем настоящую базу данных, конечно.

Для прикладного программирования есть два основных типа баз данных - реляционные (SQL) и объектные (NoSQL). В первой данные хранятся в таблицах, типа Google sheet, со связями между собой, во второй - в виде JSON объектов. Реляционные БД дают структурированность, транзакционность, надежность и производительность, проверенную десятилетиям, NoSQL базы дают удобный формат иерархичного представления данных и возможность по ходу разработки менять структуру второстепенных данных не меняя схему БД.

Самый лучший вариант - использовать SQL базу c JSON полями в таблицах для иерархичных данных. Обычные поля остаются для данных, требующих индексации для быстрого доступа, - по которым нужен поиск или объединение. Таким образом получается преимущество SQL базы данных с опрятностью и удобством работы с JSON данными.

В примере с product у нас в первом приближении будет примерно следующая таблица:

image

Мы создали два индекса - у title и subtitle, потому что по ним будет происходить поиск. Остальные данные могут находиться в data.

То есть, пример соответствующего json файла товара для первого этапа может быть такой:

1.json
json
{
  "id": 1,
  "title": "Garfield",
  "subtitle": "Мягкая игрушка кот Garfield",
  "categoryId": 1,
  "data": {
    "description": "...",
    "images": [],
    "material": ["...", "..."],
    "weight": "...",
    "height": "..."
  }
}

В дальнейшем мы будем добавлять поля (например, price) и расширять data.

Аналогично json для category может иметь вид:

1.json
json
{
  "id": 1,
  "title": "Мягкие игрушки",
  "data": {
    "description": "...",
    "icon": "..."
  }
}