<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/

    主站蜘蛛池模板: 特黄特色的大片观看免费视频| 亚洲精品无码专区在线播放| 好男人资源在线WWW免费| 精品国产人成亚洲区| 特级aaaaaaaaa毛片免费视频| 国产成人高清精品免费软件| 极品色天使在线婷婷天堂亚洲 | 一级毛片视频免费观看| 亚洲精品乱码久久久久久蜜桃| 一区二区免费国产在线观看| 久久久久亚洲AV无码专区网站| 国产精品无码免费专区午夜| 亚洲人成色7777在线观看| 日韩精品在线免费观看| 亚洲毛片一级带毛片基地| 三年片在线观看免费观看高清电影 | 国产一级片免费看| 噜噜噜亚洲色成人网站∨| 91精品免费不卡在线观看| 中文字幕在线视频免费观看| 98精品全国免费观看视频| 亚洲一区在线免费观看| 永久免费观看的毛片的网站| 窝窝影视午夜看片免费| 亚洲va久久久噜噜噜久久天堂| 3344免费播放观看视频| 亚洲国产精品网站在线播放| 亚洲午夜av影院| 免费人妻无码不卡中文字幕系| 亚洲自偷自偷在线成人网站传媒 | 亚洲高清视频免费| 最新亚洲人成无码网站| 国产成人亚洲综合无码精品| 国产免费的野战视频| 国产青草亚洲香蕉精品久久| 亚洲人成77777在线播放网站| 福利免费观看午夜体检区| 又长又大又粗又硬3p免费视频| 91亚洲精品视频| 免费A级毛片在线播放不收费| 国产一区二区免费视频|