Действительно ли модуль PostgreSQL Ltree является подходящим вариантом для потоковых комментариев?

Тег формы не поддерживает метод patch. Он должен быть либо получен, либо опубликован

9
задан Cory R. King 4 March 2009 в 16:08
поделиться

3 ответа

  1. Да и да;
  2. Иерархия разделов в базе знаний (одна из реализаций);
  3. Да;

Определение одной из рассматриваемых таблиц:

                                                   Table "knowledgebase.section"
           Column           |           Type           |                                  Modifiers
----------------------------+--------------------------+-----------------------------------------------------------------------------
 section_sid                | integer                  | not null default nextval('knowledgebase.section_section_sid_seq'::regclass)
 section                    | character varying        | not null
 description                | character varying        |
 path                       | ltree                    | not null
 is_active                  | boolean                  | not null default true
 role_sid                   | integer                  | not null
 last_modified_by           | integer                  | not null
 creation_datetime          | timestamp with time zone | not null default now()
 last_modification_datetime | timestamp with time zone | not null default now()
 is_expanded                | boolean                  | not null default false
 section_idx                | tsvector                 |
Indexes:
    "section_sid_pkey" PRIMARY KEY, btree (section_sid)
    "section_section_key" UNIQUE, btree (section)
    "idxsection_idx" gist (section_idx)
    "path_gist_idx" gist (path)
Foreign-key constraints:
    "last_modified_by_fkey" FOREIGN KEY (last_modified_by) REFERENCES "user"."role"(role_sid) ON UPDATE CASCADE ON DELETE RESTRICT
    "role_sid_fkey" FOREIGN KEY (role_sid) REFERENCES "user"."role"(role_sid) ON  UPDATE CASCADE ON DELETE RESTRICT
Triggers:
    section_idx_update BEFORE INSERT OR UPDATE ON knowledgebase.section FOR EACH ROW EXECUTE PROCEDURE tsearch2('section_idx', 'section')

Столбец "пути" использует первичный ключ в качестве маркировки.

Образец текущего содержания той таблицы (относительно первичного ключа и столбца "пути"):

  section_sid | path
 -------------+-------
           53 | 34.53
           56 | 56
           55 | 29.55
           35 | 35
           54 | 34.54
           37 | 30.37
          ... | ...
6
ответ дан 4 December 2019 в 19:36
поделиться

Версия 8.4 PostgreSQL будет приносить Общую функциональность Выражений Таблицы в ядро с WITH и WITH... RECURSIVE выражения. При изменении старого кода можно хотеть ожидать, до 8.4 выпущен, поскольку затем Вы не должны будете волноваться ни о каких несовместимостях между Ltree и новым базовым синтаксисом. Если Вы будете работать со старым кодом или не захотите ожидать 8,4, то Вы, вероятно, захотите удостовериться, что Вы пишете код, который легко переводим к новому синтаксису, особенно если Вы изменяете старую схему или разрабатываете новую.

См. также:

2
ответ дан 4 December 2019 в 19:36
поделиться

Я рекомендую, чтобы любой реализующий иерархические отношения в SQL считал Деревья Joe Celko и Иерархии в SQL для Присяжных острословов.

Пересечение родительских дочерних ссылок произвольной глубины может быть очень неэффективным при использовании просто parent_id. Книга описывает методы, которые делают этот доступ быстро.

Одна стратегия (который я, оказывается, использую) может также быть найдена бесплатно в этом ряду статей:

4
ответ дан 4 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

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