2013-09-27 134 views
-1

映射1:m关系的最佳方法是什么?1:m关系映射

例如。


歌曲数据库。我们有表:

  • Songs
  • Artists
  • Albums

比方说,我们需要获取的所有专辑。一首歌有一个外键Albums
我以前做的就是让所有的专辑列表:

SELECT * FROM `Albums`; 

然后将其映射到一个对象。
接下来,我会做一个for-each循环,虽然每一张专辑,并作出新的SQL查询

SELECT * FROM `Songs` WHERE albumId = album; 

然后我会再次映射。


这显然是矫枉过正。

这样做的正确方法是什么?

+0

只有一个疑问,在mySQL中你不能使用表连接? –

+0

@JhonatasKleinkauff当然,我想这实际上是一个不好的例子。这不是m:m,让我重新修饰它。 – NSAddict

+0

@JhonatasKleinkauff编辑我的问题 – NSAddict

回答

1

我觉得最有意义的一个Album有一个ICollection<Song> Songs,为Artist有一个ICollection<Album> Albums

您的疑问应该是在这之后简单。

假设我们需要获取所有相册。

SELECT * FROM Albums

的专辑有一个外键,歌曲

我觉得一个Song实际上应该有一个外键的Album,因为它唯一地定义一个Song这可能是上多个专辑。

我的问题实际上是非常措辞。你能举一个 这样的查询吗?就像在问题中一样:使用 关联歌曲获取所有专辑。

SELECT a.Album_Name, s.Song_Name FROM Albums a JOIN Songs s ON a.Album_Name = s.Album_Name

+0

我的问题实际上是非常措辞。你能举一个这样的查询的例子吗?就像问题一样:获取所有相关歌曲的相册。 – NSAddict

+0

我看到,对于映射,可以使用带有专辑ID键的字典。我想这是非常有帮助的,谢谢! – NSAddict

+0

“我认为一首歌实际上应该拥有一张专辑的外键,因为它唯一定义了一首可能位于多个专辑中的歌曲” 当然你是对的,这是一个错误 – NSAddict

0

如果你绝对需要充分填充所有的模型对象,那么你会更好,让您的所有歌曲,艺术家,专辑和当地cacheing他们。

但是,通常情况下,当需要附加信息时,会使模型对象膨胀,当用户选择显示歌曲细节...时,艺术家和专辑信息可以在此时缓解。