SlideShare a Scribd company logo
Способы хранения и алгоритмы обработки различных структур в реляционной БД Списки, деревья, графы
Простой Индексированный список Связный и двусвязный список Списки
Добавление элемента в начало/конец/внутрь Перемещение элемента вперед/назад Удаление элемента Выборка диапазона элементов (с/по) Поиск предыдущего/следующего элемента Операции со списками
Добавление: Находится нужный индекс и делается вставка с пересчетом индексов последующих элементов списка Перемещение: Старый индекс = Индекс перемещаемого элемента Индекс перемещаемого элемента = Индекс новой позиции Изменяем индексы элементов между Индексом новой позиции и Старым индексом (или наоборот) Списки. Индексированный список
Удаление: Изменяем индексы последующих элементов после удаляемого Выборка диапазона: Запрос элементов с индексами между индексами крайних элементов Следующий/предыдущий: Запрос элемента с индексом на единицу большим/меньшим Списки. Индексированный список
Преимущества: Простота выборок Простота хранения Недостатки: Изменение списка требует небольшой обработки остальных элементов Варианты: Индекс может быть например датой Списки. Индексированный список
Добавление в начало: Во вставляемом элементе указываем на первый и помечаем его первым Добавление в конец: Находим последний элемент и указываем на вставляемый Добавление внутрь: Находим элемент после которого нужно добавить Во вставляемом элементе указываем следующий из найденного В найденном элементе указываем на вставляемый Списки. Связный список
Перемещение: Находим предыдущий элемент от перемещаемого В найденном элементе указываем на следующий элемент из перемещаемого Если не нашли нет, значит помечаем следующий элемент как первый Делаем вставку перемещаемого элемента в нужную позицию списка Удаление: Находим предыдущий элемент от удаляемого В найденном элементе указываем на следующий элемент из удаляемого Если не нашли нет, значит помечаем следующий элемент как первый Списки. Связный список
Выборка диапазона: В цикле начиная с начала диапазона по одному выбираем следующий элемент пока не конец диапазона Следующий: Выбираем из указателя в элементе Предыдущий: Если это не первый элемент, то выбрать элемент в котором есть указатель на текущий Списки. Связный список
Преимущества: Относительная простота изменения списка Недостатки: Сложная навигация по списку и выборки Варианты: Связующим полем может быть дата Списки. Связный список
Смежные вершины (Adjacency List) Материализованный путь (Materialized Path) Вложенные множества (Nested Set) Деревья
Добавление узла Перемещение узла Удаление узла Выборка пути от узла до корня Выборка ветки дерева Выборка узлов уровня Выборка конечных узлов Выборка соседних узлов Операции с деревьями
Добавление: По аналогии со связным списком Перемещение: Удаление из связного списка Вставка в связный список Удаление: Удаление из связного списка Деревья. Смежные вершины
Выборка пути от узла до корня В цикле выбираем родителя текущего узла, затем родителя делаем текущим узлом и продолжаем до корня Выборка ветки дерева относительно узла: Выбираем всех детей для текущего узла затем в цикле по детям выполняем рекурсивно такой же выбор детей Деревья. Смежные вершины
Выборка конечных узлов: Выбираем текущим узел корня дерева Ищем всех, у кого являемся родителем Если не нашли таких узлов, то добавляем текущий узел в выбранные Если нашли, то в цикле рекурсивно выполняем с п.2) для найденных узлов Деревья. Смежные вершины
Выборка уровня дерева: Выбираем текущим узел корня дерева Если достигнут нужный уровень, то добавляем узел в выбранные Ищем всех, у кого являемся родителем, затем в цикле рекурсивно выполняем с п.2) для найденных узлов Выборка соседних узлов: Выбрать узлы у которых родитель совпадает с текущим узлом Деревья. Смежные вершины
Преимущества: Простота хранения Простота изменения Недостатки: Сложность работы с ветками Сложность работы с уровнями Сложность определения принадлежности к родителям/детям Деревья. Смежные вершины
Добавление: Находим место и путь в дереве для вставки В добавляемом узле указывается полный путь Перемещение: Находим новое место и путь в дереве для вставки У перемещаемого узла и всех его дочерних узлов изменяется полный путь Удаление: Удаление узла Деревья. Материализованный путь
Выборка пути от узла до корня Выбираем те узлы дерева, в которых полный путь является началом полного пути заданного узла Выборка ветки дерева относительно узла: Выбираем те узлы, у которых полный путь начинается с полного пути заданного узла Деревья. Материализованный путь
Выборка конечных узлов: Выбрать те узлы, по которым не найдется узлов с полным путем начинающимся с полного пути текущего узла Выборка уровня дерева: Выбрать узлы, у которых в полном пути присутствует элемент искомого уровня Выборка соседних узлов: Выбрать узлы, у которых полный путь совпадает с заданным узлом за исключением последнего элемента пути Деревья. Материализованный путь
Преимущества: Простота работы с ветками Простота определения принадлежности к родителям/детям Недостатки: Сложность работы с уровнями Небольшая сложность в изменении Варианты: Добавить атрибут уровня Деревья. Материализованный путь
Добавление: Пересчет узлов дерева находящихся правее добавляемого узла Перемещение: Пересчет узлов дерева находящихся между начальной позицией перемещаемого элемента и конечной позицией (или наоборот) Удаление: Пересчет узлов дерева находящихся правее удаляемого узла Деревья. Вложенные множества
Выборка пути от узла до корня Выбираем те узлы дерева, у которых правое число больше правого числа и левое число меньше левого числа заданного узла Выборка ветки дерева относительно узла: Выбираем те узлы, у которых 	левое число находится между 	левым и правым числом заданного узла Деревья. Вложенные множества
Выборка конечных узлов: Выбрать те узлы, у которых разница между левым и правым числом равна 1 Выборка уровня дерева: Алгоритма нет! (я не знаю) Выборка соседних узлов: Постепенно выбирать узлы, у которых левое число отличается на 1 от правого числа начального элемента и у которых правое число отличается на 1 от левого числа начального элемента Деревья. Вложенные множества
Преимущества: Простота работы с ветками Простота определения принадлежности к родителям/детям Недостатки: Сложность работы с уровнями Сложность в изменении Варианты: Добавить атрибут уровня Деревья. Вложенные множества
Список ребер Графы
Добавление вершины/ребра Перемещение вершины/ребра Удаление вершины/ребра Получение всех вершин/ребер родителей Получение всех вершин/ребер потомков Поиск пути между вершинами Операции с графами
Добавление: Добавление ребер ведущих к и из вершины Перемещение: Удаление ребер ведущих к и из перемещаемой вершине Добавление ребер ведущих к и из новой позиции вершины Удаление: Удаление ребер ведущих к и из удаляемой вершины Графы. Список ребер
Получение родителей: Находим вершины приводящие к текущей вершине, включаем их в список просмотренных вершин В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока ест вершины Графы. Список ребер
Получение потомков: Находим вершины выводящие из текущей вершины, включаем их в список просмотренных вершин В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока есть вершины Графы. Список ребер
Получение пути: Аналогично процессу получения родителей для начальной вершины, но ищем до получения конечной вершины Или аналогично процессу получения потомков для начальной вершины, но ищем до получения конечной вершины Графы. Список ребер
Преимущества: Простота ведения Недостатки: Сложность поиска пути Сложность поиска родителей и потомков Варианты: Список достижимости Графы. Список ребер
Графы. Список достижимости
Добавление: Добавление ребра Добавление всех путей ведущих по этому ребру Перемещение: Удаление ребра с зависимыми путями Добавление ребра с зависимыми путями Удаление: Удаление ребра и всех зависимых путей Графы. Список достижимости
Получение родителе: Выбрать все «ребра» и их вершины по которым достижима заданная вершина Получение потомков: Выбрать все «ребра» и их вершины которые достижимы из заданной вершины Получение пути: Найти «ребро» в котором  присутствуют обе вершины В цикле построить полный путь Графы. Список достижимости
Преимущества: Пути строятся при ведении графа Простота навигации по графу Недостатки: Небольшая сложность ведения графа Графы. Список достижимости
Храните данные в базах данных … и регулярно делайте backup! Конец

