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
2条答案
按热度按时间vuv7lop31#
如果文章-主题链接的数量是可变的,则需要一个链接表。
所以:
笔记:
主键:主键
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字段
8cdiaqws2#
因此,如果将来你想在一篇文章中有许多主题,并且,我假设一个主题可能有许多文章,你将需要第三个表。如果一篇文章只有一个主题,那么应该在表article中插入它,一列表示主题id。
这将是一个多对多关系,因此您需要第三个表,其中包含主题的id和文章的id。主键是(topic\u id,article\u id),所以您只有一个article topic的组合。在这个表中,topic\u id和article\u id都是外键。