Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL表关联_Php_Mysql_Database Design - Fatal编程技术网

Php SQL表关联

Php SQL表关联,php,mysql,database-design,Php,Mysql,Database Design,我有3个数据库表,需要对它们进行规范化。表之间的关联如下所示: 表: 1.问题 2.答案 3.评论 (问题可以包含许多答案和许多评论) (答案可能包含许多注释) 我知道我可以在一张表中使用问题和答案,然后我解决问题,但我想这样使用,那么将“评论”与“问题”和“答案”联系起来的最佳方式是什么 我试图将问题id和答案id放入注释表中,每行只使用其中一个,对吗?这样,我可以在php脚本中使用它们,但我不知道是否还有其他更好的方法,因为我问过 谢谢。我将按如下方式设置它们: Posts (both

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

表: 1.问题 2.答案 3.评论

  • (问题可以包含许多答案和许多评论)
  • (答案可能包含许多注释)
我知道我可以在一张表中使用问题和答案,然后我解决问题,但我想这样使用,那么将“评论”与“问题”和“答案”联系起来的最佳方式是什么

我试图将问题id和答案id放入注释表中,每行只使用其中一个,对吗?这样,我可以在php脚本中使用它们,但我不知道是否还有其他更好的方法,因为我问过


谢谢。

我将按如下方式设置它们:

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 commented一样,它也为您将来开发站点/数据库提供了良好的设置(当您可能需要其他类型的可评论“帖子”时)


虽然下面列出的枚举方法可以工作,但它不是很好的数据库设计。一般来说,我建议仅在表示真实世界的项目列表时使用枚举。而不是用于组织数据库结构。

注释
表中使用一个额外的
类型
字段,该字段包含
“问题”
“answer”
用于多态关联。然后查询只包括该字段:

SELECT * FROM `comments` WHERE `type` = 'question' AND `foreign_key` = 42

+1-规范的解决方案。这个解决方案有一个明显的优点,就是如果需要的话,添加新类型的帖子相对来说比较容易。我同意在这个具体的例子中不太可能,但是如果我们讨论的是人而不是帖子,好处会更清楚。很好的答案。我不是在批评你的答案。只是好奇为什么问题表有问题ID和帖子ID等等?你认为帖子有什么共同点,问题有哪些具体点?谢谢!更新了帖子并添加了解释和示例字段。我们无法对两个表定义外键约束,因此无法强制执行该列中的值。(假设我们使用InnoDB作为引擎,否则这一点是没有意义的)。我已经需要保存ID,因此添加新列对我没有好处。像stackoverflow中这样思考,我想他们会像@babonk所说的那样使用它。值得一看@ConradFrix是如何做到的这是一个很好的贡献