我的post表包含以下列:id、user、id、title、message、date
我的评论表包含以下列:id、user\u id、post\u id、message、date
因为这两个表非常相似,所以最好有一个包含以下列的表:
id、用户id、父id、类型、标题、消息、日期
父帖子的每一行都有一个空的父帖子id值,子帖子的每一行都有一个空的标题值。父帖子的类型为1,子帖子的类型为2。
编辑:我也会使用一个评级功能,我会再次问同样的问题,2个特定的后评级和评论评级表,或一个通用评级表。对于ratings表,结构将完全相同,因此没有可为null的字段。评级表也不太可能改变,因为它只知道评级的所有者、实际评级和目标帖子/评论等。
2条答案
按热度按时间pxyaymoc1#
使用单个表将允许您拥有更深层的嵌套继承结构。例如:
因此,这是2表设置中不存在的附加功能。
“我只会在你需要这个功能的时候做”,因为查询会更复杂。在这样的表中添加一个(root\u id)列,以指示嵌套级别大于1的注解标题所在的节点,这也是有益的。
您还可以使用一个表作为数据,一个表作为父/子层次结构(这只是一个示例,您可能需要调整语法)。
1 | 100
2 | 101
3 | 102
4 | 103
5 | 104
6 | 105
7 | 106
8 | 107
9 | 108
这类事情并不简单,您还可以设置触发器来防止循环关系。
z8dt9xmd2#
我不会这么做,有几个原因:
这两者之间存在子/父关系,对于这样的关系,您有外键和单独的表。
切勿仅因为列的命名相同而使用同一个表。不要试图在这里节省空间,空间并不花费一件东西,但你的时间理解它或改变它以后会。必须解释你的数据库设计(你必须这么做)的结果是一个不明确的设计。所以,保持它的整洁,不要试图聪明地节省一些位或不必制作新表;)
对此表的更改总是同时影响两个元素,而不仅仅影响一个元素。如果你想在评论中添加一个缩略图链接,你也必须触摸帖子。这导致更多的测试,一切仍然有效。
表中有空值是可以的,但并不理想。当您在必须检查空值的编程环境中尝试使用此表时,这当然很烦人
如果它们继承自同一类型,则可以将它们放在一个表中。例如,您可以有一个“text”元素,让我们假设一个评论和一篇文章是一个文本。但是,第1点的关系仍然存在,这将再次导致丑陋的设计。
收视率系统:你只需要制作一个普通的收视率表,评论和帖子表就会与收视率表建立一个fk关系。就像你现在为用户准备的一样。但是,您也可以创建两个单独的表,以便以后更加灵活,并且它可以使连接更快一些,因为评级表不会变得那么大。但这更像是个人喜好。如果评级系统会相互偏离,我当然会制作一个单独的表格,但在这种情况下,我也会选择一个。