sql - 如何设计像博客文章及其子文章一样捕获父子的 SQL 表
问题描述
用例是存储博客文章列表,其中每个文章可以有多个属于不同类型的子文章。
我想到的方法是 - 所有帖子都进入这个主表。一个帖子可以有多个父帖子。正是出于这个原因,我认为有一个单独的表来保存关系会更好。
tblPost
postId | 标题 | 描述 |
---|---|---|
1 | 父帖子标题 | 测试一下 |
2 | 子帖子标题 | 测试一下 |
3 | 第二个孩子帖子标题 | 测试一下 |
tblPostRelations
ID | postId | parentPostId | 类型 |
---|---|---|---|
1 | 1 | 无效的 | 类型1 |
2 | 2 | 1 | 类型2 |
3 | 3 | 1 | 类型3 |
因此,对于任何给定的帖子,我将查询该表以查明它是否是子表,并将其呈现为 UI 中的子部分。
设计看起来很简单,但不确定方法是否合适。关于改进/调整/指出明显错误的任何想法?
解决方案
类型不应该在上表中吗?
不确定,因为您的表结构表明类型决定了关系的类型,而您的描述(至少据我了解)说它是帖子的类型......
在类型应该是上表的一行的情况下:
您可以废弃表“tblPostRelations”中的第一行,它除了类型之外不包含任何信息
您可以为该表创建一个复合键(包含“postId”、“parentPostId”),因为如果我正确解释了您的描述,那应该是唯一的组合
然后桌子看起来会……。像这样:
tblPost
postId | 标题 | 描述 | 类型 |
---|---|---|---|
1 | 父职称 | 测试一下 | 类型1 |
... | ... | ... | ... |
tblPostRelations
postId | parentPostId |
---|---|
2 | 1 |
... | ... |
推荐阅读
- r - 根据 vcf 文件中的备用列重新排序变体效果
- javascript - Javascript:将另一个类的方法绑定到函数方法中的“this”关键字
- sas - 查找每个组的第一个和第二个日期
- ruby-on-rails - 升级到 ActionText - 编辑器无法正常工作/显示
- azure - com.azure.storage.blob.* 和 com.microsoft.azure.storage.blob.* 之间的区别
- xcode - 如何在选择 Jenkins 节点之前检查 git 中文件的值?
- python - 使用 super() 函数创建引擎时出现 SQLAlchemy 错误
- c# - 如何在 C# unity 中创建正确的 2D 运动
- raku - WebApp::Template 条件行为和变量的使用
- pandas - pandas to_sql postgres 复制行