3

我正在尝试在表中建模树关系。例如,有“类别”,类别本身可以在父类别中。

我的架构是:

id int PRIMARY KEY,
parent_id int,
name

我的问题是,我应该将 parent_id 列标记为外键吗?Foreign 意味着“外部”而不是自我引用。为此目的是否有不同类型的密钥?

我的问题类似于: MS SQL 中的自引用约束,但我问的是另一个问题,级联不是问题。

4

4 回答 4

10

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

外键是在分层数据中表示父节点的自然候选者,尽管它们并非专门用于此:)

于 2009-06-26T21:23:56.333 回答
7

如果您有非常深的嵌套级别,则可能不容易高效地选择特定节点的所有后代,因为大多数 DB 不能很好地处理递归。另一种方法是使用所谓的“嵌套集模型”来表示关系。这里有一篇很棒的文章:

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

于 2009-06-26T21:29:19.897 回答
4

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

请参阅这篇文章以获取替代reperesentations:在数据库中存储分层数据

于 2009-06-26T21:32:22.883 回答
3

我不相信还有另一种类型的键......在这种情况下,外键会很好......它将强制对 parent_id 进行约束以确保它引用有效的 id

于 2009-06-26T21:27:07.387 回答