外键引用的元素顺序

时间:2018-04-18 14:09:49

标签: mysql database database-design software-design

我正在为这个用例考虑一个好的数据库设计:

  • topics
  • 使用外键articles
  • 的表topic_id
  • 目前,每篇文章都属于一个主题。在将来的版本中,我可能会更改它,因此一篇文章属于许多主题。

现在我想维护每个主题的文章顺序。我应该在哪个表中存储此信息:主题,文章还是第三个?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

因此,如果将来您想要为一篇文章提供许多主题,并且我认为一个主题可能包含许多文章,那么您将需要第三个表。 如果您只有一篇文章主题,则应将其插入表格文章中,一列为topic_id。

这将是一个多对多关系,因此您需要第三个表格,其中包含主题的ID和文章的ID。主键将是(topic_id,article_id),因此您只有一个article-topic组合。在此表中,topic_id和article_id都是外键。

答案 1 :(得分:1)

如果文章数量 - 主题链接是可变的,则需要一个链接表。

所以:

master

注意:

  • PK:主键
  • FK:foreing key
  • 在Topics-have-Articles中,PK是(idTopics,idArticles)
  • 您说您想维护主题内文章的顺序。起初,我已经设置了日期值。根据您的评论我将其修改为int值(Order)。然后,您可以设置应用程序页面以处理此排序。
  • 如果您暂时保持1比1的关系,这仍然有效,但允许您轻松过渡到n到1或n到m的关系。

订单栏的潜在问题:

  • 让我们说你订购你的文章1,2,3,4,5。如果你想把一个放在4到5之间怎么办?你必须重新排序它们。
  • 让我们说你订购10,20,30,40。然后你有10个“插槽”来放置新文章,但最终会用完。
  • 如果您的应用程序很小,这可能不是问题。但您可能需要编写一些代码来重新排序插入文章。
  • 这可能需要在SO中进行另一次搜索,例如:how to maintain display order field in php