hammet
Новичок
Магазин. Как лучше описать аттрибуты и свойства продукта?
Представим бд интернет магазина, допустим торгующего моб. телефонами.
Итак телефон - это продукт. У него есть группа аттрибутов, например "камера" или "интерфейсы",
каждая группа содержит ряд аттрибутов продукта (пары имя - значение), как пример для камеры это
размер матрицы = 1234х5678 пкс
кратность зума = 4х
тип вспышки = LED
и так далее.
К тому же, группы и аттрибуты могут повторяться для большинства товаров (т.е. многие телефоны оснащены камерами, у которых есть определенные свойства), но будут отличаться значениями (5Mpx, 1.3Mpx, 2Mpx).
Я вот кручу эту концепцию и думаю как лучше построить бд. Мобильники - это просто пример, т.к. бд должна удовлетворять запросам любого магазина, будь то мебель (продукт - стол, группа - столешница, аттрибуты - ширина, высота, цвет и т.п.) или любой набор продукции.
Моя идея такова, таблицы:
product (id, ...)
product_attribute (product_id, attribute_id)
attribute (id, property_id, value)
property (id, group_id, name)
таким образом в таблице property сохраняю имена групп и самих свойств (group_id можно читать как parent_id), в таблице attribute я связываю группу, свойство и даю ему значение, ну и связываю это всё с таблицей продуктов. Таким образом можно избежать избыточности данных, но приходится тащить в запросах по 4-5 таблиц минимум...
Использоваться это всё будет при детальном поиске по товарам (т.е. можно задать точные критерии выборки) и при выводе информации о товаре (т.е. сама страница товара). Всё.
Может стоит упростить схему? Вобщем покритикуйте, пока я не зарылся.
Представим бд интернет магазина, допустим торгующего моб. телефонами.
Итак телефон - это продукт. У него есть группа аттрибутов, например "камера" или "интерфейсы",
каждая группа содержит ряд аттрибутов продукта (пары имя - значение), как пример для камеры это
размер матрицы = 1234х5678 пкс
кратность зума = 4х
тип вспышки = LED
и так далее.
К тому же, группы и аттрибуты могут повторяться для большинства товаров (т.е. многие телефоны оснащены камерами, у которых есть определенные свойства), но будут отличаться значениями (5Mpx, 1.3Mpx, 2Mpx).
Я вот кручу эту концепцию и думаю как лучше построить бд. Мобильники - это просто пример, т.к. бд должна удовлетворять запросам любого магазина, будь то мебель (продукт - стол, группа - столешница, аттрибуты - ширина, высота, цвет и т.п.) или любой набор продукции.
Моя идея такова, таблицы:
product (id, ...)
product_attribute (product_id, attribute_id)
attribute (id, property_id, value)
property (id, group_id, name)
таким образом в таблице property сохраняю имена групп и самих свойств (group_id можно читать как parent_id), в таблице attribute я связываю группу, свойство и даю ему значение, ну и связываю это всё с таблицей продуктов. Таким образом можно избежать избыточности данных, но приходится тащить в запросах по 4-5 таблиц минимум...
Использоваться это всё будет при детальном поиске по товарам (т.е. можно задать точные критерии выборки) и при выводе информации о товаре (т.е. сама страница товара). Всё.
Может стоит упростить схему? Вобщем покритикуйте, пока я не зарылся.