Ruby on rails 通过模型建立关系的外键或不外键或最佳实践

Ruby on rails 通过模型建立关系的外键或不外键或最佳实践,ruby-on-rails,Ruby On Rails,我正在构建一个小项目,无法决定如何将我的模型连接在一起。在我的例子中: 艺术家=>有许多专辑=>有许多曲目 看起来很容易 当我试图从曲目查询艺术家时,问题就开始了。我需要每次加入(:唱片集)还是艺术家有很多:曲目,通过::albums哪一个是相同的东西,还是最好将艺术家外键添加到曲目模型表中,并编写一些方法,以便在每次曲目添加到Album时将艺术家分配到曲目,还是一种不好的做法 我需要有关存储和性能方面的建议。我认为您可以这样做: 艺术家.rb: has_many :albums belong

我正在构建一个小项目,无法决定如何将我的模型连接在一起。在我的例子中:

艺术家=>有许多专辑=>有许多曲目

看起来很容易

当我试图从曲目查询艺术家时,问题就开始了。我需要每次加入(:唱片集)还是艺术家有很多:曲目,通过::albums哪一个是相同的东西,还是最好将艺术家外键添加到曲目模型表中,并编写一些方法,以便在每次曲目添加到Album时将艺术家分配到曲目,还是一种不好的做法


我需要有关存储和性能方面的建议。

我认为您可以这样做:

艺术家.rb

has_many :albums
belongs_to :artist
has_many :tracks
belongs_to :album
相册.rb

has_many :albums
belongs_to :artist
has_many :tracks
belongs_to :album
track.rb

has_many :albums
belongs_to :artist
has_many :tracks
belongs_to :album
当您从控制器调用时,例如:

@track = Track.find(params[:id])
@album_name = @track.album.name # or better @track.album.try(:name)
@artist_name = @track.album.artist.name # or better @track.album.try(:artist).try(:name)

您不必再次手动加入其中。

性能和存储不应该是主要问题——这些问题会随着请求而出现;不是存储容量

如果您有4个型号,您将遇到与400个型号相同的100万个请求问题


您所描述的内容听起来像是您将从ActiveRecord关联中受益,如下所示:

#app/models/artist.rb
Class Artist < ActiveRecord::Base
    has_many :albums, :class_name => 'Album'
    has_many :tracks, :class_Name => 'Track', :through => :albums
end
这将允许您执行此类查询:

@artist.tracks  #-> will come back with all the tracks for the artist (you can group by album if you require)

你到底想做什么?当然你可以只使用ActiveRecord关联?但是sql将使用3个表,这就是我担心的问题,如果我使用has多个关联,为什么我在tracks表中需要艺术家id?它通过tracks\u album\u id字段将albums表连接到tracks表,然后通过albums\u Artister\u id字段连接艺术家表,这对我来说似乎太多了。这就是为什么这个问题被质疑的原因——我的意思是要包括
album\u id
,这只会将曲目加入到专辑中;但是当你的艺术家模型加入相册时,它可以通过相册模型加入到曲目中我想我对一个查询中多次加入的恐惧已经消失了,因为似乎没有人害怕它)谢谢你Timerol多个加入是你最不担心的!我刚才展示的是惯例——所有的处理能力现在都可以处理这类事情;您需要注意的是可伸缩性和可扩展性:)