繁体   English   中英

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

[英]Bad practice to create a foreign key constraint on primary key of the same table?

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

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

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

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

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

非常便利!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM