高级MySQL数据库关系

时间:2012-11-20 11:04:54

标签: php mysql database

这是一个有点愚蠢的问题(可能),但我不太清楚究竟要搜索什么或者在MySQL数据库方面会调用什么。

基本上我想在MySQL数据库方面迈出下一步。我想做的(作为一个例子)就是说我有一个包含文章的表,然后是另一个用户表。每个用户可以(为了示例)“喜欢”或“跟随”文章。我如何在MySQL方面做到这一点?这可以通过正常的关系数据库来实现吗?我能想到的最好的情况是有一个名为article_likes的单独数据库,其中包含用户的ID以及文章的ID,但它看起来很笨拙。

1 个答案:

答案 0 :(得分:0)

您有两个实体:文章和用户。并且因为每篇文章都可以被“喜欢”许多用户,并且每个用户都可以“喜欢”许多文章,这就是规范化中被称为多对多关系(也称为n:m)。

在关系数据库中,您不能拥有这种关系。要解决此问题,您需要创建一个将两个表链接在一起的额外表。它会像users_articles那样放置用户的密钥(标识符),文章的密钥(标识符)以及任何其他信息,例如跟踪时的日期等。

id_users_articles id_user   id_articles   date_added  status ....
1                 1         1             2012/11/01 ....
2                 1         2             2012/11/01 ....
3                 2         1             2012/11/01 ....

通过这种结构,用户和文章之间的多对多关系成为两个多对一关系:

  1. 在users和users_articles之间
  2. 文章与user_articles之间。
  3. 请注意,新创建的表有两个外键(用户,文章),但是好的做法是说它们自己有一个id(自动递增)。