4

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

4

3 回答 3

4

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

于 2013-01-02T18:01:49.230 回答
2

这不是坏习惯,但正如评论者指出的那样,您以后可能会遇到问题。

由于comments-on-comments 相当于一棵逻辑树,因此可能值得查看 Celko 的工作:

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

非常便利!

于 2013-01-02T18:06:01.763 回答
1

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

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

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

于 2013-01-02T18:08:51.753 回答