2017-08-20 2 views
0

Playerテーブル(単一フィールドusername)とGame(単一フィールドdate)テーブルを含む比較的単純なデータベースがあります。 Playerが複数Gameに参加することができ、Gameが複数Playerによって再生することができるように、私は、余分なカラムscoreGamePlayerのスコアを格納するために結合されたテーブルに追加されるmany-to-many関係を使用します。データベースアーキテクチャのJavaクラス

私のJavaコードでは、フィールドusernameとフィールドdateGameを持つPlayerクラスが明らかです。しかし、私はジョイントテーブルの3番目のクラスを作成する必要があるかどうか、またはクラス内にList<Player>属性を追加し、スコアを格納するList<Integer>のリストを追加する必要があるかどうかはわかりません。

EDIT:例

Player表:

player_id player_name 
    1   Bob 
    2   Lea 
    3   John 

Game表:

game_id game_date 
1   20/08/2017 
2   19/08/2017 

Joined表:

game_id player_id score 
1   1  50 
1   2  35 
2   1  50 
2   3  29 
+1

コードは、プログラマbetweem主双方向通信です。フリー・ストーリーではない –

+0

プライマリ・キーがない場合は、 'Game'と' Player'との間にどのように 'join 'する予定ですか?ストレージ構造は、ポストストレージとしては役に立たない。 – CKing

+0

結合テーブルには、2つの外部キーが含まれます(1つは 'Player'、もう1つは' Game')。 – floflo29

答えて

0

Playerクラスにscore属性を追加しないのはなぜですか?
1人のプレイヤーはおそらく同時に2つのゲームに参加することはできません。

私がこれを言う理由は、1つのリストしか必要としないからです。あなたのアプローチでは、直接接続されていない2つのリストになります。はい、私はあなたが同じ指数でプレイヤーと彼のスコアを配置することを知っているが、これは多くの事を複雑にします。

今私が考えることができる状況はスコアボードを表示しています。他のプレイヤーでソートする必要があるスコアが最も高いプレイヤーを表示するには、2リストでどのようにしますか?

いくつかの複雑な方法では、地図や何かのような構造で最初と2番目のリストを接続する必要があります。おそらくTreeMap<Integer, List<Players>>を使用する必要があります。整数がスコアであり、 2人以上のプレイヤーが同じスコアを持つ可能性があるため、プレイヤーのリスト。

彼らはゲームを離れると、あなたは、単に私がいないだろう、スコアを取り、データベースに保存し、0に戻し

1

を設定し、あなたがこの合併症を回避し、各プレイヤーのアクセススコアは非常に簡単にプレイヤーのクラスのスコアを有することによりjoinedテーブル用に別のクラスを作成します。私は、ゲーム内の選手とそれぞれの得点を保持するために、をGameクラスに持っていきます。

ので(単純、エラーチェック)のようなもの:

class Game { 

    Map<Player, Integer> playerScores = new HashMap<>(); 

    void addPlayer(Player p) { 
     playerScores.put(p, 0); 
    } 

    void incrementScore(Player p, int increment) { 
     int newScore = getScore(p) + increment; 
     playerScores.put(p, newScore); 
    } 

    int getScore(Player p) { 
     return playerScores.get(p); 
    } 

    // etc... 

} 
+0

結合されたテーブルに2番目の余分な属性があると仮定すると、 'Map'ソリューションは正しく実装できません。 – floflo29

+0

複数の属性がある場合、すべての属性を含む単純なBeanクラスを試して、この例のIntegerではなく、そのインスタンスを使用できます。しかし、これは最善の解決策ではないかもしれません。 – Ridcully

+0

はい、私は、 'Player'属性とすべての余分な属性を持つ2番目のクラス' PlayerInGame'を持つと思います。 – floflo29

関連する問題