外键引用的元素顺序

Order of elements referenced by Foreign Keys

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

现在我想维护每个主题的文章顺序。 Table 我应该将此信息存储在哪个位置:主题、文章还是第三个?

非常感谢任何帮助!

因此,如果将来您希望一篇文章有​​多个主题,并且我想一个主题可能有很多文章,那么您将需要第三个 table。 如果一篇文章只有一个主题,则应将其插入 table 文章,一栏用于 topic_id。

这将是一个多对多关系,因此您需要第三个 table 以及主题 ID 和文章 ID。主键将是 (topic_id,article_id) 因此您只有一种文章主题组合。在这个 table 中,topic_id 和 article_id 都是外键。

如果文章数量 - 主题 link 是可变的,则需要 link table.

所以:

Table Articles
    idArticles   PK, int, auto-increment, not null
    Title        varchar, not null

Table Topics
    idTopics     PK, int, auto-increment, not null
    Title        varchar, not null

Table Topics-have-Articles
    idTopics     PK, FK to Topics:idTopics, not null
    idArticles   PK, FK to Articles:idArticles, not null
    Order        int, not null

备注:

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

订单字段的潜在问题:

  • 假设您订购了文章 1、2、3、4、5。如果你想把一个放在 4 和 5 之间会怎样?您必须全部重新排序。
  • 假设您订购了 10、20、30、40。然后你有 10 "slots" 可以在中间放置新文章,但你最终会 运行 出来。
  • 如果您的应用程序很小,这可能不是问题。但是您可能需要编写一些代码来重新排序插入的文章。
  • 这可能需要在 SO 中进行另一次搜索,例如:how to maintain display order field in php