国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

怎樣才能實現排序優化的層次關系表設計

2024-07-21 02:42:12
字體:
來源:轉載
供稿:網友
數據層次的概念:

數據層次是表達數據的一種重要關系,在數據庫的設計中,如:組織結構分解、工作任務分解、行政區劃的分解等都是層次關系數據的典型實例。

表達層次關系的數據一般需要實現如下屬性:

1.層次的最大級聯層次數。如:中國->湖南省->長沙市->雨花區,就是4層。

2.能反映同一層次之間的順序關系。如:長沙市 必須在 衡陽市的前面,(因為其是省會)。

3.能獲取任意層次的父節點級子節點(子節點集)。

4.直接獲取任意層次的數據。比如:第三層 市級別的數據。

5.能方便構造層次關系表達樹。

6.層次結構及排序方式的改變不影響其其他數據的內部邏輯關系。

一般有三種方式來表現層次關系的數據:

1.建立多個數據庫表:

如: COUNTRY: ID(主鍵) COUNTRY_NAME

PROVINCE: ID(主鍵) COUNTRY_ID(外鍵),PROVINCE_NAME

CITY: ID(主鍵), PROVINCE_ID(外鍵),CITY_NAME

此種方式比較簡單,但設計的靈活性不夠,數據處理起來比較麻煩。

2.采用表的自關聯外鍵引用

如: DISTRICT_INFO: ID(主鍵),PARENT_ID,(外鍵)DISTRICT_INFO

通過外鍵(PARENT_ID)的自身引用主鍵(ID)來確立層次關系。

優點:無限級別的層次關系,擴充性強。對于Oracle數據庫來說,能簡單通過 Start With,,,Connect By--語句來實現數據的查詢。

缺點:不能明確看出層次關系,無法實現排序。

3.采用編碼方式來實現層次

DISTRICT: ID,CODE,NAME 其中CODE的特點是上級編碼是下級編碼的前綴

優點:通過編碼的內容能夠很容易回去數據的層次關系。

缺點:使用Like方法或函數查詢來實現子集的查找,效率較低,能實現層次關系的級數有限(受CODE的字段長度影響)。

優化方案:

集合2,3的優點,采用固定編碼級次的長度的方法來設計表。

DISTRICT:ID,CODE,PARENT_ID,NAME

其中ID為主鍵,CODE:規定為4位一級。表現的數據如下:

ID,CODE                  PARENT_ID,      NAME1  0001                                  中國2  00010001                  1           湖南3  000100010001              2           衡陽4  000100010002              2           長沙5  0001000100020001           4          雨花

從數據中可以看出,PARENT_ID可以直觀表達層次的上下級關系

而編碼CODE可以直觀表達層次關系與同一層次的順序關系。

如果要將長沙排在衡陽的前面,需要對調其編碼即可,而外部的引用關系由于通過ID實現,不會受其影響。

獲取節點的父級別節點:

Select * From DISTRICT Where ID=(Select PARENT_ID From DISTRICT Where ID=2)

獲取節點的子級別節點列表:

Select * From DISTRICT Where PARENT_ID=2

獲取所有的子節點信息:

Select level, * From DISTRICT d Start With PARENT_ID=2 Connect By d.PARENT_ID=Prior t.ID

或 --排序模式

Select * From DISTRICT d Where d.CODE Like '00010001%' Order By CODE

獲取某一層次(N)的節點信息(實現排序,層次碼長度固定的意義):

Select * From DISTRICT Where LENGTH(CODE)=4*N And CODE Like '0001%' Order By CODE......


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 磐石市| 农安县| 铁岭市| 山东省| 四会市| 常德市| 凌海市| 大竹县| 繁昌县| 沧州市| 三明市| 永新县| 万宁市| 望谟县| 呈贡县| 陕西省| 张家口市| 双城市| 建昌县| 吴忠市| 顺平县| 开江县| 平顺县| 襄樊市| 乌什县| 新泰市| 敦煌市| 灵石县| 乌拉特前旗| 肇东市| 安溪县| 九江市| 内乡县| 黎川县| 远安县| 故城县| 社旗县| 黔东| 响水县| 镇坪县| 湖北省|