Формат позиции сортируемой иерархии - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь отсортировать некоторые иерархические данные в SQL, но при этом натолкнулся на довольно простую проблему, которая относится к программированию с иерархическими данными в целом:

Не существует ли по сути своей изначальноСортируемый формат для ссылки на позицию в иерархии?
Под "изначально сортируемой" я подразумеваю, не нуждаясь в специальной логике сортировки.Буквы и цифры являются «сортируемыми по своей природе».

Возьмите следующий пример:

Hierarchy example

Я хочу отсортировать эти данные по родителю изатем по индексу, чтобы получить следующие результаты:

A1
B1
C1
C2
C3
B2
C4
C5
C6
C7
C8
C9
C10
C11
C12
C13

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

Моей первой мыслью было сделать что-то похожее на IP-адреса, где C4 будет 1.2.1 (корень 1 st).элемент 2 и дочерний элемент 1 первый дочерний элемент) Но эта сортировка присуща только в том случае, если вы сортируете ее по алфавиту, что прерывается, как только у вас появляется 10 или более дочерних элементов для родителя.C5 (1.2.2) будет ошибочно поставлен после C13 (1.2.10).Сортировка IP-адресов работает только потому, что количество адресов в адресе ограничено, поэтому вы можете дополнить его нулями.Идентификатор, который мне нужно сделать, должен работать для неограниченного числа детей.

Итак, есть ли способ отформатировать данные таким образом, чтобы их можно было сортировать по своей природе?

...