【问题标题】:Should I use an ENUM or create another pivot table in this "has_many :through" relationship in my Rails project?我应该在我的 Rails 项目中的“has_many :through”关系中使用 ENUM 还是创建另一个数据透视表?
【发布时间】:2016-04-24 08:45:41
【问题描述】:

我是一名初学者 Rails 开发人员,正在尝试为电影数据库构建界面。我正在使用名为“persons_projects”的数据透视表在人员模型和项目模型之间创建“has_many :through”多对多关系。该表目前有 2 列:person_id 和 project_id。我想添加另一列来指示此人在项目中扮演的角色(演员、导演等)。我应该为角色创建一个新表并将新列添加为persons_projects 中的外键作为role_id 还是在此处使用具有“ACTOR”、“DIRECTOR”等值的ENUM?我从未使用过 ENUM,想知道这是否是一个好的用例?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 database-design enums has-many-through


    【解决方案1】:

    我应该为角色创建一个新表并将新列作为外键添加到 person_projects 中作为 role_id 吗?

    不,你不应该,因为角色的数量很少,而且是稳定的。所以新建表效率低。

    我会使用带有“ACTOR”、“DIRECTOR”等值的 ENUM?我从未使用过 ENUM,想知道这是否是一个好的用例?

    当然,这绝对是使用enum的用例,你可以这样做:

    class PersonProject < ActiveRecord::Base
      belongs_to :person
      belongs_to :project
      enum role: [:actor, :director]
    end
    

    【讨论】:

    • Rails 的 enum 实现是否在数据库中保存为整数而不是 enum 数据类型?如果是这样,您是否知道解决此问题的方法(可能是宝石?)?
    • 在deep中,数据库中的数据类型是整数,在上面的代码中,如果在数据库中是0,则角色是:actor,如果你这样定义enum role: {actor: 0, director: 1}会更清楚,这是细节api.rubyonrails.org/v4.1/classes/ActiveRecord/Enum.html
    猜你喜欢
    • 2020-01-08
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 2020-12-12
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多