我有一个表格,其行如下:
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并以这种方式搜索匹配。
哪种解决方案更好?
答案 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>