首页 > 解决方案 > 如何设计像博客文章及其子文章一样捕获父子的 SQL 表

问题描述

用例是存储博客文章列表,其中每个文章可以有多个属于不同类型的子文章。

我想到的方法是 - 所有帖子都进入这个主表。一个帖子可以有多个父帖子。正是出于这个原因,我认为有一个单独的表来保存关系会更好。

tblPost

postId 标题 描述
1 父帖子标题 测试一下
2 子帖子标题 测试一下
3 第二个孩子帖子标题 测试一下

tblPostRelations

ID postId parentPostId 类型
1 1 无效的 类型1
2 2 1 类型2
3 3 1 类型3

因此,对于任何给定的帖子,我将查询该表以查明它是否是子表,并将其呈现为 UI 中的子部分。

设计看起来很简单,但不确定方法是否合适。关于改进/调整/指出明显错误的任何想法?

标签: sqlsql-serverdatabase-design

解决方案


类型不应该在上表中吗?

不确定,因为您的表结构表明类型决定了关系的类型,而您的描述(至少据我了解)说它是帖子的类型......

在类型应该是上表的一行的情况下:

  1. 您可以废弃表“tblPostRelations”中的第一行,它除了类型之外不包含任何信息

  2. 您可以为该表创建一个复合键(包含“postId”、“parentPostId”),因为如果我正确解释了您的描述,那应该是唯一的组合

然后桌子看起来会……。像这样:

tblPost

postId 标题 描述 类型
1 父职称 测试一下 类型1
... ... ... ...

tblPostRelations

postId parentPostId
2 1
... ...

推荐阅读