注释数据库表外键或只是id

时间:2014-10-22 07:43:02

标签: php mysql database-design laravel foreign-keys

我正在开发一个新项目,我需要设置一个数据库'Comments'表。 在我的项目中,可以在“页面”,“帖子”或“论坛主题”或其他内容上发表评论。 现在我想知道考虑到速度和可操作性,在Laravel环境中我的“评论”表的最佳设置是什么

创建一个包含多个外键的表,其中一个键将始终填充,另一个键将为NULL


id(int) - 评论(文字) - 帖子(FK) - 主题(FK) - 页面(FK)


或创建一个没有外键的表,但只创建一个id和一行来表示这样的评论类型


id(int) - comment(text) - type(varchar - 'post'或'topic') - type_id(int - 'post'或'topic'的id) < / p>


3 个答案:

答案 0 :(得分:2)

对于Scalability factor,您应该创建一个表格,其中包含评论所在的帖子类型,以便您以后可以添加其他类型的帖子。

所以评论表的结构应该是这样的:

id(int) - comment(text) - parent_type(int) - parent_id

parent_id(int) - parent_name(varchar)

根据类型,您可以决定要与之合作的表格。

答案 1 :(得分:1)

如果采用第二种方法会更好。

如果稍后再引入一个来源接受评论,那么如果您遵循第一种方法,则需要修改该表。此外,同一用户可以再次就同一主题提供评论。这种存储方式(第二种方法)有帮助。

获取记录仍然是有效的,因为无论是一行(第一种方法)还是几行(第二种方法),与总大小相比,特定主题的记录仍然具有非常高的选择性(并且非常有效)该表。

答案 2 :(得分:0)

我认为第二种方法更好,因为它会最小化表格中的空单元格,也会更容易查询。