【问题标题】:How to store tags in MySQL tags, one field in total or one filed for each tag?如何在MySQL标签中存储标签,总共一个字段或每个标签一个字段?
【发布时间】:2009-11-30 13:50:02
【问题描述】:

我正在开发一个接近 stackoverflow.com 的产品。海报需要为他的问题或任务输入标签。如何将这些标签存储在数据库中,总共一个字段(列)或一个标签一个字段(列)?

【问题讨论】:

    标签: mysql database-design tags


    【解决方案1】:

    我认为Many to Many 关系会对你有所帮助

    类似

    --------             -----------------           ------------
    - tags -   <-------> - products_tags - <-------> - products - 
    --------             -----------------           ------------
    

    编辑:

    多对多方法是更规范的方法,但我认为最难实现,因为在这种情况下,它基于连接来获取给定“产品”的所有标签。 优点:

    1. 完全标准化
    2. DRY: 因为 如果您需要更改标签名称 可以做到,你会看到 随处变化

    另一种方法是将所有标签保存在一个字段中,并用某些东西分隔(比如说逗号)。在这里,您可以快速获取标签。您只需要按该分隔符拆分标签即可。保存标签也更容易。 但我不喜欢这种方法,因为如果您需要更新模板,您需要逐条进行,拆分,更新,然后保存..

    【讨论】:

      【解决方案2】:

      我会做这样的事情......

      tblAvailableTags
        - tag_id
        - tag_name
      
      tblTasks
        - task_id
        - task_name
        - ...etc
      
      tblTaskTags
        - task_tag_id
        - task_id
        - tag_id
      

      所以 tblTask​​Tags 将是您在两者之间的链接......所以您可以做一些事情来达到

      的效果

      SELECT * FROM tblTask​​Tags WHERE task_id = 选定的任务 ID

      【讨论】:

      • 好,但是task_tag_id是不必要的,因为task_id+tag_id一起可以充当主键。
      • 这是我更喜欢的答案:)
      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 2015-10-22
      • 2015-09-01
      • 2012-10-22
      • 1970-01-01
      • 2013-04-17
      相关资源
      最近更新 更多