樹型結構資料在資料庫基本表中的儲存及維護

2022-01-11 06:33:29 字數 3041 閱讀 7289

相關討論連線:

早就想簡單說說: 關於樹型結構資料的儲存及維護

樹型結構資料的儲存採用:

tree(id,parentid,remark)

如果僅對於儲存來講,無疑是最經濟!

但是利用這樣的結構,來提供一些基於稍微複雜點的查詢的應用表現形式

效率應該說相當低下!

如: 查詢某節點的路徑等!

如要高效的查詢,我們可以在維護資料時下點功夫!

我們以乙個樹型結構論壇的實現為例:

tree(id,parentid,rootid,orderid,maxid,indent,title,content,remark)

id: integer 帖子id

parentid: integer 父貼id

rootid: integer 根帖id

orderid: integer 同乙個根帖中,帖子順序id

maxid: integer 用於使新貼在頂部

indent: integer 縮排量

title: varchar 帖子標題

content: varchar 帖子內容

remark: varchar 除 id,parentid 外的貼子線索

--把帖子頂到上面:

update tree

set maxid = (select max(id)

from tree

)where rootid = (select rootid

from tree

where id=@id

) end

--****************************************

這樣,只需簡單查詢:

select *,  remark  + '-' + cast(parentid as varchar) + '-' + cast(id as varchar) , space(indent) + '['

from tree

order by maxid desc,orderid

就可高效的實現帖子列表及其線索,級別等!

雖然維護時增加了一些工作量!

--相關ddl指令碼:

create table [tree] (

[id] [int] identity (1, 1) not null ,

[parentid] [int] null ,

[rootid] [int] null ,

[orderid] [int] null ,

[maxid] [int] null ,

[indent] [int] null ,

[title] [varchar] (50),

[content] [varchar] (200) ,

[remark] [varchar] (250) ,

constraint [pk_tree] primary key  clustered

([id]

相關討論連線:

早就想簡單說說: 關於樹型結構資料的儲存及維護

樹型結構資料的儲存採用:

tree(id,parentid,remark)

如果僅對於儲存來講,無疑是最經濟!

但是利用這樣的結構,來提供一些基於稍微複雜點的查詢的應用表現形式

效率應該說相當低下!

如: 查詢某節點的路徑等!

如要高效的查詢,我們可以在維護資料時下點功夫!

我們以乙個樹型結構論壇的實現為例:

tree(id,parentid,rootid,orderid,maxid,indent,title,content,remark)

id: integer 帖子id

parentid: integer 父貼id

rootid: integer 根帖id

orderid: integer 同乙個根帖中,帖子順序id

maxid: integer 用於使新貼在頂部

indent: integer 縮排量

title: varchar 帖子標題

content: varchar 帖子內容

remark: varchar 除 id,parentid 外的貼子線索

--把帖子頂到上面:

update tree

set maxid = (select max(id)

from tree

)where rootid = (select rootid

from tree

where id=@id

) end

--****************************************

這樣,只需簡單查詢:

select *,  remark  + '-' + cast(parentid as varchar) + '-' + cast(id as varchar) , space(indent) + '['

from tree

order by maxid desc,orderid

就可高效的實現帖子列表及其線索,級別等!

雖然維護時增加了一些工作量!

--相關ddl指令碼:

create table [tree] (

[id] [int] identity (1, 1) not null ,

[parentid] [int] null ,

[rootid] [int] null ,

[orderid] [int] null ,

[maxid] [int] null ,

[indent] [int] null ,

[title] [varchar] (50),

[content] [varchar] (200) ,

[remark] [varchar] (250) ,

constraint [pk_tree] primary key  clustered

([id]

)  on [primary]

) on [primary]

)  on [primary]

) on [primary]

樹在資料庫中的應用

1 索引在資料庫中的作用 最基本的查詢演算法是順序查詢,遍歷表然後逐行匹配行值是否等於待查詢的關鍵字,時間複雜度為 o n 不適合資料量大的時候。在資料之外,資料庫還維護著滿足特定查詢演算法的資料結構,這些資料結構以某 種方式引用資料,這樣就可以在這些資料結構上實現高階查詢演算法,這種資料結構就是,...

資料庫 樹型關係的資料表

樹型關係的資料,例如常見的類別表,即乙個大類,下面有若干個子類,某些子類又有子類這樣的情況。當類別不確定,使用者希望可以在任意類別下新增新的子類,或者刪除某個類別和其下的所有子類,而且預計以後其數量會逐步增長,此時就會考慮用乙個資料表來儲存這些資料。類別表 1 type table 1 名稱 型別 ...

用資料庫實現樹型結構

做 的時候有時需要實現乙個樹形列表,類似目錄那樣的。最好的建立方法就是採用指向父節點的指標的結構建立表。表的結構如下 表名為xx 字段 型別 null 預設 注釋 cidint 11 否 主鍵 pid int 11 否 0 父類別的cid,0表示該項為頂層類別。name varchar 64 否 類...