Совет по структуре SQLite - PullRequest
       1

Совет по структуре SQLite

0 голосов
/ 30 августа 2011

У меня есть структура книги с главой, подразделом, разделом, подразделом, статьей и неизвестным количеством субартик, суб-субартик, суб-суб-субчастиц и т. Д.

Какой лучший способ структурировать это? Одна таблица с дочерними и родительскими отношениями, несколько таблиц?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 30 августа 2011

Чтобы определить, используются ли отдельные таблицы или одна большая таблица, вы должны внимательно посмотреть на каждый элемент - главу, подраздел и т. Д. - и решить, несут ли они атрибуты, отличные от других. Содержит ли глава что-то отличное от главы?

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

Если нет, то, возможно, это одна большая таблица с родителем / потомком, но, похоже, вы говорите об «именах» для глубины иерархии, которая снова склоняет меня к отдельным таблицам.

Также рассмотрите, как вы будете запрашивать и что будете искать.

1 голос
/ 30 августа 2011

Существует несколько способов сохранить древовидную структуру в реляционной базе данных. Чаще всего используются родительские указатели и вложенные множества .

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

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

Третий вариант - это материализованный путь 1010 *, который я лично считаю хорошим компромиссом между первыми двумя.

Тем не менее, если вы хотите хранить деревья произвольного размера (например, для разделов, подразделов, подразделов, ...), вам следует использовать одну из упомянутых реализаций дерева. Если у вас очень ограниченная максимальная глубина (например, максимум 3 слоя), вы можете избежать создания явной структуры данных. Но так как вещи всегда становятся более сложными, чем изначально, я бы посоветовал вам использовать реальную реализацию дерева.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...