我应该使用外键来显示SQL中的树关系吗

我应该使用外键来显示SQL中的树关系吗,sql,database,database-design,foreign-keys,foreign-key-relationship,Sql,Database,Database Design,Foreign Keys,Foreign Key Relationship,我试图在表中建立树关系模型。例如,存在“类别”,类别本身可以位于父类别内 我的模式是: id int PRIMARY KEY, parent_id int, name 我的问题是,我应该将parent_id列标记为外键吗?“外来”意味着“外来”,而不是自我参照。是否有不同类型的钥匙用于此目的 我的问题类似于: ,但我问的是另一个问题,级联不是问题。自引用外键总是发生。例如,一名员工可能有另一名“员工”作为其经理,因此经理id将是同一表中员工id字段的外键 外键是在分层数据中表示父节点的自然候选

我试图在表中建立树关系模型。例如,存在“类别”,类别本身可以位于父类别内

我的模式是:

id int PRIMARY KEY,
parent_id int,
name
我的问题是,我应该将parent_id列标记为外键吗?“外来”意味着“外来”,而不是自我参照。是否有不同类型的钥匙用于此目的

我的问题类似于:
,但我问的是另一个问题,级联不是问题。

自引用外键总是发生。例如,一名员工可能有另一名“员工”作为其经理,因此经理id将是同一表中员工id字段的外键


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

我不相信还有其他类型的键。。。在这种情况下,外键也可以。。它将对父节点id强制执行约束,以确保它引用有效的id。如果嵌套级别非常深,则可能不容易执行地选择出特定节点的所有子节点,因为大多数DB不能很好地处理递归。另一种方法是使用所谓的“嵌套集模型”来表示关系。这里有一篇很棒的文章:


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


请参阅本文,了解其他的表现形式:

这里是另一篇您可能错过的SO帖子: