如何为二叉树设计数据库? [复制]

Posted

技术标签:

【中文标题】如何为二叉树设计数据库? [复制]【英文标题】:how to design database for binary tree? [duplicate] 【发布时间】:2009-07-15 05:52:45 【问题描述】:

我正在.Net 和 SQL 服务器上做一个多层次营销领域的项目。 在数据库中它应该像二叉树一样保存。我应该如何设计数据库?

【问题讨论】:

【参考方案1】:
id | parentid | name
---------------------
 1 | null     | node1
 2 | 1        | node2
 3 | 1        | node3

【讨论】:

练习:编写一个查询,返回 node1 的所有死者。 你是这个意思吗? select * From tab where parentid = (select id from table where name = 'node1') 这很有趣 :-) 但是,您可能应该指出一个更好的选择,例如使用嵌套集模型。 Arsenmkrt - 不,那将是直系后代。你被要求提供所有后代:) @ChssPly76 好吧,这很容易,不是吗? select * from tab where name != 'node1' ;) 但说真的,这个答案怎么会有 3 个赞成票?【参考方案2】:

这是asked and answered before。

这里有一个pretty decent tutorial,它解释了为什么 arsenmkrt 提出的邻接模型不太理想。

【讨论】:

+1 我以前没想过;)【参考方案3】:

SQL Server 2008 有一个名为 hierarchyid 的内置数据类型来存储分层信息。这里有一些提示。

http://blogs.msdn.com/manisblog/archive/2007/08/17/sql-server-2008-hierarchyid.aspx

http://technet.microsoft.com/en-us/library/bb677290.aspx

当然,您可以按照arsenmkrt 所述在 sqlserver2008 以外的数据库中执行此操作。

【讨论】:

以上是关于如何为二叉树设计数据库? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的操作

二叉树的操作

JavaScript 二叉树

查找与二叉树

数据结构-如何用二叉树实现hash表(C语言)

小白科普丨何为树二叉树和森林?