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

ただし、 のList<Match>場合、getTeamName(TeamId)データベースにアクセスして、各 TeamID の TeamName を取得します。

1 ページあたり 10 件の一致のページの場合、(10x2Teams)=20データベースへのトリップになる可能性があります。

これを回避するために、すべてを一度ロードしてメモリに保存し、メモリ内の TeamName のみを検索するという考えがありました。これにより、レコードが 5000 件以上になるとどうなるかを再考するようになりました。

これに対するより良いアプローチはありますか?ありがとう。

4

2 に答える 2

0

私はこれまでの答えに同意します。マットの答えを拡張するつもりでした。オブジェクトにすべてのデータが必要な場合は、データベースへの1回のトリップで複数のSQLステートメントを発行する方が効率的です。これにより、1回のデータベースヒットで複数のテーブルが返されます。

于 2012-08-28T03:59:51.780 に答える
0

ページごとにキャッシングを実行します。現在の 10 試合のリストに存在する ID のリストをまとめてから、それらの ID のいずれかを持つすべてのチームを読み込みます。

どのようにデータにアクセスしているのかはわかりませんが、SQL を使用している場合は、IN が役に立ちます。

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

または、最初に join ステートメントを使用してチームに試合をロードし、次に試合データを入力するのと同時にチーム データを入力することもできます。

于 2012-08-27T23:39:02.333 に答える