我有3个数据库表,我需要对它们进行规范化。表格之间的关联如下:
表: 问题 答案 3.评论
我知道我可以在一个表格中使用问题和答案,然后我解决问题,但我想以这种方式使用它,那么将“评论”与“问题”和“答案”联系起来的最佳方法是什么? / p>
我试图将问题ID和答案ID放入评论表中,并且每行只使用其中一个,这是对的吗?这样我就可以在PHP脚本中使用它们,但我不知道是否还有另一种更好的方法,因为我问过。
谢谢。
答案 0 :(得分:3)
我会按如下方式设置它们:
Posts (both Questions and Answers would be types of "Posts"):
Post_ID
[Fields Common to Posts, e.g. "Post_Content", "Poster_ID", "Post_TimeStamp" etc.]
Questions:
Question_ID
Post_ID
[Question-specific fields, e.g. "Question_Title"]
Answers:
Answer_ID
Post_ID
[Answer-specific fields]
Comments:
Comment_ID
Post_ID
[Comment fields]
拥有单独的Posts表的主要思想是规范化您的数据库,并允许注释的逻辑结构指向两者。与APC评论一样,它也为您提供了一个良好的设置,可以用于开发未来的网站/数据库(当您可能需要其他类型的可评论的“帖子”时。
虽然下面列出的枚举方法可行,但数据库设计并不好。一般情况下,我建议您在表示真实世界的项目列表时仅使用ENUM。而不是用于组织数据库结构。
答案 1 :(得分:0)
在type
表格中使用额外的comments
字段,其中包含"question"
或"answer"
多态关联。然后查询只包含该字段:
SELECT * FROM `comments` WHERE `type` = 'question' AND `foreign_key` = 42