0

我有这些课程

class Match
{
  int MatchID,
  int TeamID, //used to reference Team
  ... other fields
}

注意:比赛实际上有 2 支球队,这意味着 2 个 TeamID

class Team
{
   int TeamID,
   string TeamName
}

在我看来,我需要显示List<Match>TeamName。所以我添加了另一个字段

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

但是对于 a List<Match>getTeamName(TeamId)将去数据库获取每个 TeamID 的 TeamName。

对于每页 10 个匹配项的页面,这可能是(10x2Teams)=20数据库之旅。

为了避免这种情况,我想到了一次加载所有内容,将其存储在内存中,然后只在内存中查找 TeamName。这让我重新思考如果记录是 5000 或更多会怎样。

有更好的方法吗?谢谢。

4

2 回答 2

0

执行每页缓存 - 将当前 10 个匹配项列表中存在的 id 列表放在一起,然后加载具有这些 id 之一的所有团队。

你没有说你是如何访问你的数据的,但是如果你使用的是 SQL,那么 IN 是你的朋友。

select * from teams were id in ('1', '2', '3', '4')

或者,您可以首先使用 join 语句为球队加载比赛,然后在填充比赛数据的同时填充球队数据。

于 2012-08-27T23:39:02.333 回答
0

我同意到目前为止给出的答案。我只是想扩展马特的答案。如果您需要对象中的所有数据,那么在一次访问数据库中发出多个 sql 语句会更有效。这将在单个数据库命中返回多个表。

于 2012-08-28T03:59:51.780 回答