<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統計

    留言簿(23)

    積分與排名

    優秀學習網站

    友情連接

    閱讀排行榜

    評論排行榜

    層次關系數據庫表的設計

    數據層次的概念:

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

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

      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,      NAME
                1  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......

    posted on 2008-08-26 11:29 都市淘沙者 閱讀(4388) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

    主站蜘蛛池模板: 久久久久国色AV免费看图片| 亚洲高清视频免费| 亚洲中文字幕无码爆乳app| 亚洲成人高清在线| 好吊妞在线成人免费| 国产福利在线免费| 在线免费观看国产| 114级毛片免费观看| 久操视频在线免费观看| 免费一区二区无码东京热| 男女交性无遮挡免费视频| 国产精品亚洲片在线花蝴蝶| 亚洲AV无码乱码在线观看代蜜桃| 亚洲视频一区二区在线观看| 亚洲日本视频在线观看| 337p欧洲亚洲大胆艺术| 亚洲自国产拍揄拍| 亚洲日韩精品无码专区加勒比| 亚洲日韩精品国产3区| 成人婷婷网色偷偷亚洲男人的天堂| 亚洲色偷偷色噜噜狠狠99网| 亚洲av成人一区二区三区观看在线 | 男人进去女人爽免费视频国产| 久久er国产精品免费观看2| 免费黄网站在线看| 在线观看免费宅男视频| 免费看美女让人桶尿口| 亚洲色一色噜一噜噜噜| 无码乱人伦一区二区亚洲一| 国产亚洲日韩在线a不卡| 亚洲看片无码在线视频| 亚洲hairy多毛pics大全| 99久久国产免费中文无字幕| 亚洲人成依人成综合网| 久久免费观看国产精品| 亚洲无线码一区二区三区| 中文字幕亚洲精品无码| 59pao成国产成视频永久免费| 亚洲精品无码高潮喷水在线| 亚洲欧美国产国产一区二区三区| 性xxxxx大片免费视频|