-1

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

例如。


歌曲数据库。我们有以下表格:

  • Songs
  • Artists
  • Albums

假设我们需要获取所有专辑。一首歌有一个外键Albums
我以前做的是获取所有专辑的列表:

SELECT * FROM `Albums`;

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

SELECT * FROM `Songs` WHERE albumId = album;

然后我会再次映射它。


这显然是矫枉过正。

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

4

2 回答 2

1

Album我认为拥有一个ICollection<Song> Songs和拥有一个是最有意义ArtistICollection<Album> Albums

在此之后,您的查询应该很简单。

假设我们需要获取所有专辑。

SELECT * FROM Albums

专辑有歌曲的外键

我认为 aSong实际上应该有一个外键,Album因为它唯一地定义了一个Song可以在多个专辑上的 a。

我的问题实际上措辞很糟糕。你能举一个这样的查询的例子吗?就像问题中一样:获取所有包含相关歌曲的专辑。

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

于 2013-09-27T11:40:39.680 回答
0

如果您绝对需要完全填充所有模型对象,那么您最好获取所有歌曲、艺术家和专辑并在本地缓存它们。

但是,通常情况下,当需要其他信息时(例如,当用户选择 Show Song Details... 时)会膨胀您的模型对象,此时可以重新获取艺术家和专辑信息。

于 2013-09-27T11:41:15.830 回答