在架构层面上一直在努力解决这个问题。
我有一个可以评论的对象,我们称它为Post
. 每个帖子都有一个唯一的 ID。
现在我想对该帖子发表评论,我可以使用 ID 作为外键,并且每个 PostComment 都有一个与帖子相关的 ItemID 字段。由于每个帖子都有一个唯一的 ID,因此很容易分配“顶级”评论。
然而,当我对评论发表评论时,我觉得我现在需要一个 PostCommentComment,它附加到 PostComment 的 ID。由于 ID 是按顺序分配的,因此我不能再简单地使用 ItemID 来区分评论在树中的分配位置。IE Post 和 Post Comment 的 ID 可能为“5”,因此我的外键关系无效。
这似乎可以无限持续下去,PostCommentCommentComment 等......
解决这个问题的最佳方法是什么?我是否应该在评论中有一个名为“IsPostComment”的字段或类似的东西来知道要将 ID 附加到哪个集合?这让我觉得这是迄今为止我见过的最好的解决方案,但现在我觉得我需要进行递归数据库调用,这开始变得昂贵。
意思是,我得到一个Post
并得到所有的 PostCommentswhere ItemID == Post.ID && where IsPostComment == true
然后我将其作为一个集合,收集 的所有 ID ,然后再PostComments
进行一次搜索where ItemID == PostComment[all].ID && where IsPostComment == false
,然后无限重复。
这意味着我对每一层都进行调用,如果我调用 100 个帖子,我可能会进行 1000 次 DB 调用以获得 10 层评论。
这样做的正确方法是什么?