Php 我应该将标记存储在文本字段中还是单独的表中?
我有一个表,其中的行是这样的:Php 我应该将标记存储在文本字段中还是单独的表中?,php,mysql,web,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 *
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
id : path
1 : pictures/pic1.jpg
2 : pictures/pic2.jpg
3 : pictures/pic3.png
表标记:
pic_id : tag
1 : car
1 : bmw
4 : gun
..and so on..
tag_id : tag
1 : car
2 : bmw
3 : gun
标记存储在单独的表中,每个标记都有自己的行,因此在搜索过程中,我将以这种方式执行连接和搜索匹配项
哪种解决方案更好?在这些情况下,最好的方法是为每个图像的标签创建一个中间表,建立多对多关系
然后您将有三个表:一个用于存储图像及其id和属性,另一个用于保存标记及其id,最后一个表用于保存所有标记的图像id和标记id。在这些情况下,最好的方法是为每个图像的标记创建一个中间表,建立多对多关系
然后您将有三个表:一个用于存储图像及其id和属性,另一个用于保存标记及其id,最后一个表用于保存所有标记的图像id和标记id。关于规范化和可重用性,我建议如下:
id : path : tags
1 : pictures/pic1.jpg : car bmw
3 : pictures/pic2.jpg : cat animal pussy
4 : pictures/pic3.png : gun
表格图片:
id : path
1 : pictures/pic1.jpg
3 : pictures/pic2.jpg
4 : pictures/pic3.png
id : path
1 : pictures/pic1.jpg
2 : pictures/pic2.jpg
3 : pictures/pic3.png
表标记:
pic_id : tag
1 : car
1 : bmw
4 : gun
..and so on..
tag_id : tag
1 : car
2 : bmw
3 : gun
表格标签和图片:
id : path
1 : pictures/pic1.jpg
3 : pictures/pic2.jpg
4 : pictures/pic3.png
id : path
1 : pictures/pic1.jpg
2 : pictures/pic2.jpg
3 : pictures/pic3.png
id : tag_id : pic_id
1 : 1 : 1
2 : 2 : 1
3 : 3 : 3
关于规范化和可重用性,我建议如下:
id : path : tags
1 : pictures/pic1.jpg : car bmw
3 : pictures/pic2.jpg : cat animal pussy
4 : pictures/pic3.png : gun
表格图片:
id : path
1 : pictures/pic1.jpg
3 : pictures/pic2.jpg
4 : pictures/pic3.png
id : path
1 : pictures/pic1.jpg
2 : pictures/pic2.jpg
3 : pictures/pic3.png
表标记:
pic_id : tag
1 : car
1 : bmw
4 : gun
..and so on..
tag_id : tag
1 : car
2 : bmw
3 : gun
表格标签和图片:
id : path
1 : pictures/pic1.jpg
3 : pictures/pic2.jpg
4 : pictures/pic3.png
id : path
1 : pictures/pic1.jpg
2 : pictures/pic2.jpg
3 : pictures/pic3.png
id : tag_id : pic_id
1 : 1 : 1
2 : 2 : 1
3 : 3 : 3
你可能想读我喜欢的“带pic_id的表标记”,只是因为它呼吸和感觉更像是SQL变体的关系数据库。你可能想读我喜欢的“带pic_id的表标记”,只是因为SQL变体更像是一个关系数据库。是的,我也在考虑这个解决方案,但放弃了它,因为它需要3个表,我担心它会影响性能。@user3240613,除非您有100.000s行,你真的不需要担心performance@user3240613正如kingkero所说,与每次必须用另一种方法解析每一组标记时所获得的性能相比,行和表的数量不是问题。是的,我也在考虑这个解决方案,但是放弃了它,因为它需要3个表,我担心它会影响性能。@user3240613除非您有100.000行,否则您真的不需要担心performance@user3240613正如金科罗所说,与每次必须在另一种方法中解析每一组标记时都缺乏性能相比,行和表的数量不是问题。