外键引用的元素顺序
Order of elements referenced by Foreign Keys
我正在考虑为这个用例设计一个好的数据库:
- Table
topics
- Table
articles
带外键 topic_id
- 现在,每篇文章属于一个主题。在以后的版本中,我可能会改变这一点,让一篇文章属于多个主题。
现在我想维护每个主题的文章顺序。 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
我正在考虑为这个用例设计一个好的数据库:
- Table
topics
- Table
articles
带外键topic_id
- 现在,每篇文章属于一个主题。在以后的版本中,我可能会改变这一点,让一篇文章属于多个主题。
现在我想维护每个主题的文章顺序。 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