樹和自聯表 二

2021-04-12 12:35:46 字數 2815 閱讀 5298

author:水如煙

自聯表的應用層抽象

這方面我沒有把握,因為對資料類的總是半知且不解。一樣的按自己理解來應用。

自聯表的資料儲存形式一般有三種,一種是直接的,一種的多表級聯的,還有本身就是自聯表。三種情形可以相互轉換。

直接的,比如行政區劃碼(其實我做這個也是為行政區劃碼方案服務的,那個還沒寫完):

資料形式為:**,名稱,即:****** 名稱。

六位**分為三組,每組兩位,字元型。可以表示為「00,00,00」。其中第一組表示省,第二組表示市,第三組表示縣。當然還有別的意義,暫且如此理解。

對於一項資料,可以這樣追尋它的意義,如

340405 八公山區,找市,340400,為淮南市,找省,340000,為安徽省,其意義也就是全稱便是安徽省淮南市八公山區。

多表級聯的,可以做成三個表:

省(省id,省),市(市id,市,省id),縣(縣id,縣,省id)

自聯表(示意):

idparentid

code

name10

00root21

11北京市..

25134安徽省..

20325

01合肥市

20425

02蕪湖市

20525

03蚌埠市

20625

04南淮市..

290206

01市轄區

291206

02大通區..

294206

05八公山區..

..上面是自聯表資料的基本的儲存形式。很多情形,是從多表級聯的形式儲存,此時的id一般是integer型別,也有string型別的(此處資料型別與.net的對應)。

多表級聯的形式,可以通過檢視轉換為 (**,名稱) 的形式輸出來。**為string型別,格式類似於 「00,000,0000」,每組的位數視相應表的id大小範圍而定,一般的可以事前知道。如公司、部門、班組這類,公司可能有10來個,每個公司的部門也就是20來個吧,班組多些,算是有100個,那樣,可以確定為「00,00,000」做為**基準。

至於本身是自聯表的,設定一下最高層級,那麼**形式也是確定的。

所以,不管資料的儲存形式如何,最終到應用時,就以(**,名稱)的形式來統一表示。

於是應用層可以抽象成這樣:

namespace

usystem.ucollection.sincelink

<

serializable()

>

_public

mustinherit

class

itembase

private

gname 

asstring

private

gcode 

asstring

subnew

()end sub

subnew

(byval

code 

asstring

, byval

name 

asstring

)gname 

=name

gcode 

=code

end sub

public

property

code() 

asstring

getreturn

gcode

endget

set(

byval

value 

asstring

)gcode 

=value

endset

end property

public

property

name() 

asstring

getreturn

gname

endget

set(

byval

value 

asstring

)gname 

=value

endset

end property

public

readonly

property

id() 

asobject

getend

getend property

public

readonly

property

parentid() 

asobject

getend

getend property

''' 

''' id和parentid的資料型別,為string或integer

''' 

protected

mustoverride

function

defineddatatypecodeofid() 

astypecode

''' 

''' **的資料格式,形如「00,000,0000」

''' 

protected

mustoverride

function

definedcodeformat() 

asstring

public

function

clone() 

asitembase

return

usystem.uruntime.userialization.serializehelper.clone(

ofitembase)(me)

end function

end class

end namespace

重新瞭解資料庫 聯表查詢和自連線

聯表查詢分為inner join left join right join left join左連線 以左表為主。結果會將左表所有的查詢資訊列出,而右表只列出on後條件與左表滿足的部分。right join左連線 以右表為主。結果會將右表所有的查詢資訊列出,而左表只列出on後條件與右表滿足的部分。查...

二叉樹和雜湊表的優缺點對比與選擇

二叉樹 binary tree 和雜湊表 hash table 都是很基本的資料結構,但是我們要怎麼從兩者之間進行選擇呢?他們的不同是什麼?優缺點分別是什麼?回答這個問題不是一兩句話可以說清楚的,原因是在不同的情況下,選擇的依據肯定也不同。首先來回顧一下這兩個資料結構 雜湊表使用hash funct...

二叉樹遍歷,給出前序和中序表示式寫出後序表示式

二叉樹的前序 中序 後序遍歷的定義 前序遍歷 對任一子樹,先訪問跟,然後遍歷其左子樹,最後遍歷其右子樹 中序遍歷 對任一子樹,先遍歷其左子樹,然後訪問根,最後遍歷其右子樹 後序遍歷 對任一子樹,先遍歷其左子樹,然後遍歷其右子樹,最後訪問根。兩個字串,其長度n均小於等於26。第一行為前序遍歷,第二行為...