gpt4 book ai didi

mysql - 拥有并属于许多实现问题/标签

转载 作者:行者123 更新时间:2023-11-29 01:41:46 24 4
gpt4 key购买 nike

让我们以 Stackoverflow 为例:

两种模型:问题和标签

一个问题可以有很多标签。

是否应该创建一个单独的表“Question_tags”来管理关联,或者是否有办法在问题表中创建一个数组字段。

哪个更好?专用的“Question_tags”表会不会太过分了?

最佳答案

强烈建议您使用标签模型,而不是像哈希数组这样的序列化属性:

模型要灵活得多。将来您可能希望添加有关标签的新功能,例如搜索功能、自定义排序或符号。使用序列化属性,将很难执行此类操作。

假设您想要找到所有带有标签“hello-world”的问题,您将不得不进行复杂的 SQL 查询来检索所有带有此标签的问题,而不仅仅是一个简单的 Tag.where(name: 'hello-world').first.questions 检索相关问题。

此外,您可以使您的 Tag 模型成为多态的,这将允许您将标签分配给您定义为“可标记”的每个对象。


在模型中定义关联:

class Question < ActiveRecord::Base
has_many :question_tag_relations
has_many :tags, through: question_tag_relations

class Tag < ActiveRecord::Base
has_many :question_tag_relations
has_many :questions, through: question_tag_relations

class QuestionTagRelation < ActiveRecord::Base
belongs_to :question
belongs_to :tag
validates :question_id, presence: true # optionnal
validates :tag_id, presence: true # optionnal

您需要生成相应的迁移才能创建 question_tag_relations 表。

关于mysql - 拥有并属于许多实现问题/标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com