為了便于說明問題,我們以商品傳銷網為例,傳銷網中每個人都對應到樹中的一個節點無限層次樹形筆記本。我們把有關數據存儲在表Persons中。
根據樹的雙親節點表示法的特點,同時考慮到便于查詢,將Data域分成本人代號(code)和本人姓名(name)兩個字段,而Link域對應到上線代號字段(pcode)。雖然在關系型數據庫中,數據的操作是以集合為基礎的,而集合中的元素是沒有順序的,但在構建樹形視圖時必須一個一個地將節點添加進去,且PowerBuilder不支持指針型變量,因而我們在表Persons中增加一字段Handno,記錄每個結點的句柄,配合Pcode字段,以實現"指針"的功能無限層次樹形筆記本,其原理是:通過查找本結點的上線代號來查找其雙親結點的句柄號。由于樹形視圖等級結構非常明顯,我們采用按層次遍歷樹,所以我們在Persons表中再增加一個字段Grade,便于按層次順序構建樹形視圖。表Persons的結構如下表,主鍵為code列無限層次樹形筆記本。當然可在表中設置一個或多個字段,以存儲各結點的其他信息,但本文旨在說明問題,故不予考慮。
層次查詢
對于層次查詢需要掌握:
無限層次樹形筆記本1.解釋層次查詢的基本概念,識別需求中需要用到層次查詢的能力。
2.建立和格式化一個樹形報表(tree report)。
3.修剪樹形結構的節點(node)和枝(branches)。
關鍵詞:tree,root(根),node,leaf(葉子),branch(樹枝,分支)
本節例子來源于表s_emp,表結構和數據如下:
看上面的表s_emp,使用層次查詢,我們可以獲得一張表基于層次關系的數據集合。Oracle是一種關系型數據庫,在表中不可能以層次的關系存放數據。但是我們可以通過一定的規則,使用tree walking(樹的遍歷或樹的查找)來獲得層次關系的數據。Hierarical query 是一種獲得樹的層析關系報表的方法。
樹形結構的數據集合,存在于我們日常生活中的很多地方,比如考慮一個家族關系,有長輩,長輩下面有子女,子女下面還可以有子女,這轉化為層次或等級關系就是:根節點只有一個,下面有子節點,子節點下面還有子節點,這樣組成了一棵樹。(有時候,根節點root 不一定只有一個,嚴格意義上說,這種情況不是一個嚴格的樹)。
當一種層次關系是存在一個表的行中,那么這種層次是可以獲得的。例如,我們看s_emp表,對于title:VP,我們知道這些行中都包含manager_id=1,也就是說,這些行屬于id=1的雇員的下屬雇員,那么有title=vp又可以獲得一系列的層次,而這些層次的跟則是id=1這個雇員。由此,得到一棵樹形結構數據集合。
層次樹或等級樹,在譬如家族關系,育種關系,組織管理無限層次樹形筆記本 ,產品裝配,人類進化,科學研究等領廣泛應用。
無限層次樹形筆記本 下面我們就根據s_emp這張表,根據職位大小來描述一個樹形結構圖。如圖:
只顯示部分樹形結構
文章地址:http://www.meyanliao.com/article/other/sjkzbdsz.html