2016-10-10 8 views
1

Я хочу создать иерархические данные с неизвестной глубиной следующим образом:Как создать таблицы базы данных для иерархических данных с неизвестной глубиной?

Создайте категории и подкатегории, и для этих подкатегорий у них также будут подкатегории и так далее.

Глубина подкатегорий неизвестна и будет выполняться только пользователем во время выполнения.

Что я, хотя о том, чтобы, но их все в одной таблице и имеют родительский столбец, удерживающий идентификатор родительской категории, как это:

enter image description here

Я не знаю, если это право способ сделать это, но я не вижу другого пути.

Я сделал быстрый поиск, и то, что я нашел, напрямую не связано с дизайном таблицы БД.

Я использую MS SQL Server 2012

+0

Это, кажется, общий вид вопроса. Есть вопросы, на которые вы не сможете ответить, используя этот дизайн? Как насчет сохранения данных? –

+0

Вы можете прочитать о [HIERARCHYID] (https://msdn.microsoft.com/en-us/library/bb677290.aspx). Как правило, вы должны хранить все строки в одной таблице и присоединяться к родительскому. Такие структуры очень неуклюжие ... – Shnugo

+0

@ Шнуго Значит, присоединившись к тому же, что я упомянул в своем вопросе? –

ответ

2

Есть 3 общих подхода к этому & 1 не так распространен.

1. смежности списки (ваш подход) Pro - легко понять, быстро вставки в любом месте Con - медленно запрашивать деревья неизвестной глубины рекурсивно

2. Вложенные наборы Про - быстро запрос Con - Вкладыши в середине списка медленно

3. Путь - как hierarchyid` в (в основном двоичный путь) Pro - быстро Con -, как правило, имеют hierarchyid` в ограниченную длину - я думаю, что `hierarchyid` составляет около 892 байт Макс

4. Таблица закрытия Pro - Лучшие вложенные наборы & списки смежности. Быстрые вставки & выбирает. Con - Немного трудно получить вокруг головы сначала, но стоит усилий, если производительность является проблемой

Источник: SQL Antipatterns - Билл Karwin

0

Наиболее широко используемый шаблон проектирования для represnting иерархии в таблицах называется «Примыкание List». Это образец, который вы представили в вопросе.

Один из вариантов называется «Вложенные наборы». Вот краткое описание вложенных наборов: https://en.wikipedia.org/wiki/Nested_set_model

Если вы посмотрите список Adjacency List vs Nested Set, вы получите много статей, в которых обсуждается компромисс между ними.

В целом, список Адъютантов легко обновить, но с трудом работать, кроме основных операций. Вложенный набор сложно обновить, но с ним легко работать. Операции, такие как поиск пути от корня, найти поддерева являются простыми и понятными.

 Смежные вопросы

  • Нет связанных вопросов^_^