我正在为私人网站开发CMS系统(主要是作为学习练习)。 Atm我有三个表格:一个用于文章,一个用于标签和连接表格,以便每篇文章可以有多个标签。避免在具有非唯一列的mySQL表中重复条目
我有问题,与由三列的表格 -
article_tags: id (auto_increment), article_id, tag_id
我的问题从文章可以出现任意次数,和标签也可以出现任意次数的事实茎,然而,两者的给定组合应该只出现一次 - 也就是说,每篇文章应该只有一个引用任何一个标签。目前,它可以插入“重复”行,其中的ID是不同的,但的article_id和TAG_ID的组合是相同的:
id , article_id, tag_id
1 1 1
2 1 2
3 2 1
4 1 1 <- this is wrong
我可以在PHP代码检查包含此组合的记录,但我如果可能的话,宁愿在sql中执行它(如果不是,或者它是不受欢迎的,那么我将使用PHP来完成)。由于id不同,并且无法设置独特的列,例如INSERT IGNORE和ON DUPLICATE不起作用。
我对mySQL非常陌生,所以如果我在做一些愚蠢的事情,请点我正确的方向。
感谢
非常简洁的答案。如果我理解正确#3是最差的,因为它会增加SELECT查询的开销? #2更糟糕,因为它基本上和#1一样,但是在旧的auto_increment形式中有一个额外的(不必要的?)列? – ProFishChris
不再简洁。看到我编辑的答案 –
虽然更详细!对不起,我感到困惑,但我更感兴趣的是你为什么按照你的方式命令他们,而不是如何实现他们 – ProFishChris