Как спроектировать базу данных?

Привет, Тостер.
Пытаюсь спроектировать БД для простого интернет магазина.
Запутался с товарами и категориями товаров.
Планирую три категории: мобильные / планшеты / ноутбуки.
По сколько продукты будут с разными характеристиками( например, у смартфона есть поддержка SIMки, а у ноутбука такого и подавна нет), то решил разделить на несколько таблиц продукты. Правильно ли я делаю?
Если нет, прошу поправить меня. Так же дальнейшие советы будут очень в тему.
270ec94b533d4794b41d20f1d2bf2110.png)
З.Ы. Проект нацелен на самообучение.
  • Вопрос задан
  • 4603 просмотра
Решения вопроса 1
Если коротко - то лучше сразу посмотрите на модель EAV, т.к. разбивать на отдельные таблицы имеет смысл только для ОЧЕНЬ специализированных магазинов, у которых весь бизнес вертится вокруг продажи конкретных товаров. Если у вас обычная розничная продажа, то лучше сразу от этого отказаться, т.к. все равно рано или поздно будут добавляться новые типы товаров и ваша БД будет усложняться до момента потери контроля над ее структурой.
Тут я предлагал решения для аналогичной проблемы: Как добавить товар в корзину?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
На мой взгляд, это не имеет смысла, так как можно завести соотношение Категория - Характеристики, а товары по прежнему хранить в одной таблице.
Ответ написан
Комментировать
Awake
@Awake
Рулю разработкой ;-)
Совет номер 0: посмотреть, как сделано у других. Magento, например. Думаю, что ваш подход нормален для простого интернет-магазина.
Ответ написан
@coodan
Мне сложно советовать, потому что я в точности не знаю как "сделано у других". Но если Ваш проект нацелен на самообразование, то, думаю, Вас стоит сначала действительно попрактиковаться на классической реляционной базе данных и лишь потом переходить на какие-то более экзотические варианты. Двигаться нужно от простого к сложному и только тогда, когда простого уже не хватает. По большому счету, реляционная база данных с ее жесткой структурой и задаваемыми Вами строгими ограничениями - Ваши друзья, они ведь стараются Ваши данные сохранить от разрушения.

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

Может быть, оптимальным было бы решение, когда бы Вы хорошо продумали какие параметры товаров Вам понадобятся для поиска и сделали бы их отдельными индексируемыми столбцами общей таблицы товаров. Для некоторых видов товаров эти поля были бы пустыми. А другие параметры, которые просто описывают товар, но не предназначены для поиска, Вы могли бы объединить и хранить в таком виде в одном столбце. И распаковывать по надобности, когда их нужно выдать пользователю. Туда бы Вы могли класть всякую всячину, абсолютно не заботясь о том, что для какого-то товара эта всячина может измениться. Главное, в виде пар значений хранить, чтобы знать что есть что - захотелось Вам в описание товара добавить, что крокодильчики у него серобурмалиновые, а не фиолетовые, как у всех - так и пишете - Крокодильчики => серобурмалиновые.

С другой стороны, Вы не всегда знаете какую категорию товаров Вы захотите добавить следующей. А корежить и раздувать и "разряжать" общую таблицу товаров идея не очень хорошая. С этой точки зрения - общности, Ваша идея разных таблиц для разных товаров может быть очень хороша. Ведь Вам, разработав саму основу - проработав различную обработку для различных таблиц товаров, при добавлении нового вида товаров понадобится только создать таблицу и дать для нее подходящий именно для нее обработчик. Заботиться о том, как работают другие таблицы Вам не придется.

Ну, например - выбираем мы категорию товаров ноутбуки - и ищем по параметрам, которые характерны только для ноутбуков.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы