2013-01-02 32 views
4

我想在我的数据库中做一个评论表,并将子注释存储在同一个表中。我会在名为“ParentId”的列上放置一个外键约束,该列将被链接到作为同一个表的主键的CommentId列。如果它是一个Parent注释,那么我会为ParentId给它null。这是不好的做法吗?如果是的话,有什么更好的方法来解决这个问题。在同一个表的主键上创建外键约束的错误做法?

+2

这不是一个坏习惯。请记住,许多数据库不能执行递归查询,并且/或者使用一个'create table'创建这样一个表结构。你可能需要创建它,然后改变它以后添加FK。 –

+0

如果你可以给一个父ID为null,那么一个外键约束是没有意义的。外键约束是为了确保你没有'孤儿'。 –

+0

@SteveWellens在你想确保没有孤儿的情况下,如果不为空? – Matthew

回答

4

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