樹型結構資料在資料庫基本表中的儲存及維護 (轉)
相關討論連線:
/Expert/TopicView1.?id=1677669" target=_blank>早就想簡單說說: 關於樹型結構資料的及維護
樹型結構資料的儲存採用:
Tree(ID,ParentID,Remark)
如果僅對於儲存來講,無疑是最經濟!
但是利用這樣的結構,來提供一些基於稍微複雜點的查詢的應用表現形式
應該說相當低下!
如: 查詢某節點的路徑等!
如要高效的查詢,我們可以在維護資料時下點功夫!
我們以一個樹型結構論壇的實現為例:
Tree(ID,ParentID,ID,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 外的貼子線索
這樣的設計只要維護好每一個欄位都為查詢顯示提高了效率!
請看下面的維護:
--==========================================
alter procedure AppSP_AddNew
@ID integer
,@Title varchar(8000) =null
,@Content varchar(8000)=null
as
--declare @id int
--set @id=0
if @ID=0
begin
insert into Tree (ParentID,OrderID,Indent,Title,Content)
values (0,0,0,@Title,@Content)
--把帖子頂到上面:
update Tree
set RootID = ID
,MaxId = ( max(id) from Tree)
where RootID is null
end
else
begin
--調整同一個"根帖"中,帖子的內部順序:
update Tree
set OrderID = OrderID + 1
where RootID = (select rootid
from tree
where ID = @id)
and OrderID > (select OrderID
from Tree
where ID = @id
)
--插入回覆的帖子,同時維護 RootID,ParentID,OrderID,Indent,remark,Title,Content
insert into Tree (RootID,ParentID,OrderID,Indent,remark,Title,Content)
select RootID,@ID,OrderID+1,Indent + 1
,case when remark is null then cast(parentid as varchar)
else remark + '-' + cast(parentid as varchar)
end
,isnull(@Title,'Re: ' + Title),@Content
from Tree
where to:id=@id">id=@id
--把帖子頂到上面:
update Tree
set maxid = (select max(id)
from Tree
)
where rootid = (select rootid
from tree
where
)
end
--========================================
該程式用於
1.增加新貼:
AppSP_AddNew 0,'第一個問題','地球是圓的嗎?'
2.回覆帖子:
AppSP_AddNew 1,'Re: 第一個問題','地球是圓的!'
這樣,只需簡單查詢:
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] NTITY (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]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958101/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫資料變成樹型結構資料庫
- 樹形結構資料儲存方案(三):閉包表
- 管理資料庫儲存結構資料庫
- JavaScript中的樹型資料結構JavaScript資料結構
- goldengate同步中更改資料表結構維護Go
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- Oracle資料庫中索引的維護(轉)Oracle資料庫索引
- Prometheus時序資料庫-磁碟中的儲存結構Prometheus資料庫
- oracle資料型別與儲存結構Oracle資料型別
- 詳解資料庫儲存的資料結構LSM Tree資料庫資料結構
- 層次結構資料的資料庫儲存和使用資料庫
- 通過命令在navicat中建立資料庫及表結構資料庫
- 樹狀資料結構儲存方式—— CUD 篇資料結構
- Redis資料結構(一)-Redis的資料儲存及String型別的實現Redis資料結構型別
- 在關聯式資料庫中儲存RDF (轉)資料庫
- Oracle資料庫中索引的維護 (轉帖)Oracle資料庫索引
- 七、基本資料結構(樹形結構)資料結構
- 資料庫內部儲存結構探索資料庫
- 【資料結構】樹的基本知識資料結構
- 資料結構學習(C++)——圖【1】(基本儲存方法) (轉)資料結構C++
- 資料結構-二叉樹的儲存結構與遍歷資料結構二叉樹
- 樹狀資料結構儲存方式——查詢篇資料結構
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於資料庫儲存結構Oracle資料庫
- 資料庫儲存選型經驗總結資料庫
- 維護樹狀資料
- HBase 資料儲存結構
- Oracle資料儲存結構Oracle
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- 【資料庫】資料庫儲存元素型別基礎資料庫型別
- 如何在資料庫中儲存一棵樹資料庫
- 資料結構線性表的鏈式儲存結構(單連結串列)的表示及其基本操作資料結構
- 樹形結構資料儲存方案(二): 物化路徑
- 報表資料分庫儲存
- C#資料結構-二叉樹-順序儲存結構C#資料結構二叉樹
- Hive資料庫及表的基本操作Hive資料庫
- 怎樣在資料庫中儲存貨幣資料庫
- Redis基本資料型別底層資料結構Redis資料型別資料結構
- 【資料結構——圖和圖的儲存結構】資料結構