|
|
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
Почитал и понравилась идея. http://martinfowler.com/eaaCatalog/singleTableInheritance.html Смысл в том, что бы хранить свойства товаров в полях (классы у нас будут виртуальные): id , свойство_товара1, свойство_товара_2 и т.д , а использовать при выборке только нужные поля. Это ведет к тому, что у таблицы становиться очень много пустых полей... но есть большой плюс - удобство поиска, фильтрации и прочее. Немного поразмыслив, в голову пришла идея оптимизации хранения свойств, путем ввода связующей таблицы, логика работы решается на стороне php. Все товары с общими характеристиками хранятся в одной таблице product : id, category_id, свойство_1 ... Вторая таблица property (уникальные характеристики) id, product_id, property_category_id , p_1, p_2, p_3 ... Тут хранятся свойства товаров (1 товар - 1 запись). В поле property_category_id хранится идентификатор категории свойств , который назначается категориям товаров. Например category_id : телефоны property_category_id : свойства_телефонов Третья таблица хранит соответствие полей таблицы property и категорий свойств rel . id , property_category_id, property_fields_name, name property_category_id : свойства_телефонов property_fields_name : p_1 name : емкость аккумулятора Теперь мы создаем в таблице property 10 int, 10 varchar(255), 10 bool и т.д. И " связываем " через третью таблицу. Если мы заходим в категорию телефоны, то для поиска и фильтрации нужно будет сначала сделать запрос в третью таблицу и на основе его сформировать SELECT Код: sql 1. Таким образом, мы используем свободные поля для хранения свойств. Т.е. для разного товара в одном столбце могут находится разные свойства (но одинаковый по типу). При недостатке полей их можно создавать интерактивно. Сумбурно получилось. Может я где то ошибся или этот уже древний велосипед =) Хочется обсудить, спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 15:32 |
|
||
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
AlexMist , Не забывайте про ограничение на максимально доспустимое количество полей в таблице. В разных СУБД оно разное. И ориентироваться придётся на минимальное из них, если решение должно быть универсальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 16:19 |
|
||
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
servit, Приветствую, да конечно! Думаю что и эту проблему можно решить. Как вам сама концепция, я пока что похожего не видел. Может я что то упустил ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 16:43 |
|
||
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
AlexMistКак вам сама концепция, я пока что похожего не видел. Есть такая штука, называется EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 16:51 |
|
||
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
AlexMistМожет я где то ошибся или этот уже древний велосипед =) Ну например в Oracle e-Business Suite это называлось flex fields. В целом по Вашему решению можно сказать следующее: 1. Если товар предполагается относящимся к одной категории, вторая таблица бессмысленна, результат не отличается от добавления полей p1 ... p10 в первую. 2. Если товар предполагается включающим записи разных категорий (много записей во второй таблице к одному товару), результат мало отличается от EAV. 3. Разумеется, никуда не деваются общие проблемы подхода, в том числе "задлянафига такие пляски". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 16:53 |
|
||
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
softwarer, 1) Спасибо , вторая таблица из за того что бы не дергать ее при выполнении простых действий и из за ограничений по количеству столбцов. 2) Отличия от EAV я считаю существенными (даже принципиальными - рост в ширину =) ), т.к. информацию о товаре получаем 2-мя простыми запросами. 3) Для "средней" гибкости, но производительной реализации каталога, если предположить, что на один товар будет приходится не более 100 числовых , 100 текстовых и 55 универсальных характеристик... Конечно при большом количестве групп характеристик, работу начнет тормозить таблица rel. Может есть похожие альтернативы, т.к. EAV не по душе мне? Если очевидных "подводных камней" нет, можно задуматься над реализацией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 17:36 |
|
||
|
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
|
|||
|---|---|---|---|
|
#18+
Прошел по ссылке. ФаулерWhen mapping to a relational database, we try to minimize the joins that can quickly mount up when processing an inheritance structure in multiple tables Это неверно (как и минимизация числа таблиц, полей и прочих благоглупостей) Остальное можно не читать. softwarer 3. Разумеется, никуда не деваются общие проблемы подхода, в том числе "задлянафига такие пляски". +1 2 AlexMist Откройте для себя старый добрый банальней метод ER. Сначала делайте именно его, а только потом можете корежить вашу структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2012, 18:23 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37740635&tid=1541753]: |
0ms |
get settings: |
8ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
211ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 291ms |
| total: | 572ms |

| 0 / 0 |