More Related Content

Viewers also liked

Поведение потребителя
Поведение потребителяПоведение потребителя
Поведение потребителяit-park
 
Поликлиника
ПоликлиникаПоликлиника
Поликлиника
it-park
 
Domo Sapiens
Domo SapiensDomo Sapiens
Domo Sapiensit-park
 
Ай да мастер
Ай да мастер Ай да мастер
Ай да мастер it-park
 
ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6
Benz 'ExTreame
 
105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授
105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授
105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授
文化大學
 
Catalogue DAZZ Final revisi 9
Catalogue DAZZ Final revisi 9Catalogue DAZZ Final revisi 9
Catalogue DAZZ Final revisi 9
Budi Santo
 
Voluntários em todo o mundo
Voluntários em todo o mundoVoluntários em todo o mundo
Voluntários em todo o mundo
Mérito Brasil
 
resume2016
resume2016resume2016
resume2016
Natalya Pulaski
 

Viewers also liked (10)

Поведение потребителя
Поведение потребителяПоведение потребителя
Поведение потребителя
 
Поликлиника
ПоликлиникаПоликлиника
Поликлиника
 
Domo Sapiens
Domo SapiensDomo Sapiens
Domo Sapiens
 
Ай да мастер
Ай да мастер Ай да мастер
Ай да мастер
 
