如何为二叉树设计数据库? [复制]
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 以外的数据库中执行此操作。
【讨论】:
以上是关于如何为二叉树设计数据库? [复制]的主要内容,如果未能解决你的问题,请参考以下文章