jcn*_*ghm 7 ruby sql database ruby-on-rails has-many
假设您有两个模型,User和City,由第三个模型CityPermission加入:
class CityPermission < ActiveRecord::Base
belongs_to :city
belongs_to :user
end
class City < ActiveRecord::Base
has_many :city_permissions
has_many :users, :through => :city_permissions
end
class User < ActiveRecord::Base
has_many :city_permissions
has_many :cities, :through => :city_permissions
end
Run Code Online (Sandbox Code Playgroud)
目前,我使用以下迁移代码段创建连接表和表的索引:
create_table :city_permissions do |t|
t.integer :user_id, :city_id
t.other_fields ...
end
add_index(:city_permissions, :user_id)
add_index(:city_permissions, :city_id)
Run Code Online (Sandbox Code Playgroud)
这些是创建的最佳指标吗?这些索引是否允许通过连接表来回快速访问,以及在表格内快速查找,还是有其他更好的方法?以不同的方式重申这一点,将这些指标,因为city和user有级市和用户的实例变量,允许city.users,city.city_permissions,user.cities,和user.city_permissions所有同样表现出色?
在我看来很好。
生成的联接应该仅位于实体表的 PK ID 上,或者位于联接表中的 FK ID 上 - 这两者都是索引。
查看生成的 ActiveRecord SQL 并将其与索引进行比较可能会更好。
根据您所在的数据库,您可以通过解释计划运行该 SQL(或任何存在的工具,我在这里考虑 Oracle)
has_and_belongs_to_many为了简化您的代码,您也可以考虑使用。这将使您摆脱 CityPermission 对象(除非您想使用它本身存储数据)