Manget
MangetManget
Manget
 
ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6ใบงานสำรวจตนเอง M6
ใบงานสำรวจตนเอง M6
 
105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授
105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授
105.08.24 電話禮儀與抱怨電話處理實務訓練課程-遠東科技大學-詹翔霖教授
 
Catalogue DAZZ Final revisi 9
Catalogue DAZZ Final revisi 9Catalogue DAZZ Final revisi 9
Catalogue DAZZ Final revisi 9
 
Voluntários em todo o mundo
Voluntários em todo o mundoVoluntários em todo o mundo
Voluntários em todo o mundo
 
resume2016
resume2016resume2016
resume2016
 

More from it-park

Delaidut
Delaidut Delaidut
Delaidut
it-park
 
Оценкаремонта.рф
Оценкаремонта.рфОценкаремонта.рф
Оценкаремонта.рф
it-park
 
Просто доставка
Просто доставка Просто доставка
Просто доставка
it-park
 
Карта добра
Карта добра Карта добра
Карта добра
it-park
 
Zig zag
Zig zag Zig zag
Zig zag
it-park
 
КИНОБИЛЕТЫ.РФ
КИНОБИЛЕТЫ.РФКИНОБИЛЕТЫ.РФ
КИНОБИЛЕТЫ.РФ
it-park
 
Tatar ornament
Tatar ornamentTatar ornament
Tatar ornament
it-park
 
Open event
Open eventOpen event
Open event
it-park
 
Domscanner
Domscanner Domscanner
Domscanner
it-park
 
Nubex.ru
Nubex.ruNubex.ru
Nubex.ru
it-park
 
Finbox
FinboxFinbox
Finbox
it-park
 
2code.ru
2code.ru2code.ru
2code.ru
it-park
 
Нексмед
НексмедНексмед
Нексмед
it-park
 
Bonusmall.ru pitch pi
Bonusmall.ru pitch piBonusmall.ru pitch pi
Bonusmall.ru pitch pi
it-park
 
kvartirui
kvartiruikvartirui
kvartirui
it-park
 
Iq 300
Iq 300 Iq 300
Iq 300
it-park
 
Helper auditor
Helper auditorHelper auditor
Helper auditor
it-park
 
Wedvice
WedviceWedvice
Wedvice
it-park
 
Bookingame
BookingameBookingame
Bookingame
it-park
 
Rs logo
Rs logoRs logo
Rs logo
it-park
 

More from it-park (20)

Delaidut
Delaidut Delaidut
Delaidut
 
Оценкаремонта.рф
Оценкаремонта.рфОценкаремонта.рф
Оценкаремонта.рф
 
Просто доставка
Просто доставка Просто доставка
Просто доставка
 
Карта добра
Карта добра Карта добра
Карта добра
 
Zig zag
Zig zag Zig zag
Zig zag
 
КИНОБИЛЕТЫ.РФ
КИНОБИЛЕТЫ.РФКИНОБИЛЕТЫ.РФ
КИНОБИЛЕТЫ.РФ
 
Tatar ornament
Tatar ornamentTatar ornament
Tatar ornament
 
Open event
Open eventOpen event
Open event
 
Domscanner
Domscanner Domscanner
Domscanner
 
Nubex.ru
Nubex.ruNubex.ru
Nubex.ru
 
Finbox
FinboxFinbox
Finbox
 
2code.ru
2code.ru2code.ru
2code.ru
 
Нексмед
НексмедНексмед
Нексмед
 
Bonusmall.ru pitch pi
Bonusmall.ru pitch piBonusmall.ru pitch pi
Bonusmall.ru pitch pi
 
kvartirui
kvartiruikvartirui
kvartirui
 
Iq 300
Iq 300 Iq 300
Iq 300
 
Helper auditor
Helper auditorHelper auditor
Helper auditor
 
