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。第一行為前序遍歷,第二行為...