【发布时间】:2017-06-12 19:33:28
【问题描述】:
我有一个看起来像这样的User 模型:
class User < ApplicationRecord
belongs_to :organization
belongs_to :department
end
数据库中的users 表有两个外键organization_id 和department_id。如何使这两列成为复合主键?到目前为止,我在网上看到了两种方法:
选项 1
使用composite_primary_keys gem
选项 2
使用以下方法为两列中的每一列添加索引:
add_index :users, [:organization_id, :department_id], unique: true
我的问题
在users 表中唯一标识行的最佳方法是什么,其中行必须具有department_id 和organization_id 才能被唯一标识?索引两列和简单地使每列成为表的主键有什么区别?
谢谢!
【问题讨论】:
-
首先,为什么要使用复合主键而不是遵循 Rails 约定,并且只具有与组织和部门的
id列和belongs_to关联?复合主键对应用程序的许多其他部分有影响:Rails 链接助手可能无法与复合键一起使用,查找器的工作方式不同,外键更难使用...... -
选项 2 是最好的选择。选项 1 是您在别无选择时所做的,例如您背负着无法更改的旧数据库。
标签: ruby-on-rails ruby ruby-on-rails-5 composite-primary-key database-indexes