SQL表关联

时间:2011-05-27 04:17:05

标签: php mysql database-design

我有3个数据库表,我需要对它们进行规范化。表格之间的关联如下:

表: 问题 答案 3.评论

  • (问题可以包含许多答案和许多评论)
  • (答案可以包含很多评论)

我知道我可以在一个表格中使用问题和答案,然后我解决问题,但我想以这种方式使用它,那么将“评论”与“问题”和“答案”联系起来的最佳方法是什么? / p>

我试图将问题ID和答案ID放入评论表中,并且每行只使用其中一个,这是对的吗?这样我就可以在PHP脚本中使用它们,但我不知道是否还有另一种更好的方法,因为我问过。

谢谢。

2 个答案:

答案 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