Django app to tree in DB.
Project description
=====
treensl
=====
Приложение для создание структуры "дерево" в моделях Django типа — Вложенные
множества с ограничением по количеству уровней и возможному количеству детей
у родителя.
Ключ «id» - целочисленный. Либо int32 либо int64.
От размера целого зависят количества допустимых уровней и детей.
Связанный список с полями «id» и «parent», где «parent» ссылка на «id» родителя.
Значение нового «id» вычисляется на основании размерности дерева, «id» родителя,
и количества уже имеющихся у родителя детей.
Реализованное дерево сочетает достоинства деревьев типа «Связанный список»,
«Вложенные множества», «Материализованный путь».
Ключ — целое число (не строка).
Зная «id» элемента и размерность дерева (а мы всегда это знаем) можно осуществить:
- Вычисление диапазона детей, без запроса к БД
- Вычисление списка родителей, без запроса к БД
- Почти всегда, для получения данных, можно обойтись одним запрос к таблице
Недостаток — ограниченность размерности дерева разрядностью ключа.
После выбора размерности дерева, и начала работы с ним (то есть с заполнением таблицы),
будет уже нельзя изменить размерность.
Описание алгоритма в моей статье:
http://habrahabr.ru/post/166699/
Состав репозитария:
django_treensl — проект Django.
treensl — приложение, реализующее описание абстрактных таблиц-деревьев и
осуществляющее настройку БД (создание триггерных функций, вспомогательных функций,
таблицы хранящей размерности таблиц-деревьев).
myapp — приложение для примера. В нем создается модель-дерево, наследница от одной
из абстрактных таблиц приложения treensl, записывается во вспомогательную таблицу
размерность дерева, вставляется в дерево начальный элемент (первая запись, родитель
для всех остальных), и производится подключение таблицы к триггерным функциям в БД.
docs — на данный момент в этой папке один файл, текст программы для помощи в выборе
размерности дерева и «id» начального элемента. Программа на python2.
calc_values.py — в нем функции для вычисления диапазона детей, и списка родителей
без обращения к БД. Эти функции могут быть использованы в приложении myapp.
Приложение создавалось в Django 1.8
БД пока только PostgreSQL 9.1 +
Для установки скопируйте репозитарий к себе на диск, создайте БД, поменяйте настройки
в settings.py на свои, выполните manage.py migrate... можно запускать и смотреть работу
тестовой таблицы Group
treensl
=====
Приложение для создание структуры "дерево" в моделях Django типа — Вложенные
множества с ограничением по количеству уровней и возможному количеству детей
у родителя.
Ключ «id» - целочисленный. Либо int32 либо int64.
От размера целого зависят количества допустимых уровней и детей.
Связанный список с полями «id» и «parent», где «parent» ссылка на «id» родителя.
Значение нового «id» вычисляется на основании размерности дерева, «id» родителя,
и количества уже имеющихся у родителя детей.
Реализованное дерево сочетает достоинства деревьев типа «Связанный список»,
«Вложенные множества», «Материализованный путь».
Ключ — целое число (не строка).
Зная «id» элемента и размерность дерева (а мы всегда это знаем) можно осуществить:
- Вычисление диапазона детей, без запроса к БД
- Вычисление списка родителей, без запроса к БД
- Почти всегда, для получения данных, можно обойтись одним запрос к таблице
Недостаток — ограниченность размерности дерева разрядностью ключа.
После выбора размерности дерева, и начала работы с ним (то есть с заполнением таблицы),
будет уже нельзя изменить размерность.
Описание алгоритма в моей статье:
http://habrahabr.ru/post/166699/
Состав репозитария:
django_treensl — проект Django.
treensl — приложение, реализующее описание абстрактных таблиц-деревьев и
осуществляющее настройку БД (создание триггерных функций, вспомогательных функций,
таблицы хранящей размерности таблиц-деревьев).
myapp — приложение для примера. В нем создается модель-дерево, наследница от одной
из абстрактных таблиц приложения treensl, записывается во вспомогательную таблицу
размерность дерева, вставляется в дерево начальный элемент (первая запись, родитель
для всех остальных), и производится подключение таблицы к триггерным функциям в БД.
docs — на данный момент в этой папке один файл, текст программы для помощи в выборе
размерности дерева и «id» начального элемента. Программа на python2.
calc_values.py — в нем функции для вычисления диапазона детей, и списка родителей
без обращения к БД. Эти функции могут быть использованы в приложении myapp.
Приложение создавалось в Django 1.8
БД пока только PostgreSQL 9.1 +
Для установки скопируйте репозитарий к себе на диск, создайте БД, поменяйте настройки
в settings.py на свои, выполните manage.py migrate... можно запускать и смотреть работу
тестовой таблицы Group
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
django-treensl-0.1.2.tar.gz
(12.7 kB
view hashes)