映射1:m
关系的最佳方式是什么?
例如。
歌曲数据库。我们有表格:
Songs
Artists
Albums
假设我们需要获取所有专辑。一首歌有Albums
的外键
我过去做的是获取所有专辑的列表:
SELECT * FROM `Albums`;
然后将其映射到一个物体 接下来,我会为每个专辑创建一个for-each循环并创建一个新的SQL查询
SELECT * FROM `Songs` WHERE albumId = album;
然后我再次映射它。
这显然是矫枉过正的。
这样做的正确方法是什么?
答案 0 :(得分: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
答案 1 :(得分:0)
如果您绝对需要完全填充所有模型对象,那么您最好获取所有歌曲,艺术家和专辑,并在本地缓存它们。
但是,通常情况下,当需要adidtional信息时,会发生模型对象的膨胀,例如。当用户选择“显示歌曲详细信息...”时,可以在此时恢复艺术家和专辑信息。