Хранение комментариев к иерархическим ресурсам в Postgres - PullRequest
0 голосов
/ 07 февраля 2020

В разрабатываемом веб-приложении мне нужна возможность оставлять заметки на любой иерархической структуре ресурсов (скажем, у меня есть иерархия ResourceA -> has many ResourceB -> has many ResourceC). То есть я могу оставлять заметки на ResourceA, ResourceB и ResourceC. Эти заметки похожи на комментарии, но вместо их потока есть только одна заметка, которую можно изменить на любом ресурсе

. Если я просматриваю страницу сведений для данного ResourceA, я хочу быть возможность видеть последние комментарии на всех ResourceB ниже, а также на всех 1011 * ниже. Аналогичным образом, когда я просматриваю один ResourceB, я хочу легко получить комментарии к ResourceC s ниже него, чтобы я мог выбрать несколько из них для отображения как «недавно обновленные».

Поскольку я использую PostgresQL, я изучил ltrees, чтобы заметки были связаны иерархически, но мне интересно, может ли это быть излишним, учитывая, что это не выглядит тривиальным в использовании. Кроме того, кажется, что намного сложнее обеспечить ссылочную целостность. Хотя я читал, что это может быть весьма эффективным решением для моего случая, потому что на каждом ресурсе будет только одна заметка, что означает, что в середине дерева не будет много вставок или удалений, если вообще будет.

Я также изучил полиморфную c ассоциацию / наследование таблиц классов, где у меня была бы таблица Noteable, в которой каждые ResourceA, ResourceB и ResourceC будут иметь внешний ключ, указывающий к ряду в этой таблице. Это позволило бы мне обеспечить ссылочную целостность, но я не уверен, хорошо ли это подходит для ltrees. Это может также добавить еще одну таблицу даром.


В общем, я ищу способы жениться на этих двоих, или, может быть, предложения двигаться в другом направлении.

Как вы, вероятно, можете сказать, я новичок в базах данных, и некоторые вещи, которые могут показаться очевидными, не для меня. Если бы кто-нибудь мог дать мне просветление о том, правильно ли я это выстраиваю. Спасибо!

...