二叉树或树是否总能在数据库中表示为1表并自引用?

时间:2010-06-06 06:46:36

标签: mysql database-design tree schema-design binary-tree

之前我没有感觉到这个规则,但似乎是二叉树或任何树(每个节点可以有很多子节点,但子节点不能指向任何父节点),那么这个数据结构可以表示为1个表格一个数据库,每行有一个自己的ID和一个指向父节点的parentID

这实际上是经典的员工 - 经理图:一个老板可以在他下面有很多人......每个人都可以有n个人,等等。这是一个树形结构,用数据库书籍作为单个表Employee的常见示例。

3 个答案:

答案 0 :(得分:2)

你的问题的答案是'是'。

西蒙关于你的树成为循环图的警告也是正确的。

所有关于“你必须手动确保不会发生这种情况的东西,即DBMS不会自动为你做这件事,因为你不会破坏任何完整性或参考规则。”,错了。

只要您只考虑SQL系统,此注释和相应的注释就适用。

存在 CAN 纯声明方式为您执行此操作的系统,即,而无需编写任何*任何*代码。该系统是SIRA_PRISE(http://shark.armchair.mb.ca/~erwin)。

答案 1 :(得分:1)

是的,您可以通过自引用表来表示层次结构。请注意这种情况:

Employee    Supervisor
1           2
2           1

答案 2 :(得分:0)

是的,这是正确的。 Here's a good reference

请注意,您通常需要一个循环才能展开树(例如找到传递关系)