Если вы используете реализацию DOM, у каждого из них есть встроенная встроенная форма:
# minidom
#
document.toprettyxml()
# 4DOM
#
xml.dom.ext.PrettyPrint(document, stream)
# pxdom (or other DOM Level 3 LS-compliant imp)
#
serializer.domConfig.setParameter('format-pretty-print', True)
serializer.writeToString(document)
Если вы используете что-то еще без своего собственного принтера - или эти симпатичные принтеры не совсем так делают, как вы хотите - вам, вероятно, придется писать или подклассифицировать собственный сериализатор.
Сохраните целочисленный столбец в своей таблице, названной 'положением'. Запишите 0 для первого объекта в Вашем списке, 1 для второго объекта, и т.д. Индексируйте тот столбец в своей базе данных, и когда Вы захотите вытащить свои значения, вид тем столбцом.
alter table linked_list add column position integer not null default 0;
alter table linked_list add index position_index (position);
select * from linked_list order by position;
Для вставки значения в индексе 3 измените положения строк 3 и выше, и затем вставьте:
update linked_list set position = position + 1 where position >= 3;
insert into linked_list (my_value, position) values ("new value", 3);
составьте таблицу с два сам ссылка на столбцы PreviousID и NextID. Если объект будет первой вещью в списке, то PreviousID будет пустым, если это будет последним, NextID будет пустым. SQL будет выглядеть примерно так:
create table tblDummy
{
PKColumn int not null,
PreviousID int null,
DataColumn1 varchar(50) not null,
DataColumn2 varchar(50) not null,
DataColumn3 varchar(50) not null,
DataColumn4 varchar(50) not null,
DataColumn5 varchar(50) not null,
DataColumn6 varchar(50) not null,
DataColumn7 varchar(50) not null,
NextID int null
}
Используя решение Adrian, но вместо того, чтобы увеличить 1, инкремент 10 или даже 100. Тогда вставки могут быть вычислены в половине различия того, между чем Вы вставляете, не имея необходимость обновлять все ниже вставки. Выберите число, достаточно большое для обработки среднего количества вставок - если ее слишком маленькое тогда необходимо будет отступить к обновлению всех строк с более высоким положением во время вставки.
Связанный список может быть сохранен с помощью рекурсивных указателей в таблице. Это - почти такие же иерархии, хранятся в Sql, и это использует рекурсивный шаблон ассоциации.
можно узнать больше о нем здесь .
я надеюсь, что это помогает.
Список может быть сохранен при наличии столбца, содержат смещение (индексное положение списка) - вставка в середине тогда увеличивает все выше нового родителя и затем делает вставку.
Самая простая опция составила бы таблицу со строкой на элемент списка, столбец для положения объекта и столбцы для других данных в объекте. Тогда можно использовать ORDER BY на столбце положения для получения в желаемом порядке.
create table linked_list
( list_id integer not null
, position integer not null
, data varchar(100) not null
);
alter table linked_list add primary key ( list_id, position );
Для управления списком просто обновляют положение и затем вставляют/удаляют записи по мере необходимости. Таким образом вставить объект в список 1 в индексе 3:
begin transaction;
update linked_list set position = position + 1 where position >= 3 and list_id = 1;
insert into linked_list (list_id, position, data)
values (1, 3, "some data");
commit;
, Так как операции в списке могут потребовать нескольких команд (например, вставка потребует ВСТАВКИ и ОБНОВЛЕНИЯ), удостоверьтесь, чтобы Вы всегда выполнили команды в транзакции.
изменение А этой простой опции должно иметь постепенное увеличение положения некоторым фактором для каждого объекта, сказать 100, так, чтобы при выполнении ВСТАВКИ необходимо было не всегда перенумеровывать положение следующих элементов. Однако это требует немного большего усилия разработать, когда увеличить следующие элементы, таким образом, Вы теряете простоту, но получаете производительность, если у Вас будет много вставок.
В зависимости от Ваших требований другие опции могли бы обратиться, такие как:
, Если Вы хотите выполнить много манипуляций в списке и не многих извлечений, можно предпочесть иметь столбец ID, указывающий на следующий объект в списке, вместо того, чтобы использовать столбец положения. Тогда Вам нужно к повторяющейся логике в извлечении списка для приведения объектов в порядок. Это может быть относительно легко реализовано в сохраненном proc.
, Если у Вас есть много списков, быстрый способ сериализировать и десериализовать Ваш список к тексту/двоичному файлу, и Вы только когда-либо хотите сохранить и получить весь список, затем сохранить весь список как единственное значение в отдельном столбце. Вероятно, не, что Вы просите здесь все же.
Существует несколько подходов, о которых я могу думать сразу же, каждый с отличающимися уровнями сложности и гибкости. Я предполагаю, что Ваша цель состоит в том, чтобы сохранить порядок в извлечении, вместо того, чтобы требовать устройства хранения данных как фактического связанного списка.
самый простой метод должен был бы присвоить порядковый номер каждой записи в таблице (например, 1, 2, 3...). Затем при получении записей определите порядок - на порядковом столбце для возвращения их в порядке.
Этот подход также позволяет Вам получать записи без учета на членство в списке, но допускает членство только в одном списке и может потребовать, чтобы дополнительный "идентификационный столбец" списка указал, которому списку принадлежит запись.
немного более тщательно продуманный, но также и более гибкий подход должен был бы хранить информацию о членстве в списке или списках в отдельной таблице. Таблице были бы нужны 3 столбца: идентификатор списка, порядковый номер и указатель внешнего ключа на запись данных. При этом подходе базовые данные ничего не знают о своем членстве в списках и могут легко быть включены в несколько списков.