代码之家  ›  专栏  ›  技术社区  ›  Chet

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

  •  3
  • Chet  · 技术社区  · 15 年前

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

    我的模式是:

    id int PRIMARY KEY,
    parent_id int,
    name
    

    我的问题是,是否应该将父级“ID”列标记为外键?外来的意思是“外来的”,而不是自我参照。是否有其他类型的密钥用于此目的?

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

    4 回复  |  直到 14 年前
        1
  •  10
  •   Jeremy Smyth    15 年前

    自引用外键一直在发生。例如,一个雇员可能有另一个“雇员”作为他的经理,因此经理ID将是同一表中雇员ID字段的外键。

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

        2
  •  6
  •   cliff.meyers    15 年前

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

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

        3
  •  4
  •   Jørn Schou-Rode dscher    15 年前

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

    请参阅本文以了解替代的重演: Storing Hierarchical Data in a Database

        4
  •  3
  •   Chris Klepeis    15 年前

    我不相信还有其他类型的钥匙…在这种情况下,使用外键是可以的。它将对父级\u id强制约束,以确保它引用有效的id