樹資料庫
❶ 樹形資料庫有哪些
樹形資料庫介紹與特徵:
關系資料庫中BOM結構是樹狀的,但是速度不怎麼樣。
理想中樹形結構應該具備如下特徵:
數據存儲冗餘度小、直觀性強;
檢索遍歷過程簡單高效;
節點增刪改查CRUD操作高效。
❷ 如何在資料庫中存儲一棵樹
假設有如下一棵樹:

這種結構下,如果查詢某一個節點的直接子節點,十分容易,比如要查詢D節點的子節點。
❸ 關於樹形資料庫查詢問題
樹形結構的話按照演算法分析的原理,是先查詢父節點,然後查詢器父節點的左子樹(也就是句柄)然後在查詢句柄的句柄。。還有你的問題我不清楚,你到底是想問什麼。。你可以看看演算法分析
❹ 資料庫中樹形圖的用法
資料庫中樹形圖的用法的用法你知道嗎?下面我就跟你們詳細介紹下資料庫中樹形圖的用法的用法,希望對你們有用。
資料庫中樹形圖的用法的用法如下:
樹形圖用於顯示按照樹形結構進行組織的數據,其用途比較廣泛,如計算機中的文件系統(Windows中的資源管理器)、企業或公司的組成結構等。我們知道在Windows下VB、PB、Delphi等工具提供了一個功能很強的樹型控制項TreeView,利用Treeview控制項可以方便地開發樹形圖。然而在網頁上實現樹形圖就不那麼容易了,現在在asp.net中利用微軟提供的Internet Explorer WebControls它使得網頁上的樹形圖開發與在Windows下一樣的方便,一樣的功能強大,甚至更靈活。
本文介紹用Internet Explorer WebControls開發樹形圖的方法,由於樹形圖結構較復雜,使用起來常不知如何下手。筆者結合最近剛為公司用ASP.NET編寫的應用程序管理器這一具體實例,詳細闡述在ASP.NET下如何將Internet Explorer WebControls的使用與資料庫聯系起來,實現數據分任意多層顯示,方便地進行增加、修改、刪除、移動操作。筆者希望通過對該實例的闡述,達到拋磚引玉的效果,與各位同仁相互交流,共同進步。
Internet Explorer WebControls不在VS.NET的標准Server Control中,要到微軟的站點上下載,下載地址是:
http://msdn.microsoft.com/downloads/samples/internet/default.asp?url=/Downloads/samples/Internet/ASP_DOT_NET_ServerControls/WebControls/default.asp
下載安裝後第一次使用時,要右擊工具箱Customize Toolbox…→.NET Framework Components中找到Micosoft.Web.UI.WebControls.Treeview後選中,這樣Treeview控制項就出現在工具箱中了。
一、樹的建立
具體方法是:創建一個資料庫,設計樹圖信息表TREE_INFO,包含NODEID、PARENTID、NODENAME、ADDErss、ICON欄位,其它欄位根據實際業務而定,節點名稱NODENAME將在樹型控制項的節點上顯示,NODEID欄位保存節點的唯一標識號,PARENTID表示當前節點的父節點號,標識號組成了一個“鏈表”,記錄了樹上節點的結構。設計一個Web窗體其上放置TreeView控制項。
PRivate Sub CreateDataSet()’建立數據集
Dim myConn As New SqlConnection()
Dim myCmd As New SqlCommand("select NODEID,NODENAME,PARENTID,ADDRESS,ICON from Tree_info", myConn)
Dim myDataAdapter As New SqlDataAdapter()
myConn.ConnectionString = application("connectstring")
myCmd.CommandText = ""
myCmd.Connection = myConn
myDataAdapter.SelectCommand = myCmd
myDataAdapter.Fill(ds, "tree")
End Sub
建樹的基本思路是:從根節點開始遞歸調用顯示子樹
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CreateDataSet()
intiTree(TreeView1.Nodes, 0)
End Sub
Private Sub intiTree(ByRef Nds As TreeNodeCollection, ByVal parentId As Integer)
Dim dv As New DataView()
Dim drv As DataRowView
Dim tmpNd As TreeNode
Dim intId As Integer
dv.Table = ds.Tables("tree")
dv.RowFilter = "PARENTID=’" & parentId & "’"
For Each drv In dv
tmpNd = New TreeNode()
strId = drv("NODE_ID")
tmpNd.ID = strId
tmpNd.Text = drv("NODE_NAME ")
tmpNd.ImageUrl = drv("ICON").ToString
Nds.Add(tmpNd)
intiTree(Nds(Nds.Count - 1).Nodes, intId)
Next
End Sub
二、增加、刪除樹節點
單純在Treeview 上增加、刪除、修改節點只需用Nodes屬性的Add、 Remove、等方法即可,值得注意的地方是VS.NET中Treeview的Nodes集合與VS6.0中的區別,VS6.0中的是一個大的集合,而VS.NET中的是分層的每個Node下都有Nodes屬性。增加、刪除、修改樹節點時與VS6.0相比有很大差別,特別是刪除時。
Private Sub ButAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButAdd.Click’在選定的節點下添加子節點
Dim tmpNd As New TreeNode(), NdSel As TreeNode
tmpNd.ID = GetNewId()
NdSel = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)’選中的節點
tmpNd.Text = "新節點"
NdSel.Nodes.Add(tmpNd)
Dim myRow As DataRow
myRow = ds.Tables("tree").NewRow()
myRow("NODE_NAME") = tmpNd.ID
myRow("NODE_DESCRipT") = "新節點" & tmpNd.ID & "_" & NdSel.ID
myRow("PARENT_NAME") = NdSel.ID
ds.Tables("tree").Rows.Add(myRow)
End Sub
Private Sub ButDele_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButDele.Click’刪除選中的節點
Dim idx As String = TreeView1.SelectedNodeIndex()
GetNdCol(idx).Remove(TreeView1.GetNodeFromIndex(idx))
Dim dv As New DataView(), recNo As Integer
dv.Table = ds.Tables("tree")
dv.RowFilter= "NODEID=" & NdId
dv.Delete(0)
End Sub
Private Function GetNdCol(ByVal idx As String) As TreeNodeCollection
‘獲得選中節點的父節點的Nodes集合
Dim cnt As Integer, i As Integer
Dim tmpNds As TreeNodeCollection
Dim idxs() As String
idxs = Split(idx, ".")
cnt = UBound(idxs)
If cnt = 0 Then
tmpNds = TreeView1.Nodes
Else
tmpNds = TreeView1.Nodes(CInt(idxs(0))).Nodes
For i = 1 To cnt - 1
tmpNds = tmpNds(CInt(idxs(i))).Nodes
Next
End If
Return tmpNds
End Function
三、修改、移動樹節點
由於伺服器控制項不支持滑鼠拖動事件,所以不能象Windows程序那樣通過拖動移動節點,這里是通過選擇父節點的方式。移動是通過在原位置刪除,新位置添加實現的,要注意在刪除時先保存節點信息。
Private Sub TreeView1_SelectedIndexChange(ByVal sender As Object, ByVal e As Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs) Handles TreeView1.SelectedIndexChange
Dim dv As New DataView()
dv.Table = ds.Tables("tree")
Dim tmpNd As TreeNode = TreeNdSel(e.OldNode), tmpNds As TreeNodeCollection
dv.RowFilter= "NODEID=" & tmpNd.ID
dv(0)("NODE_DESCRIPT") = Me.TextBox1.Text
dv(0)("ADDRESS") = Me.TextBox2.Text
dv(0)("TARGET") = Me.TextBox3.Text
dv(0)("ICON") = Me.TextBox4.Text
If dv(0)("PARENTID").ToString <> Me.DropDownList1.SelectedItem.Value Then
‘移動節點
dv(0)("PARENT_NAME") = Me.DropDownList1.SelectedItem.Value
If Me.DropDownList1.SelectedItem.Value = "ROOT" Then
tmpNds = TreeView1.Nodes
Else
tmpNds = FromIdToNode(Me.DropDownList1.SelectedItem.Value, TreeView1.Nodes).Nodes’新的父節點的Nodes集合
End If
GetNdCol(e.OldNode).Remove(tmpNd)
tmpNds.Add(tmpNd)
End If
tmpNd.Text = Me.TextBox1.Text
tmpNd.ImageUrl = Me.TextBox4.Text
tmpNd = TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex)
dv.RowFilter= "NODEID=" & tmpNd.ID
Me.TextBox1.Text = dv(0)("NODENAME").ToString
Me.TextBox2.Text = dv(0)("ADDRESS").ToString
Me.TextBox3.Text = dv(0)("TARGET").ToString
Me.TextBox4.Text = dv(0)("ICON").ToString
End Sub
Private Function FromIdToNode(ByVal ID As String, ByVal Nds As TreeNodeCollection) As TreeNode
‘由關鍵字查找節點
Dim i As Integer
Dim tmpNd As TreeNode, tmpNd1 As TreeNode
For Each tmpNd In Nds
If tmpNd.ID = ID Then
Return tmpNd
Exit Function
End If
tmpNd1 = FromIdToNode(ID, tmpNd.Nodes)
If Not (tmpNd1 Is Nothing) Then
Return tmpNd1
Exit Function
End If
Next
Return Nothing
End Function
❺ 資料庫樹形結構屬於哪個章節
第四章節。
樹形數據結構是一類重要的非線性數據結構,樹形數據結構可以表示數據表素之間一對多的關系。其中以樹與二叉樹最為常用,直觀看來,樹是以分支關系定義的層次結構。樹形數據結構在客觀世界中廣泛存在,如人類社會的族譜和各種社會組織機構都可用樹形數據結構來形象表示。
❻ 如何設計目錄樹的資料庫
欄位名稱 中文名稱 數據類型
ID 編號 int
aDept_DeptID 部門代碼 char
aDept_DeptName 部門名稱 char
其中部門代碼每兩位(依照自己的情況定)為一級,如:A大學編碼:00,B學院編碼0001,B學院的C系:000101
還可以有其他一些輔助欄位如:
aDept_Parent 是否父節點 char
可以在作一些判斷時節省時間
❼ 請高手解釋一下Oracle的資料庫樹的功能是什麼謝謝!
樹在oracle資料庫中主要用來做索引。oracle資料庫中樹類型的索引是又矮又胖的B+樹索引,這樣可以使平均查找次數最少,提高資料庫的性能。
❽ 請問樹形結構資料庫是怎麼做的
就是表需要有一個主鍵,比如 ID
然後還有一個欄位,叫 父編號, 比如 PID
再加上其他的欄位,剩下的就是寫 SQL 的事情了。
例如下面這個表,就是一個可以做樹狀的。
CREATE TABLE test_tree (
test_id INT,
pid INT,
test_val VARCHAR(10),
PRIMARY KEY (test_id)
);
❾ 如何在資料庫中存儲一棵樹
假設有如下一棵樹:
要存儲於資料庫中,最簡單直接的方法,就是存儲每個元素的父節點ID。
暫且把這種方法命名依賴父節點法,因此表結構設計如下:
