Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Single table inheritance - свойства в одной таблицы с замещением, каталог товаров. / 7 сообщений из 7, страница 1 из 1
05.04.2012, 15:32
    #37740465
AlexMist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
Почитал и понравилась идея. 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.
SELECT product.*, property.product_id , property.property_category_id, property.p_1 , property.p_10, property.p_40 FROM  product INNER JOIN property ON product.id = property.product_id WHERE category_id = телефоны



Таким образом, мы используем свободные поля для хранения свойств. Т.е. для разного товара в одном столбце могут находится разные свойства (но одинаковый по типу).
При недостатке полей их можно создавать интерактивно.

Сумбурно получилось. Может я где то ошибся или этот уже древний велосипед =)
Хочется обсудить, спасибо за внимание.
...
Рейтинг: 0 / 0
05.04.2012, 16:19
    #37740578
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
AlexMist ,

Не забывайте про ограничение на максимально доспустимое количество полей в таблице. В разных СУБД оно разное.
И ориентироваться придётся на минимальное из них, если решение должно быть универсальным.
...
Рейтинг: 0 / 0
05.04.2012, 16:43
    #37740635
AlexMist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
servit,
Приветствую, да конечно! Думаю что и эту проблему можно решить. Как вам сама концепция, я пока что похожего не видел.
Может я что то упустил ?
...
Рейтинг: 0 / 0
05.04.2012, 16:51
    #37740651
miwaonline
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
AlexMistКак вам сама концепция, я пока что похожего не видел.

Есть такая штука, называется EAV.
...
Рейтинг: 0 / 0
05.04.2012, 16:53
    #37740656
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
AlexMistМожет я где то ошибся или этот уже древний велосипед =)
Ну например в Oracle e-Business Suite это называлось flex fields. В целом по Вашему решению можно сказать следующее:

1. Если товар предполагается относящимся к одной категории, вторая таблица бессмысленна, результат не отличается от добавления полей p1 ... p10 в первую.

2. Если товар предполагается включающим записи разных категорий (много записей во второй таблице к одному товару), результат мало отличается от EAV.

3. Разумеется, никуда не деваются общие проблемы подхода, в том числе "задлянафига такие пляски".
...
Рейтинг: 0 / 0
05.04.2012, 17:36
    #37740733
AlexMist
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
softwarer,
1) Спасибо , вторая таблица из за того что бы не дергать ее при выполнении простых действий и из за ограничений по количеству столбцов.

2) Отличия от EAV я считаю существенными (даже принципиальными - рост в ширину =) ), т.к. информацию о товаре получаем 2-мя простыми запросами.

3) Для "средней" гибкости, но производительной реализации каталога, если предположить, что на один товар будет приходится не более 100 числовых , 100 текстовых и 55 универсальных характеристик...

Конечно при большом количестве групп характеристик, работу начнет тормозить таблица rel.

Может есть похожие альтернативы, т.к. EAV не по душе мне?

Если очевидных "подводных камней" нет, можно задуматься над реализацией.
...
Рейтинг: 0 / 0
05.04.2012, 18:23
    #37740824
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
Прошел по ссылке.
Фаулер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. Сначала делайте именно его, а только потом можете корежить вашу структуру.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Single table inheritance - свойства в одной таблицы с замещением, каталог товаров. / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]