数据库建模带有歌曲的播放列表

时间:2012-04-25 17:04:59

标签: ruby-on-rails

我想弄清楚为PlaylistSong设置模型的逻辑。

到目前为止,我有:

User has_many :playlists, has_many :songs

Playlist belongs_to :user, has_many :songs

Song belongs_to :user

我不确定如何关联一首歌可以属于许多播放列表。

我是否要设置has_and_belongs_to_many :playlists并设置连接表,还是应该进行has_many :through关联?

您是否可以仅针对一个型号进行HABTM关联,还是必须在您关联的两个型号上进行声明?在has_and_belongs_to_many :songs模型上建立Playlist关联是不对的。

UserSong之间的关系很好,我只是想实现Playlist。当然,一首歌不必属于播放列表。

3 个答案:

答案 0 :(得分:3)

通常会有一个具有以下结构的表:

unique_id song_id playlist_id

这允许任意数量的歌曲属于任意数量的播放列表。 unique_id仅适用于新表中的行。

答案 1 :(得分:2)

虽然HABTM完全可以工作但我认为你会想要使用has_many:through因为你很可能想要在列表/歌曲关系模型中添加一些额外的信息。例如,歌曲位置。

类似的东西:

List
  belongs_to :user
  has_many :relationships
  has_many :songs, :through => relationships

Song
  belongs_to :user
  has_many :relationships
  has_many lists, :through => :relationships

Relationship
  belongs_to :song
  belongs_to :list

答案 2 :(得分:0)

这个怎么样。

User:
  has_many :lists 
  has_many :songs

List: 
  belongs_to :user
  has_and_belongs_to_many :songs

Song
  belongs_to :user
  has_and_belongs_to_many :lists