Модель Adjecency List OR Модель вложенного набора, какую модель данных мне следует использовать для хранения моих иерархических данных? - PullRequest
0 голосов
/ 19 ноября 2010

Я должен хранить сообщения, которые мое веб-приложение получает из Twitter, в локальной базе данных.Цель хранения сообщений заключается в том, что мне нужно отображать эти сообщения в иерархическом порядке, т.е. определенные сообщения (т.е. обновления статуса), которые пользовательский ввод через мое приложение, являются дочерними узлами других (я должен показать их как элемент подсписка родительского сообщения).В какой модели данных следует использовать модель списка смежности ИЛИ модель вложенного набора?Я должен управлять четырьмя типами сообщений и сообщений в каждой категории может иметь два дочерних узла.Еще один вопрос здесь заключается в том, что то, что я вижу (понимаю) в обоих случаях, что ввод управляется вручную, то есть как указывается ссылка на родительский узел в модели смежности или справа налево в Nested List.Мое приложение извлекает данные сообщений из твиттера, например:

foreach ($xml4->entry as $status4) {
       echo'<li>'.$status4->content.'</li>';
       } 

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

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

Если у вас будут более или менее глубокие деревья данных (начиная с каждого корневого узла), рассмотрите возможность использования вложенного набора, поскольку AL будет медленным.

1 голос
/ 19 ноября 2010

Когда вы говорите

Глубина дерева составляет 2 узла. то есть каждый у родительского сообщения может быть два дочерних узла.

Я запутался.

Если у каждого из двух дочерних узлов может быть больше потомков, то вы берете не глубину, а ширину ветви узла.

1) глубина действительно = 2

Если ваша максимальная глубина действительно равна 2 (другими словами, все узлы подключаются к корневому узлу или узлам нулевого уровня за 2 шага; все же, другими словами, для каждого узла нет другого предка, кроме родителя и деда), тогда вы могли бы даже использовать реляционную модель напрямую для хранения иерархических данных (либо посредством самостоятельного объединения, что не так уж плохо при такой малой максимальной глубине, либо путем разделения данных на 3 объекта - бабушку и дедушку, родителей и детей)

2) глубина >> 2

Если номер 2 был шириной, а глубина - переменной и потенциально довольно глубокой, то посмотрите на вложенные множества с двумя дополнительными возможностями для изучения

  • используя идею вложенного набора, вы можете исследовать тип geom для хранения иерархических данных (преимущества могут быть не столь интересными - мало полезных операторов, одно поле, возможно, лучшая стратегия индексации)
  • продолжение дроби (основываясь на вложенном множестве, tropashko предложил обобщение, которое показалось интересным, поскольку они обещали улучшить некоторые проблемы с вложенными множествами; хотя и не реализовали его, так что ... делайте свое тесты).
...