3

我试图在表中建模树关系。例如,有“类别”,类别本身可以在父类别中。我是否应该使用外键在SQL中显示树关系

我的模式是:

id int PRIMARY KEY, 
parent_id int, 
name 

我的问题是,我应该标记PARENT_ID列作为外键?外来意味着“外部”而不是自我参照。为此目的是否有不同类型的钥匙?

我的问题类似于: Self-referencing constraint in MS SQL,但我问了一个不同的问题,级联不成问题。

+0

这里是另一个SO张贴,你可能已经错过:http://stackoverflow.com/questions/935098/database-structure-for-tree-data-structure – akf 2009-06-26 21:32:47

回答

10

自引用外键一直发生。例如。一个员工可能会有另一个“员工”作为他的经理,所以manager_id将是同一个表中employee_id字段的外键。

外键是用于表示分层数据的父节点的天然人选,虽然他们不是专门用于该:)

3

我不相信这是另一种类型的关键...外国关键在这种情况下会好的..它会执行对parent_id的约束,以确保它引用了一个有效的ID

6

如果你有很深层次的嵌套,可能不容易正确地选出特定的所有后代节点,因为大多数DB不能很好地处理递归。另一种方法是使用所谓的“嵌套集模型”来表示关系。一个伟大的文章,请访问:

http://www.intelligententerprise.com/001020/celko.jhtml

4

在同一个表中的两列之间的外键映射的树结构到关系数据库时,经常被使用。但是,它不是唯一可用的方法。

请参阅本文替代reperesentations:Storing Hierarchical Data in a Database