2011-12-03 8 views
2

データベースに一致結果を格納しようとしています。私はID、名前パスワードを含むプレーヤーテーブルを持っています。マッチを格納する別のテーブル。最後に、idplayer_id(外部キー)、match_id(外部キー)、および整数のscoreを持つMatch参加者テーブル。 Matchテーブルを作成しようとしています.2人のマッチレファレンスを参照できるようになっていますが、これを行う方法がわかりません。sqliteデータベース内のテーブルへの2つの参照アンドロイド

コード私は全く問題が同じテーブルに2つのリンクを持つにはありませんテーブル

myDB.execSQL("CREATE TABLE IF NOT EXISTS " 
        + playerTableName 
        + " (Player_id integer primary key autoincrement, " + 
      "UserName VARCHAR, Password VARCHAR, Experience INTEGER, Rating INTEGER);"); 

      myDB.execSQL("CREATE TABLE IF NOT EXISTS " 
        + matchTableName 
        + "(Match_id integer primary key autoincrement, " + 
      "? not sure here");"); 

      myDB.execSQL("CREATE TABLE IF NOT EXISTS " 
        + participantTableName 
        + "(Participant_id integer primary key autoincrement, " + 
        "player_id INTEGER, match_id Integer," + 
        "FOREIGN KEY(player_id) REFERENCES "+ playerTableName+"(Player_id)," + 
        " FOREIGN KEY(match_id) REFERENCES "+ matchTableName+"(Match_id)," + 
      " Score INTEGER);"); 

答えて

1
myDB.execSQL("CREATE TABLE IF NOT EXISTS " 
       + matchTableName 
       + "(Match_id integer primary key autoincrement, " 
       + "Participant1_id integer, "); 
       + "Participant2_id integer, "); 
       + "FOREIGN KEY(Participant1_id) REFERENCES "+ participantTableName+"(Participant_id)," 
       + "FOREIGN KEY(Participant2_id) REFERENCES "+ participantTableName+"(Participant_id)" 
       + ");"; 

を作成するために行っています。選択または挿入するためにクエリを実行するときは、正しいIDをテーブルに保存してください。これが有効になります。

いくつかの注意:

  • 参加者テーブルのmatch_idの必要はありません。これは参加者IDをマッチテーブルから複製するだけです。 SQLテーブルに重複した情報を持つことは決してうまくいかず、同期が外れてしまい、制約が崩壊する可能性があります(削除時)。または、そのmatch_idを保持したい場合は、マッチテーブルの2つのparticipant_idsは必要ありません。

  • あなたべき名前のすべてのあなたの主なIDS _id、それはSQLiteといつも良い習慣だ(そして、私はそれがそれらを見つけることができなかったとき、いくつかのケースでは、Androidの/ SQLiteのがクラッシュすると思います)

関連する問題