我想在我的数据库中做一个评论表,并将子注释存储在同一个表中。我会在名为“ParentId”的列上放置一个外键约束,该列将被链接到作为同一个表的主键的CommentId列。如果它是一个Parent注释,那么我会为ParentId给它null。这是不好的做法吗?如果是的话,有什么更好的方法来解决这个问题。在同一个表的主键上创建外键约束的错误做法?
4
A
回答
4
这很好。有一件事你需要考虑的是如果删除对孩子的评论,该怎么办。 FK约束将防止删除,并且级联删除的常见解决方案在此似乎不合适,也不会将父引用填入空值。因此,您可能必须保留已删除的评论,并清除内容或将其标记为已删除。
2
这是不错的做法,但正如评论者指出的那样,稍后可能会遇到问题。
由于意见上,评论达的逻辑树,它可能是值得检查Celko的工作:
http://www.ibase.ru/devinfo/DBMSTrees/sqltrees.html
非常方便!
1
http://msdn.microsoft.com/en-us/library/ms124432(v=sql.100).aspx
对于SQL Server是不是一个不好的做法,见上面链接EMPLOYEE表definaion并参考经理ID列,微软已经使用此方案中提供了SQL服务器的示例数据库。
主要需要注意的是父记录不能物理删除,您可能需要使用软标记来删除。
相关问题
- 1. 外键约束的错误上创建
- 2. MySQL的 - 无法创建表(错误:150) - 外键约束
- 3. 2个外键创建表时MySQL的语法错误主键
- 4. 表创建错误无法添加外键约束
- 5. mysql错误1215:无法添加外键约束//创建此表
- 6. 错误::一个外键约束失败
- 7. Sequelize外键约束/创建
- 8. 为什么创建引用主键字段中同一表的主键的外键约束
- 9. MySQL的 - 不能外键约束创建表错误
- 10. 无法在MySQL中创建外键约束。错误号码150
- 11. MySQL的 - 外键在同一个表的主键,错误#1452
- 12. 获得在SQL执行错误与外键约束创建表
- 13. SQL错误外键约束
- 14. 外键约束错误
- 15. 外键约束错误1005
- 16. MySQL - 外键约束错误
- 17. 错误1215外键约束
- 18. 用外键创建约束键sequelize
- 19. 无法创建外键约束
- 20. 无法创建外键约束
- 21. 定义在表的同一列上的主键约束和唯一约束
- 22. MYSQL创建表,约束,外键
- 23. 我不能做一个外键约束错误
- 24. SQL:创建多个外键和约束
- 25. 错误“无法添加外键约束”
- 26. MySQL的错误:创建表时出错:无法添加外键约束
- 27. 一般错误:1215不能在表上添加外键约束
- 28. Linq to Sql插入冲突“外键同一表约束”错误
- 29. 创建外键约束的SQL Server错误
- 30. 如何创建多个引用同一个表的复合外键约束?
这不是一个坏习惯。请记住,许多数据库不能执行递归查询,并且/或者使用一个'create table'创建这样一个表结构。你可能需要创建它,然后改变它以后添加FK。 –
如果你可以给一个父ID为null,那么一个外键约束是没有意义的。外键约束是为了确保你没有'孤儿'。 –
@SteveWellens在你想确保没有孤儿的情况下,如果不为空? – Matthew