在Mysql中实现关键字或标签的最佳方式
因此,我有一个食谱数据库,并且我想将关键字或标签与每餐相关联,例如 作为'中国','意大利','低卡'等。 用户从不提交关键字,因此我可以完全控制。 您认为以下哪一项是最佳方法?在Mysql中实现关键字或标签的最佳方式
答:我可以在餐桌中填写一列,后面加上关键字后加逗号。 意大利人,健康等等。然后,我可以从一列中的单一行抓取结果,然后使用PHP解析结果并完成繁重的工作。
B)我可以有一个关键字表,每行包含了meal_id,然后是一个关键字。然后我可以查询具有该ID的所有关键字。
或者是否有更好的方法来执行关键字,如全文?
如果您使用关键字表示类似标签的东西,这些标签在很多网站上都有使用,例如StackOverflow。那么你会有三张桌子。一张餐桌,一张带关键字的桌子,以及一张桌子连接在一起。通过这种方式,您可以使用简单的SQL查询高效地列出与某个关键字相关的所有餐食。
是的。其实这是你最好的选择。这创造了多对多的关系减少冗余。 – 2011-12-29 20:51:36
这么多好的答案,但我喜欢克里斯托弗的解释。我正在考虑这条路线,但问问专家总是很好的! – Naterade 2011-12-29 21:08:16
@Naterade乐于帮忙! – 2011-12-29 21:09:52
肯定会与B.这是更规范化的选项,将是最容易与之合作。否则你的代码将不得不解析查询结果。
但是,对于选项B *关键字*表示指向其他关键字表的ID。 – 2011-12-29 20:52:57
我不认为这就是他的意思,但我同意。最好的答案是在'meal'和'keyword'之间建立一个关联表,如'meal_keyword',其中包含'meal'和'keyword'的id。 – 2011-12-29 20:55:50
我肯定会使用单独的关键字表来确保您的数据库是正常化的。
B更适合当您通过标签进行搜索时将是一件小事。用A你必须更努力地工作。此外,通过使用GROUP_CONCAT(标签),您也可以使用B获取通信分隔标签
您是否需要使用此关键字搜索所有餐食? – 2011-12-29 20:48:57
是的,它必须使用该关键字匹配任何膳食,然后我会向用户显示与其相关的膳食。 – Naterade 2011-12-29 20:50:18