powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
7 сообщений из 7, страница 1 из 1
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
    #37740465
AlexMist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почитал и понравилась идея. 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
Single table inheritance - свойства в одной таблицы с замещением, каталог товаров.
    #37740578
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexMist ,

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

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

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

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

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

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

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

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

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

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


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