Как сохранить заказ (перестановку) в sql db - PullRequest
3 голосов
/ 14 апреля 2010

У меня есть древовидная структура в таблице sql:

CREATE TABLE containers (
 container_id serial NOT NULL PRIMARY KEY,
 parent integer REFERENCES containers (container_id))

Теперь я хочу определить порядок между узлами с одним и тем же родителем.
Я думал о добавлении столбца node_index к ORDER BY, но это кажется неоптимальным, поскольку это включает изменение индекса большого количества узлов при изменении структуры. Это может включать добавление, удаление, изменение порядка или перемещение узлов из одного поддерева в другое.

Существует ли тип данных sql для упорядоченной последовательности или эффективный способ ее эмулировать? Не нужно быть полностью стандартным SQL, мне просто нужно решение для mssql и, надеюсь, postgresql

EDIT Чтобы было ясно, порядок произвольный. На самом деле, пользователь сможет перетаскивать узлы дерева в графическом интерфейсе

Ответы [ 2 ]

2 голосов
/ 14 апреля 2010

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

1 голос
/ 14 апреля 2010

Используя идею node_index, вы можете довольно легко обновить значения с помощью простого SQL (вы можете увеличивать / уменьшать значение в инструкции UPDATE). Я думаю, что для того, чтобы добиться большего, нам нужно знать более конкретные вещи о том, что вы храните и как вы будете его модифицировать.

...