如何存储图像标签?

时间:2014-04-23 17:06:34

标签: database web

有网站,您可以找到并下载漂亮的壁纸。它们分为不同的组,例如:

  • 高山;
  • 林;
  • 的汽车。

有很多图片和不同的标签。图片和标签的数量每天都在迅速增加。

客户希望找到一张展示山脉和森林的图片。所以他选择标签“山”和“森林”。 网络开发人员已将图片放在服务器上并将其与标签链接。但是怎么样?可能有四种变体:

  1. 标签存储在一个单元格中:“mountains | forest”。为了 要搜索它们,有必要拆分字符串值。
  2. 标签位于已序列化的数组中,然后保存在单元格中。
  3. 有数据库表。一个包含图像ID和其他 属性。其他包含标签和它的ID。所以标签和图像都是 通过ids链接到彼此。
  4. 完全不同的方法:使用特殊来源存储图像 和他们的标签。
  5. 最好的方法是什么?还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

图像和标签之间的关系称为多对多。图像可以包含许多标签,标签可以应用于许多图像。在规范化数据库中,您可以使用以下表格表示:

image
======
id
file_path
...

tag
====
id
name
...

image_tag
=========
id
image_id
tag_id

以这种方式打破关系可以让您独立处理每种类型的资源:图像,标签或两者之间的链接。

答案 1 :(得分:1)

您正在寻找的是数据库中的多对多关系。选项1和2是不好的选择,你不应该出于各种原因使用它们。

我们将使用一个简单的例子。首先,你有一张包含图像的表格。它有三列,idimage_nameimage_data。您还有一个包含所有标签的表格。它有两列,idtag

您的多对多表将有两列名为image_idtag_id

所以,假设您有以下图片:

1    'house_in_hills.png'    BLOB  
2    'mountains.png'         BLOB  
3    'old_shoes.png'         BLOB

以下标签

1    'Mountains'
2    'House'
3    'Person'

您的多对多表格的条目如下:

1    1  # Image 'house_in_hills.png' has tag 'Mountains'
1    2  # Image 'house_in_hills.png' has tag 'House'
2    1  # Image 'mountains.png' has tag 'Mountains'

等等。我强烈建议您阅读多对多关系。