Wedvice
WedviceWedvice
Wedvice
 
Bookingame
BookingameBookingame
Bookingame
 
Rs logo
Rs logoRs logo
Rs logo
 

способы хранения структур в бд2

  • 1. Способы хранения и алгоритмы обработки различных структур в реляционной БД Списки, деревья, графы
  • 2. Простой Индексированный список Связный и двусвязный список Списки
  • 3. Добавление элемента в начало/конец/внутрь Перемещение элемента вперед/назад Удаление элемента Выборка диапазона элементов (с/по) Поиск предыдущего/следующего элемента Операции со списками
  • 4. Добавление: Находится нужный индекс и делается вставка с пересчетом индексов последующих элементов списка Перемещение: Старый индекс = Индекс перемещаемого элемента Индекс перемещаемого элемента = Индекс новой позиции Изменяем индексы элементов между Индексом новой позиции и Старым индексом (или наоборот) Списки. Индексированный список
  • 5. Удаление: Изменяем индексы последующих элементов после удаляемого Выборка диапазона: Запрос элементов с индексами между индексами крайних элементов Следующий/предыдущий: Запрос элемента с индексом на единицу большим/меньшим Списки. Индексированный список
  • 6. Преимущества: Простота выборок Простота хранения Недостатки: Изменение списка требует небольшой обработки остальных элементов Варианты: Индекс может быть например датой Списки. Индексированный список
  • 7. Добавление в начало: Во вставляемом элементе указываем на первый и помечаем его первым Добавление в конец: Находим последний элемент и указываем на вставляемый Добавление внутрь: Находим элемент после которого нужно добавить Во вставляемом элементе указываем следующий из найденного В найденном элементе указываем на вставляемый Списки. Связный список
  • 8. Перемещение: Находим предыдущий элемент от перемещаемого В найденном элементе указываем на следующий элемент из перемещаемого Если не нашли нет, значит помечаем следующий элемент как первый Делаем вставку перемещаемого элемента в нужную позицию списка Удаление: Находим предыдущий элемент от удаляемого В найденном элементе указываем на следующий элемент из удаляемого Если не нашли нет, значит помечаем следующий элемент как первый Списки. Связный список
  • 9. Выборка диапазона: В цикле начиная с начала диапазона по одному выбираем следующий элемент пока не конец диапазона Следующий: Выбираем из указателя в элементе Предыдущий: Если это не первый элемент, то выбрать элемент в котором есть указатель на текущий Списки. Связный список
  • 10. Преимущества: Относительная простота изменения списка Недостатки: Сложная навигация по списку и выборки Варианты: Связующим полем может быть дата Списки. Связный список
  • 11. Смежные вершины (Adjacency List) Материализованный путь (Materialized Path) Вложенные множества (Nested Set) Деревья
  • 12. Добавление узла Перемещение узла Удаление узла Выборка пути от узла до корня Выборка ветки дерева Выборка узлов уровня Выборка конечных узлов Выборка соседних узлов Операции с деревьями
  • 13. Добавление: По аналогии со связным списком Перемещение: Удаление из связного списка Вставка в связный список Удаление: Удаление из связного списка Деревья. Смежные вершины
  • 14. Выборка пути от узла до корня В цикле выбираем родителя текущего узла, затем родителя делаем текущим узлом и продолжаем до корня Выборка ветки дерева относительно узла: Выбираем всех детей для текущего узла затем в цикле по детям выполняем рекурсивно такой же выбор детей Деревья. Смежные вершины
  • 15. Выборка конечных узлов: Выбираем текущим узел корня дерева Ищем всех, у кого являемся родителем Если не нашли таких узлов, то добавляем текущий узел в выбранные Если нашли, то в цикле рекурсивно выполняем с п.2) для найденных узлов Деревья. Смежные вершины
  • 16. Выборка уровня дерева: Выбираем текущим узел корня дерева Если достигнут нужный уровень, то добавляем узел в выбранные Ищем всех, у кого являемся родителем, затем в цикле рекурсивно выполняем с п.2) для найденных узлов Выборка соседних узлов: Выбрать узлы у которых родитель совпадает с текущим узлом Деревья. Смежные вершины
  • 17. Преимущества: Простота хранения Простота изменения Недостатки: Сложность работы с ветками Сложность работы с уровнями Сложность определения принадлежности к родителям/детям Деревья. Смежные вершины
  • 18. Добавление: Находим место и путь в дереве для вставки В добавляемом узле указывается полный путь Перемещение: Находим новое место и путь в дереве для вставки У перемещаемого узла и всех его дочерних узлов изменяется полный путь Удаление: Удаление узла Деревья. Материализованный путь
  • 19. Выборка пути от узла до корня Выбираем те узлы дерева, в которых полный путь является началом полного пути заданного узла Выборка ветки дерева относительно узла: Выбираем те узлы, у которых полный путь начинается с полного пути заданного узла Деревья. Материализованный путь
  • 20. Выборка конечных узлов: Выбрать те узлы, по которым не найдется узлов с полным путем начинающимся с полного пути текущего узла Выборка уровня дерева: Выбрать узлы, у которых в полном пути присутствует элемент искомого уровня Выборка соседних узлов: Выбрать узлы, у которых полный путь совпадает с заданным узлом за исключением последнего элемента пути Деревья. Материализованный путь
  • 21. Преимущества: Простота работы с ветками Простота определения принадлежности к родителям/детям Недостатки: Сложность работы с уровнями Небольшая сложность в изменении Варианты: Добавить атрибут уровня Деревья. Материализованный путь
  • 22. Добавление: Пересчет узлов дерева находящихся правее добавляемого узла Перемещение: Пересчет узлов дерева находящихся между начальной позицией перемещаемого элемента и конечной позицией (или наоборот) Удаление: Пересчет узлов дерева находящихся правее удаляемого узла Деревья. Вложенные множества
  • 23. Выборка пути от узла до корня Выбираем те узлы дерева, у которых правое число больше правого числа и левое число меньше левого числа заданного узла Выборка ветки дерева относительно узла: Выбираем те узлы, у которых левое число находится между левым и правым числом заданного узла Деревья. Вложенные множества
  • 24. Выборка конечных узлов: Выбрать те узлы, у которых разница между левым и правым числом равна 1 Выборка уровня дерева: Алгоритма нет! (я не знаю) Выборка соседних узлов: Постепенно выбирать узлы, у которых левое число отличается на 1 от правого числа начального элемента и у которых правое число отличается на 1 от левого числа начального элемента Деревья. Вложенные множества
  • 25. Преимущества: Простота работы с ветками Простота определения принадлежности к родителям/детям Недостатки: Сложность работы с уровнями Сложность в изменении Варианты: Добавить атрибут уровня Деревья. Вложенные множества
  • 27. Добавление вершины/ребра Перемещение вершины/ребра Удаление вершины/ребра Получение всех вершин/ребер родителей Получение всех вершин/ребер потомков Поиск пути между вершинами Операции с графами
  • 28. Добавление: Добавление ребер ведущих к и из вершины Перемещение: Удаление ребер ведущих к и из перемещаемой вершине Добавление ребер ведущих к и из новой позиции вершины Удаление: Удаление ребер ведущих к и из удаляемой вершины Графы. Список ребер
  • 29. Получение родителей: Находим вершины приводящие к текущей вершине, включаем их в список просмотренных вершин В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока ест вершины Графы. Список ребер
  • 30. Получение потомков: Находим вершины выводящие из текущей вершины, включаем их в список просмотренных вершин В цикле для найденных вершин за исключением тех, которые уже есть в списке просмотренных вершин, выполняем п.1) и продолжаем пока есть вершины Графы. Список ребер
  • 31. Получение пути: Аналогично процессу получения родителей для начальной вершины, но ищем до получения конечной вершины Или аналогично процессу получения потомков для начальной вершины, но ищем до получения конечной вершины Графы. Список ребер
  • 32. Преимущества: Простота ведения Недостатки: Сложность поиска пути Сложность поиска родителей и потомков Варианты: Список достижимости Графы. Список ребер
  • 34. Добавление: Добавление ребра Добавление всех путей ведущих по этому ребру Перемещение: Удаление ребра с зависимыми путями Добавление ребра с зависимыми путями Удаление: Удаление ребра и всех зависимых путей Графы. Список достижимости
  • 35. Получение родителе: Выбрать все «ребра» и их вершины по которым достижима заданная вершина Получение потомков: Выбрать все «ребра» и их вершины которые достижимы из заданной вершины Получение пути: Найти «ребро» в котором присутствуют обе вершины В цикле построить полный путь Графы. Список достижимости
  • 36. Преимущества: Пути строятся при ведении графа Простота навигации по графу Недостатки: Небольшая сложность ведения графа Графы. Список достижимости
  • 37. Храните данные в базах данных … и регулярно делайте backup! Конец