我目前正在建立另一个通用的博客风格网站,我开始思考。我通常在Posts
使用单独的表,而Comments
使用另一个表,然后使用FK加入它们。我开始怀疑,他们真的值得分开吗?
例如,他们共享的属性包括:
一个Post
有(可选)许多Comments
,许多Comments
只有一个Post
,还有一个Comment
,也可能有很多Comments
}}
现在它会更有意义。对于包含两者的表,评论和帖子,并从内部自我引用?有一个单独的查找表,用于包含每种类型的实体。
然而,如果帖子是评论,评论与帖子没有什么不同。除了在视图上下文中,应该发布的图像是否也包含在同一个表中?作为这些,可以有喜欢/评论/名称等。
简而言之:博客帖子和评论是否属于同一张表?
答案 0 :(得分:1)
我会给你一个实际的答案。
根据经验,当你有两个只有一个或两个不同谓词的明显子类型时,将它们存储在不同的物理表中并不一定有用。
您的逻辑模型应区分帖子和评论,因为它们有不同的关系。
根据您的描述,对于您的物理模型,您实际上只有一个不同的谓词。帖子和评论之间的基本区别似乎是引用父帖子/评论的外键。我假设您会说帖子不能有儿童帖子,而您说评论可以有孩子评论。
由于这是唯一的区别,我会说,出于实际目的,您的物理表应该结合帖子和评论。
您一般如何决定?
一般情况下,当您对表格进行物理分类时,它不会被切断和干燥。所有设计都是权衡取舍。我要查找的是两个子类型之间不同列的数量,但我也看看这些列是什么以及它们可能会对我的应用程序逻辑产生多大影响。
拥有多个不同的谓词通常是一个非常好的迹象,你应该在物理上进行子类型化。但是,如果这些列刚刚出现,并且不会过多地影响您的应用程序逻辑,那么它们可能只是组合表上的可空列。
另一方面,两个子类型之间可能只有一个不同的列,但该列完全改变了应用程序的行为方式。在这种情况下,为了保持代码清洁,您可以单独为该列进行子类型化。