在同一个表的主键上创建外键约束的不良做法?

时间:2013-01-02 17:52:09

标签: c# asp.net sql entity-framework

我正在尝试在我的数据库中执行注释表,并将子注释也存储在同一个表中。我会在名为“ParentId”的列上放置一个外键约束,该列将链接到CommentId列,该列是同一个表的主键。如果它是父评论,那么我将为ParentId赋予它null。这是不好的做法吗?如果是这样,有什么更好的方法可以解决这个问题。

3 个答案:

答案 0 :(得分:4)

这很好。您需要考虑的一件事是,如果删除带有子项的评论该怎么办。 FK约束将阻止删除,并且级联删除的常见解决方案在这里似乎不合适,也不会使父引用为NULL。因此,您可能必须保留已删除的评论,并清除内容或将其标记为已删除。

答案 1 :(得分:2)

这不是一种不好的做法,但正如评论者指出的那样,您可能会在以后遇到问题。

由于评论意见相当于逻辑树,因此可能值得查看Celko的工作:

http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html

非常方便!

答案 2 :(得分:1)

http://msdn.microsoft.com/en-us/library/ms124432(v=sql.100).aspx

对于SQL Server,这不是一个坏习惯,请参阅上面的Employee表定义链接并参考ManagerID列,Microsoft已在SQL Server提供的示例数据库中使用此方案。

主要需要注意的是父记录无法物理删除,您可能需要使用标记使用软删除。