怎樣才能實現排序優化的層次關係表設計 SQL技巧

2021-07-15 00:01:50 字數 1600 閱讀 5782

資料層次的概念:

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

表達層次關係的資料一般需要實現如下屬性:

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可以直觀表達層次關係與同一層次的順序關係。

Xshell怎樣才能實現快速貼上複製

不知道大家對xshell這款終端模擬器熟悉不熟悉,最近本人在使用的時候遇到一些問題,經過多次研究找到了解決方法,現將具體技巧分享給大家,希望能幫助大家解決遇到的問題。xshell 5中文版免費獲取位址 在xshell介面中需要用到之前的一段 自然是選中,熟練的鍵入ctrl c,打算複製,可是再次鍵入...

丟失的檔案怎樣才能恢復

丟失的檔案怎樣才能恢復 如果現在的朋友問我,你能不能幫我找回不小心刪除了的檔案,我可以肯定的告訴他,你只要沒有再往裡面寫入新的資料,我就能幫你找回來。我這麼自信並不是因為我有多麼高深的黑客技術,我只是乙個宅男而已,絕對不是技術宅。為什麼我說可以找回呢,因為我有號用地額資料恢復軟體。是它可以幫我們找回...

怎樣才能增強自己的毅力呢?

一是強化正確的動機。人們的行動都是受動機支配的,而動機的萌發則起源於需要的滿足。什麼也不需要或者說什麼也不追求的人,從來沒有。人,都是有各自的需要,也有各自的追求 只是由於人生觀的不同,不同的 人總是把不同的追求作為自己最大的滿足。史達林說,偉大的目的產生偉大的毅力。從奧斯特洛夫斯基和張海迪身上,我...