Задать вопрос
Ukio_G
@Ukio_G
Незамысловатый юноша.

Как правильно придумать такой объект, у которого будет множество свойств?

Всем доброго времени суток.
Стоит небольшая проблема, стоит задача разработать приложение для Qt.
Суть - есть некая категория (допустим, продукты).
В этой категории есть некий элемент данного множества - вода. (В контексте формулировки вопроса, именно вода и будет объектом).
Но!
Вода может быть газированной, или скажем негазированной.
Однако, газированная вода может быть как лечебно-питьевой, так и просто газированной.
Так же если речь идет о воде в бутылке, у нее может быть разный объем (0.5, 1, 1.5, 5 литров).

У меня есть идея реализовать это дело (хранение категорий, а так же объектов этих категорий, а так же всевозможных свойств и свойств свойств) в таблицах MySQL.
Но, к сожалению, я не вполне представляю себе аккуратного и красивого решения данной задачи.
Стоит ли разбивать это на огромное количество таблиц, где будут свзязи ID объекта и свойства? А если мы указываем на свойство свойства? Отдельную таблицу? Но уровень вложенности будет бесконечным (в разумных пределах, конечно), не могу же я создать бесконечное количество таблиц. Не вяжется это с моим представлением о правильной разработке. Я думал о реализации через дерево, но как его реализовать в рамках MySQL таблиц?
Огромное спасибо всем, кто сможет подсказать правильное направление мысли.
  • Вопрос задан
  • 120 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@entermix
Как то так:
products:
id,
name

properties:
id,
name

values:
id,
property_id,
value,

products_values:
product_id
value_id


Если проще, можно так:

products:
id
name

product_properties:
id, name, value


https://stackoverflow.com/questions/6911297/mysql-...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AnneSmith
самая ленивая
если переведете гуглом документацию по OWCS (Oracle) и попробуете разобрать что там написано, то там как раз реализована такая модель; раньше таблицы их баз данных по какой-то причине не могли хранить больше 6 полей, или что-то в этом роде, не суть
https://docs.oracle.com/cd/E29542_01/doc.1111/e296...

как они обошли это: создали один единственный объект Flex Asset, который имеет 6 полей, то есть и ваш товар и ваши свойства становятся объектами одного и того же класса asset, и у каждого из них есть родитель

то есть вы создаете asset типа "товар" и asset типа "свойство", и в "свойстве" указываете родителя - asset типа "товар", получается обычное дерево и вы цепляете свойства к товару через поле "родитель"

в базе данных это выглядит как одна таблица, в которую записываются объекты разных типов, но одного и того же класса; в самой OWCS это даже реализовано через drag and drop, очень удобно

если все равно не понятно, то спрашивайте что именно
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы