SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
РАБОТА С ЙЕРАРХИЧНИ ДАННИ В
РЕЛАЦИОННИ БАЗИ ОТ ДАННИ ЧРЕЗ
ИЗПОЛЗВАНЕ НА РЕКУРСИВНИ ЗАЯВКИ
доц. д-р Цветанка Георгиева-Трифонова
РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ
БАЗИ ОТ ДАННИ – СЪДЪРЖАНИЕ
 Представяне на данните
 Намиране на дълбочината на върховете
 Извеждане на йерархията
 Агрегатни функции за елементите в йерархията
22Цветанка Георгиева
РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ
БАЗИ ОТ ДАННИ
 Понякога се изисква данните, съхранявани в релационни
таблици, да бъдат представени във вид на йерархия или
дърво.
 Например, извеждане във формат, показващ зависимостите
на схема, която съдържа всички служители в дадена
организация и всеки служител е свързан със своя
ръководител чрез неговия идентификатор.
 Тъй като ръководителите са също служители, техните
подробни данни също се съхраняват в таблицата за
служителите.
33Цветанка Георгиева
РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ
БАЗИ ОТ ДАННИ (2)
 Други примери за ситуации, при които възниква
необходимост от работа с йерархични данни, са
реализиране на:
 йерархия от позволения;
 каталог на продукти за онлайн магазин;
 форум с проследяване на отговорите по темите.
44Цветанка Георгиева
ПРЕДСТАВЯНЕ НА ДАННИТЕ
 Един от начините за представяне на йерархични данни в
релационна база от данни е чрез рекурсивна релационна
връзка от тип „едно към много“.
 Например, таблица за категории Categories с колони:
 идентификатор на категория CategoryID;
 наименование на категория CategoryName;
 идентификатор на категория, на която текущата е
подкатегория SubCategoryOf.
55Цветанка Георгиева
ПРЕДСТАВЯНЕ НА ДАННИТЕ (2)
 При създаването на таблицата Categories, съдържаща
данните за категориите, всяка категория е свързана с друга
категория, на която се явява подкатегория чрез
идентификатора си.
 Таблицата има референция към себе си.
CREATE TABLE Categories
( CategoryID int NOT NULL PRIMARY KEY,
CategoryName varchar(50) NOT NULL UNIQUE,
SubCategoryOf int NULL REFERENCES
Categories(CategoryID) )
66Цветанка Георгиева
ПРЕДСТАВЯНЕ НА ДАННИТЕ (3)
 Примерни данни в таблица за категориите Categories:
77Цветанка Георгиева
ПРЕДСТАВЯНЕ НА ДАННИТЕ (4)
 Получава се следната дървовидна структура:
88Цветанка Георгиева
НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ
 SQL3 (или SQL99) добавя възможност за изпълняване на
рекурсивни заявки.
 Следната заявка пресмята нивото в йерархията на
категория:
99Цветанка Георгиева
НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (2)
 Резултатът от изпълнението на заявката за пресмятане на
нивото в йерархията на категория, приложена за
примерните данни, е:
1010Цветанка Георгиева
НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (3)
 Инициализация
 От изпълнението само на първата част от WITH заявката:
SELECT c.CategoryID, c.CategoryName,
c.SubCategoryOf, 0 AS HierarchyOrder
FROM Categories AS c
WHERE c.SubCategoryOf IS NULL
 се получава следният резултат:
1111Цветанка Георгиева
НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (4)
 Проследяване на рекурсивното изпълнение на WITH заявката
 I.
 От изпълнението само на втората част от WITH заявката:
SELECT c.CategoryID, c.CategoryName,
c.SubCategoryOf, HierarchyOrder + 1
FROM Categories AS c
INNER JOIN UpperHierarchy AS Parent
ON c.SubCategoryOf = parent.CategoryID
 се получава като резултат празното множество.
 Следователно UpperHierarchy има следния вид:
1212Цветанка Георгиева
НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (5)
 Проследяване на рекурсивното изпълнение на WITH заявката
 II.
1313Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH заявката
 II.
 От изпълнението само на втората част от WITH заявката се
получава като резултат:
 Следователно UpperHierarchy има следния вид:
1414Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH заявката
 III.
1515Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH заявката
 III.
 Втората част от WITH заявката връща:
 Следователно UpperHierarchy има следния вид:
1616Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH заявката
 IV.
1717Цветанка Георгиева Моделиране на информационни системи
 Проследяване на рекурсивното изпълнение на WITH заявката
 IV.
 Втората част от WITH заявката връща:
 Следователно UpperHierarchy има следния вид:
1818Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH заявката
 V.
1919Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH заявката
 V.
 Втората част от WITH заявката връща:
 Следователно UpperHierarchy има следния вид:
2020Цветанка Георгиева
 Проследяване на рекурсивното изпълнение на WITH
заявката
 VI.
 Получава се същият резултат като от предишната стъпка,
следователно край на рекурсията.
2121Цветанка Георгиева
НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (13)
ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА
 Заявката, показана по-долу, е за извеждане на йерархията.
2222Цветанка Георгиева
ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (2)
 За целта се добавя колона Lineage, с която се намира пътя
от върха до елемент (връх) на йерархията (дървото), т.е. през
кои елементи трябва да се мине, за да бъде достигнат даден
елемент.
2323Цветанка Георгиева
ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (3)
 Резултатът от изпълнението на заявката за извеждане на
йерархията е:
2424Цветанка Георгиева
ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (4)
 Накрая, се модифицира заявката към UpperHierarchy, за
се да изведат имената на категориите с отстъп, който
съответства на тяхното ниво в йерархията.
2525Цветанка Георгиева
ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (5)
 Освен това е зададено сортиране, така че категориите да се
извеждат след категорията, на която са подкатегория.
 Сортрането е по низ, образуван от пътя до даден връх и
идентификатора на самия връх (идентификатора на
категория).
2626Цветанка Георгиева
ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (6)
 Резултатът от изпълнението на модифицираната заявка към
UpperHierarchy за извеждане на йерархията е:
2727Цветанка Георгиева
АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В
ЙЕРАРХИЯТА
 Нека е добавена таблица за продукти, за да може да се
демонстрира използването на агрегатни функции.
2828Цветанка Георгиева
АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В
ЙЕРАРХИЯТА (2)
 Изгледът vw_Count_of_Prod
 намира броя на продуктите в категориите, които нямат
подкатегории (т.е. листовите върхове);
 за всички останали категроии броят на продуктите е 0.
2929Цветанка Георгиева
АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В
ЙЕРАРХИЯТА (3)
 При извличане на данните от изгледа се получава следният
резултат:
SELECT * FROM vw_Count_of_Prod
3030Цветанка Георгиева
АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В
ЙЕРАРХИЯТА (4)
 За извеждане на категориите в йерархията и броя на
продуктите от всяка категория може да се използва следната
заявка, базирана на създадения изглед:
3131Цветанка Георгиева
АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В
ЙЕРАРХИЯТА (5)
 Резултатът от изпълнението на заявката за извеждане на
категориите в йерархията и броя на продуктите от всяка
категория е:
3232Цветанка Георгиева
3333Цветанка Георгиева
Цветанка Георгиева-Трифонова, 2017
Някои права запазени.
Презентацията е достъпна под лиценз Creative Commons,
Признание-Некомерсиално-Без производни,
https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode

Weitere ähnliche Inhalte

Mehr von Tsvetanka Georgieva

Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)Tsvetanka Georgieva
 
Системи за онлайн аналитична обработка на данни (OLAP)
Системи за онлайн аналитична обработка на данни (OLAP) Системи за онлайн аналитична обработка на данни (OLAP)
Системи за онлайн аналитична обработка на данни (OLAP) Tsvetanka Georgieva
 
Архитектура на системите за управление на бази от данни
Архитектура на системите за управление на бази от данниАрхитектура на системите за управление на бази от данни
Архитектура на системите за управление на бази от данниTsvetanka Georgieva
 
Складиране на данни (data warehousing)
Складиране на данни (data warehousing)Складиране на данни (data warehousing)
Складиране на данни (data warehousing)Tsvetanka Georgieva
 
Работа с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данниРабота с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данниTsvetanka Georgieva
 
Модифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery UpdateМодифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery UpdateTsvetanka Georgieva
 
Полуструктурирани данни
Полуструктурирани данниПолуструктурирани данни
Полуструктурирани данниTsvetanka Georgieva
 
Заявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинацииЗаявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинацииTsvetanka Georgieva
 
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...Tsvetanka Georgieva
 
Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)Tsvetanka Georgieva
 
Примери за RDF/XML представяне
Примери за RDF/XML представяне Примери за RDF/XML представяне
Примери за RDF/XML представяне Tsvetanka Georgieva
 
Складиране (data warehousing) и добиване на данни (data mining)
Складиране (data warehousing) и добиване на данни (data mining)Складиране (data warehousing) и добиване на данни (data mining)
Складиране (data warehousing) и добиване на данни (data mining)Tsvetanka Georgieva
 

Mehr von Tsvetanka Georgieva (13)

NewSQL системи
NewSQL системиNewSQL системи
NewSQL системи
 
Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)Добиване на асоциативни правила (association rule mining)
Добиване на асоциативни правила (association rule mining)
 
Системи за онлайн аналитична обработка на данни (OLAP)
Системи за онлайн аналитична обработка на данни (OLAP) Системи за онлайн аналитична обработка на данни (OLAP)
Системи за онлайн аналитична обработка на данни (OLAP)
 
Архитектура на системите за управление на бази от данни
Архитектура на системите за управление на бази от данниАрхитектура на системите за управление на бази от данни
Архитектура на системите за управление на бази от данни
 
Складиране на данни (data warehousing)
Складиране на данни (data warehousing)Складиране на данни (data warehousing)
Складиране на данни (data warehousing)
 
Работа с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данниРабота с XML данни в релационни бази от данни
Работа с XML данни в релационни бази от данни
 
Модифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery UpdateМодифициране на XML данни с XQuery Update
Модифициране на XML данни с XQuery Update
 
Полуструктурирани данни
Полуструктурирани данниПолуструктурирани данни
Полуструктурирани данни
 
Заявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинацииЗаявки за намиране на пермутации, вариации и комбинации
Заявки за намиране на пермутации, вариации и комбинации
 
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
Описание на методите за сравняване на изображения evaluateScore и isSimilar в...
 
Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)Модел на вложените множества (Nested Set Model)
Модел на вложените множества (Nested Set Model)
 
Примери за RDF/XML представяне
Примери за RDF/XML представяне Примери за RDF/XML представяне
Примери за RDF/XML представяне
 
Складиране (data warehousing) и добиване на данни (data mining)
Складиране (data warehousing) и добиване на данни (data mining)Складиране (data warehousing) и добиване на данни (data mining)
Складиране (data warehousing) и добиване на данни (data mining)
 

Работа с йерархични данни в релационни бази от данни чрез използване на рекурсивни заявки

  • 1. РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ БАЗИ ОТ ДАННИ ЧРЕЗ ИЗПОЛЗВАНЕ НА РЕКУРСИВНИ ЗАЯВКИ доц. д-р Цветанка Георгиева-Трифонова
  • 2. РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ БАЗИ ОТ ДАННИ – СЪДЪРЖАНИЕ  Представяне на данните  Намиране на дълбочината на върховете  Извеждане на йерархията  Агрегатни функции за елементите в йерархията 22Цветанка Георгиева
  • 3. РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ БАЗИ ОТ ДАННИ  Понякога се изисква данните, съхранявани в релационни таблици, да бъдат представени във вид на йерархия или дърво.  Например, извеждане във формат, показващ зависимостите на схема, която съдържа всички служители в дадена организация и всеки служител е свързан със своя ръководител чрез неговия идентификатор.  Тъй като ръководителите са също служители, техните подробни данни също се съхраняват в таблицата за служителите. 33Цветанка Георгиева
  • 4. РАБОТА С ЙЕРАРХИЧНИ ДАННИ В РЕЛАЦИОННИ БАЗИ ОТ ДАННИ (2)  Други примери за ситуации, при които възниква необходимост от работа с йерархични данни, са реализиране на:  йерархия от позволения;  каталог на продукти за онлайн магазин;  форум с проследяване на отговорите по темите. 44Цветанка Георгиева
  • 5. ПРЕДСТАВЯНЕ НА ДАННИТЕ  Един от начините за представяне на йерархични данни в релационна база от данни е чрез рекурсивна релационна връзка от тип „едно към много“.  Например, таблица за категории Categories с колони:  идентификатор на категория CategoryID;  наименование на категория CategoryName;  идентификатор на категория, на която текущата е подкатегория SubCategoryOf. 55Цветанка Георгиева
  • 6. ПРЕДСТАВЯНЕ НА ДАННИТЕ (2)  При създаването на таблицата Categories, съдържаща данните за категориите, всяка категория е свързана с друга категория, на която се явява подкатегория чрез идентификатора си.  Таблицата има референция към себе си. CREATE TABLE Categories ( CategoryID int NOT NULL PRIMARY KEY, CategoryName varchar(50) NOT NULL UNIQUE, SubCategoryOf int NULL REFERENCES Categories(CategoryID) ) 66Цветанка Георгиева
  • 7. ПРЕДСТАВЯНЕ НА ДАННИТЕ (3)  Примерни данни в таблица за категориите Categories: 77Цветанка Георгиева
  • 8. ПРЕДСТАВЯНЕ НА ДАННИТЕ (4)  Получава се следната дървовидна структура: 88Цветанка Георгиева
  • 9. НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ  SQL3 (или SQL99) добавя възможност за изпълняване на рекурсивни заявки.  Следната заявка пресмята нивото в йерархията на категория: 99Цветанка Георгиева
  • 10. НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (2)  Резултатът от изпълнението на заявката за пресмятане на нивото в йерархията на категория, приложена за примерните данни, е: 1010Цветанка Георгиева
  • 11. НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (3)  Инициализация  От изпълнението само на първата част от WITH заявката: SELECT c.CategoryID, c.CategoryName, c.SubCategoryOf, 0 AS HierarchyOrder FROM Categories AS c WHERE c.SubCategoryOf IS NULL  се получава следният резултат: 1111Цветанка Георгиева
  • 12. НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (4)  Проследяване на рекурсивното изпълнение на WITH заявката  I.  От изпълнението само на втората част от WITH заявката: SELECT c.CategoryID, c.CategoryName, c.SubCategoryOf, HierarchyOrder + 1 FROM Categories AS c INNER JOIN UpperHierarchy AS Parent ON c.SubCategoryOf = parent.CategoryID  се получава като резултат празното множество.  Следователно UpperHierarchy има следния вид: 1212Цветанка Георгиева
  • 13. НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (5)  Проследяване на рекурсивното изпълнение на WITH заявката  II. 1313Цветанка Георгиева
  • 14.  Проследяване на рекурсивното изпълнение на WITH заявката  II.  От изпълнението само на втората част от WITH заявката се получава като резултат:  Следователно UpperHierarchy има следния вид: 1414Цветанка Георгиева
  • 15.  Проследяване на рекурсивното изпълнение на WITH заявката  III. 1515Цветанка Георгиева
  • 16.  Проследяване на рекурсивното изпълнение на WITH заявката  III.  Втората част от WITH заявката връща:  Следователно UpperHierarchy има следния вид: 1616Цветанка Георгиева
  • 17.  Проследяване на рекурсивното изпълнение на WITH заявката  IV. 1717Цветанка Георгиева Моделиране на информационни системи
  • 18.  Проследяване на рекурсивното изпълнение на WITH заявката  IV.  Втората част от WITH заявката връща:  Следователно UpperHierarchy има следния вид: 1818Цветанка Георгиева
  • 19.  Проследяване на рекурсивното изпълнение на WITH заявката  V. 1919Цветанка Георгиева
  • 20.  Проследяване на рекурсивното изпълнение на WITH заявката  V.  Втората част от WITH заявката връща:  Следователно UpperHierarchy има следния вид: 2020Цветанка Георгиева
  • 21.  Проследяване на рекурсивното изпълнение на WITH заявката  VI.  Получава се същият резултат като от предишната стъпка, следователно край на рекурсията. 2121Цветанка Георгиева НАМИРАНЕ НА ДЪЛБОЧИНАТА НА ВЪРХОВЕТЕ (13)
  • 22. ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА  Заявката, показана по-долу, е за извеждане на йерархията. 2222Цветанка Георгиева
  • 23. ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (2)  За целта се добавя колона Lineage, с която се намира пътя от върха до елемент (връх) на йерархията (дървото), т.е. през кои елементи трябва да се мине, за да бъде достигнат даден елемент. 2323Цветанка Георгиева
  • 24. ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (3)  Резултатът от изпълнението на заявката за извеждане на йерархията е: 2424Цветанка Георгиева
  • 25. ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (4)  Накрая, се модифицира заявката към UpperHierarchy, за се да изведат имената на категориите с отстъп, който съответства на тяхното ниво в йерархията. 2525Цветанка Георгиева
  • 26. ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (5)  Освен това е зададено сортиране, така че категориите да се извеждат след категорията, на която са подкатегория.  Сортрането е по низ, образуван от пътя до даден връх и идентификатора на самия връх (идентификатора на категория). 2626Цветанка Георгиева
  • 27. ИЗВЕЖДАНЕ НА ЙЕРАРХИЯТА (6)  Резултатът от изпълнението на модифицираната заявка към UpperHierarchy за извеждане на йерархията е: 2727Цветанка Георгиева
  • 28. АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В ЙЕРАРХИЯТА  Нека е добавена таблица за продукти, за да може да се демонстрира използването на агрегатни функции. 2828Цветанка Георгиева
  • 29. АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В ЙЕРАРХИЯТА (2)  Изгледът vw_Count_of_Prod  намира броя на продуктите в категориите, които нямат подкатегории (т.е. листовите върхове);  за всички останали категроии броят на продуктите е 0. 2929Цветанка Георгиева
  • 30. АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В ЙЕРАРХИЯТА (3)  При извличане на данните от изгледа се получава следният резултат: SELECT * FROM vw_Count_of_Prod 3030Цветанка Георгиева
  • 31. АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В ЙЕРАРХИЯТА (4)  За извеждане на категориите в йерархията и броя на продуктите от всяка категория може да се използва следната заявка, базирана на създадения изглед: 3131Цветанка Георгиева
  • 32. АГРЕГАТНИ ФУНКЦИИ ЗА ЕЛЕМЕНТИТЕ В ЙЕРАРХИЯТА (5)  Резултатът от изпълнението на заявката за извеждане на категориите в йерархията и броя на продуктите от всяка категория е: 3232Цветанка Георгиева
  • 33. 3333Цветанка Георгиева Цветанка Георгиева-Трифонова, 2017 Някои права запазени. Презентацията е достъпна под лиценз Creative Commons, Признание-Некомерсиално-Без производни, https://creativecommons.org/licenses/by-nc-nd/4.0/legalcode