Database 如何存储图像的标签?

Database 如何存储图像的标签?,database,web,Database,Web,有一个网站,你可以找到和下载美丽的壁纸。它们被分为不同的组,例如: 山脉 森林 汽车 有很多图像和不同的标签。图片和标签的数量每天都在快速增长 一位客户希望找到一张既能展现山脉又能展现森林的图片。所以他选择了“山”和“森林”两个标签。 一位web开发人员已经将图片放到服务器上,并将其与标签链接起来。但是怎么做呢?可能有四种变体: 标签存储在一个单元格中,如:“山脉|森林”。整齐 要搜索它们,必须拆分字符串值 标记位于序列化后保存在单元格中的数组中 有数据库表。一个包含图像ID和其他ID 财产

有一个网站,你可以找到和下载美丽的壁纸。它们被分为不同的组,例如:

  • 山脉
  • 森林
  • 汽车
有很多图像和不同的标签。图片和标签的数量每天都在快速增长

一位客户希望找到一张既能展现山脉又能展现森林的图片。所以他选择了“山”和“森林”两个标签。 一位web开发人员已经将图片放到服务器上,并将其与标签链接起来。但是怎么做呢?可能有四种变体:

  • 标签存储在一个单元格中,如:“山脉|森林”。整齐 要搜索它们,必须拆分字符串值
  • 标记位于序列化后保存在单元格中的数组中
  • 有数据库表。一个包含图像ID和其他ID 财产。其他包含标签和它的ID。所以标签和图像是 通过ID相互链接
  • 完全不同的方法:使用特殊源存储图像 还有他们的标签

  • 哪条路最好?还有其他方法可以解决这类任务吗?

    图像和标记之间的关系称为多对多。一个图像可以有许多标记,并且标记可以应用于许多图像。在规范化数据库中,您可以使用以下表格来表示这一点:

    image
    ======
    id
    file_path
    ...
    
    tag
    ====
    id
    name
    ...
    
    image_tag
    =========
    id
    image_id
    tag_id
    

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

    您要查找的是数据库中简单的多对多关系。选项1和2是不好的选项,您不应该出于各种原因使用它们

    我们将使用一个简单的例子。首先,您有一个包含图像的表。它有三列,
    id
    image\u name
    image\u data
    。您还有一个包含所有标记的表。它有两列,
    id
    tag

    然后,多对多表将有两列,分别命名为
    image\u id
    ,和
    tag\u 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'
    
    等等。我强烈建议阅读多对多关系