我应该将标签存储在文本字段还是单独的表中?

时间:2014-03-27 10:31:23

标签: php mysql web

我有一个表格,其行如下:

id : path : tags
1 : pictures/pic1.jpg : car bmw
3 : pictures/pic2.jpg : cat animal pussy
4 : pictures/pic3.png : gun

基本上它是一个画廊,我在桌面上存储图片的路径,所以我可以在网页上列出它们。

用户可以选择根据他提供的关键字搜索某些图片。因此,例如,他将“汽车枪”输入搜索区域,并且为他拉出所有具有这些标签之一的图片。 基本标签搜索:

SELECT * FROM pictures WHERE tags LIKE '%car%' OR tags LIKE '%gun%'

现在我想知道的是,存储标签的更好解决方案是什么?是上面描述的还是这个:

表图片:

id : path
1 : pictures/pic1.jpg
3 : pictures/pic2.jpg
4 : pictures/pic3.png

表格标签:

pic_id : tag
1 : car
1 : bmw
4 : gun
..and so on..

标签存储在一个单独的表中,每个标签都有自己的行,因此在搜索过程中,我将执行JOIN并以这种方式搜索匹配。

哪种解决方案更好?

2 个答案:

答案 0 :(得分:3)

关于规范化和可重用性,我建议这样的事情:

表图片:

id : path
1 : pictures/pic1.jpg
2 : pictures/pic2.jpg
3 : pictures/pic3.png

表格标签:

tag_id : tag
1 : car
2 : bmw
3 : gun

表tags_pictures:

id : tag_id : pic_id
1 : 1 : 1
2 : 2 : 1
3 : 3 : 3

答案 1 :(得分:2)

在这些情况下,最好的方法是为每个图像的标签创建一个中间表,建立多对多的关系。

然后你将有三个表:一个用于存储具有id和属性的图像,另一个用于保存标签及其id,最后是一个保存所有标签的图像id和标签id的表。 / p>