mysql—外键引用的元素的顺序

azpvetkf  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(322)

我正在考虑为这个用例设计一个好的数据库:
topicsarticles 带外键 topic_id 现在,每篇文章都属于一个主题。在将来的版本中,我可能会改变这一点,这样一篇文章就属于多个主题。
现在我想保持每个主题的文章顺序。我应该在哪个表中存储这些信息:主题、文章还是第三个?
非常感谢您的帮助!

vuv7lop3

vuv7lop31#

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

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

笔记:
主键:主键
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个“槽”来放置新文章,但你最终会用完。
如果您的应用程序很小,这可能不是问题。但是您可能需要编写一些代码来重新排序insert上的文章。
这可能需要在中进行另一次搜索,例如:如何在php中维护display order字段

8cdiaqws

8cdiaqws2#

因此,如果将来你想在一篇文章中有许多主题,并且,我假设一个主题可能有许多文章,你将需要第三个表。如果一篇文章只有一个主题,那么应该在表article中插入它,一列表示主题id。
这将是一个多对多关系,因此您需要第三个表,其中包含主题的id和文章的id。主键是(topic\u id,article\u id),所以您只有一个article topic的组合。在这个表中,topic\u id和article\u id都是外键。

相关问题