2016-09-15 4 views
-1

Мы планируем создать сайт электронной коммерции с PHP.сохранение различных типов атрибутов в одной таблице или нескольких таблицах в mysql

Существуют различные типы продуктов, таких как мобильные телефоны, футболки, часы, книги.

  • Mobile имеют атрибуты, как "барана, MODEL_NAME, зева",
  • футболки имеют атрибуты, как "цвет, размер"

Вопросы являются следующие:

  1. Лучше сохранить все атрибуты в одной таблице с именем Продукты (даже если будет/будет создано много "NULL" значений)?

  2. Сохранить различные виды продукции в различных таблицах, как мобильного, Тенниска, и т.д ...

во втором случае будут созданы несколько таблиц (см 2 изображений ниже).

enter image description here

или

enter image description here

Update

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

enter image description here

+0

сделать таблицу под названием «Атрибуты», а затем, как поля «введите» «значение», вы должны прочитать о «Magento и атрибутах и ​​атрибутах» – KikiTheOne

+0

как @KikiTheOne указал, [EAV model] (https: //en.wikipedia.org/wiki/Entity%E2%80%93attribute%E2%80%93value_model), иначе вы получите ненужные длинные таблицы, заполненные нулевыми значениями. –

+0

@KikiTheOne, пожалуйста, проверьте здесь: http://prnt.sc/ci9uzl, где в таблице 'attribute_id' я планирую сохранить' model, size, color' & under 'attribute_values_id' таблицу, я хочу сохранить' apple, 17inch, синий' - это лучший подход, сравнимый с приведенным выше 2, упомянутым в вопросе? Правильно ли это правило EAV? - – fresher

ответ

1

Проблема, которую вы описываете, довольно распространена - ее обычно называют «хранением полиморфных данных в реляционной схеме». Это происходит при переполнении стека quiteregularly.

Вы спрашиваете «что лучше» - это, конечно, зависит от того, как вы собираетесь использовать данные.

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

Если вы не знаете заранее, какие запросы вам нужны для поддержки, опять же, реляционная модель может быть проблемой. Например, если у вас есть механизм фильтрации, который позволяет пользователям искать футболки в синем цвете, размером с маленький, от марки «xyz», вам может потребоваться динамическое создание SQL-запроса. Это не так просто.

Модель EAV оборачивается первой проблемой, но не второй. На самом деле, может быть очень сложно запускать даже простые запросы против DATAMODEL EAV.

Я бы рассмотрел решение, в котором вы храните «известные авансовые» атрибуты в таблицах SQL (SKU, price, is_sellable, description и т. Д.), А также отношения (поставщик, категория, склад и т. Д.). Другие, переменные данные могут тогда жить в JSON documents в базе данных. Я бы обратил особое внимание на MySQL full text search indexing - вы можете использовать это вместо «чистого» SQL для запуска многих распространенных запросов.

+0

, пожалуйста, проверьте здесь: http://prnt.sc/ci9uzl, где в таблице 'attribute_id' я планирую сохранить' model, size, color' & under 'attribute_values_id' таблицу, я хочу хранить' apple, 17inch, blue 'это лучший подход, сравнимый с выше 2, о котором я упоминал? Правильно ли это правило EAV? - – fresher

1

Создать таблицу продуктов,

создать таблицу свойство

Поля:

Id  
Name  
... 

Создать категорию таблицы

Поля:

Id  
Name  
... 

Создание таблиц category_product и category_property ...

Создать табличному property_product_value

Поля:

Id  
Property_id 
product_id  
Value  
... 

Написано с мобильного телефона, если у вас есть вопросы, дайте мне знать.

+0

, пожалуйста, проверьте здесь: http://prnt.sc/ci9uzl, где в таблице 'attribute_id' я планирую сохранить' model, size, color' & under 'attribute_values_id' таблицу, я хочу сохранить' apple, 17inch, blue' это лучший подход, сравнимый с вышеприведенным 2, упомянутым в вопросе? Правильно ли это правило EAV? - – fresher

Смежные вопросы