2013-09-27 132 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他們。

但是,通常情況下,當需要附加信息時,會使模型對象膨脹,當用戶選擇顯示歌曲細節...時,藝術家和專輯信息可以在此時緩解。