В разрабатываемом веб-приложении мне нужна возможность оставлять заметки на любой иерархической структуре ресурсов (скажем, у меня есть иерархия ResourceA -> has many ResourceB -> has many ResourceC
). То есть я могу оставлять заметки на ResourceA
, ResourceB
и ResourceC
. Эти заметки похожи на комментарии, но вместо их потока есть только одна заметка, которую можно изменить на любом ресурсе
. Если я просматриваю страницу сведений для данного ResourceA
, я хочу быть возможность видеть последние комментарии на всех ResourceB
ниже, а также на всех 1011 * ниже. Аналогичным образом, когда я просматриваю один ResourceB
, я хочу легко получить комментарии к ResourceC
s ниже него, чтобы я мог выбрать несколько из них для отображения как «недавно обновленные».
Поскольку я использую PostgresQL, я изучил ltrees
, чтобы заметки были связаны иерархически, но мне интересно, может ли это быть излишним, учитывая, что это не выглядит тривиальным в использовании. Кроме того, кажется, что намного сложнее обеспечить ссылочную целостность. Хотя я читал, что это может быть весьма эффективным решением для моего случая, потому что на каждом ресурсе будет только одна заметка, что означает, что в середине дерева не будет много вставок или удалений, если вообще будет.
Я также изучил полиморфную c ассоциацию / наследование таблиц классов, где у меня была бы таблица Noteable
, в которой каждые ResourceA
, ResourceB
и ResourceC
будут иметь внешний ключ, указывающий к ряду в этой таблице. Это позволило бы мне обеспечить ссылочную целостность, но я не уверен, хорошо ли это подходит для ltrees
. Это может также добавить еще одну таблицу даром.
В общем, я ищу способы жениться на этих двоих, или, может быть, предложения двигаться в другом направлении.
Как вы, вероятно, можете сказать, я новичок в базах данных, и некоторые вещи, которые могут показаться очевидными, не для меня. Если бы кто-нибудь мог дать мне просветление о том, правильно ли я это выстраиваю. Спасибо!