【问题标题】:How to store tags for images?如何存储图像的标签?
【发布时间】:2014-04-24 01:23:55
【问题描述】:

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

  • 山;
  • 森林;
  • 汽车。

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

客户想要找到一张同时呈现山脉和森林的图片。所以他选择标签“山”和“森林”。 Web 开发人员已经将图片放在服务器上并将其与标签链接。但是怎么做?可能有四种变体:

  1. 标签存储在一个像这样的单元格中:“mountains|forest”。为了 要搜索它们,必须拆分字符串值。
  2. 标签在数组中,序列化后保存在单元格中。
  3. 有数据库表。一个包含图像 ID 和其他 特性。其他包含标签和它的ID。所以标签和图像是 通过 ID 相互关联。
  4. 完全不同的方法:使用特殊源存储图像 和标签。

什么方法最好?有没有其他方法可以解决这样的任务?

【问题讨论】:

    标签: database web


    【解决方案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'
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多