我有这些课程
class Match
{
int MatchID,
int TeamID, //used to reference Team
... other fields
}
注意:匹配实际上有2个团队,这意味着2个TeamID
class Team
{
int TeamID,
string TeamName
}
在我看来,我需要显示显示TeamName的List<Match>
。所以我添加了另一个字段
class Match
{
int MatchID,
int TeamID, //used to reference Team
... other fields
string TeamName;
}
我现在可以做
Match m = getMatch(id);
m.TeamName = getTeamName(m.TeamId); //get name from database
但对于List<Match>
,getTeamName(TeamId)
将转到数据库以获取每个TeamID的TeamName。
对于每页10个匹配的页面,可以是(10x2Teams)=20
数据库之旅。
为了避免这种情况,我想到了加载一次,将其存储在内存中并且只在内存中查找TeamName。这使我重新考虑如果记录是5000或更多,那该怎么办。
有更好的方法吗?感谢。
答案 0 :(得分:0)
执行每页缓存 - 将当前10个匹配列表中存在的ID列表放在一起,然后加载所有具有其中一个ID的团队。
您没有说明如何访问您的数据,但如果您使用的是SQL,那么IN就是您的朋友。
select * from teams were id in ('1', '2', '3', '4')
或者,您可以首先使用您的匹配加载团队,使用join语句,然后在填充匹配数据的同时填充团队数据。
答案 1 :(得分:0)
我同意目前给出的答案。我只想扩展马特的答案。如果您需要对象中的所有数据,那么在一次访问数据库中发出多个sql语句会更有效。这将在单个数据库命中返回多个表。