Две ссылки на таблицу в базе данных sqlite android - PullRequest
2 голосов
/ 04 декабря 2011

Я пытаюсь сохранить результаты матчей в базе данных. У меня есть таблица игрока, которая содержит идентификатор, имя, пароль. Еще одна таблица, в которой хранятся совпадения. Затем, наконец, таблица участников Match, которая будет иметь id, player_id (внешний ключ), match_id (внешний ключ) и score, который является целым числом. Я пытаюсь создать таблицу Match, чтобы она могла ссылаться на двух участников матча, но я не уверен, как это сделать.

Код, который я сделал для создания таблиц

 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 Ответ

1 голос
/ 04 декабря 2011
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)"
                + ");";

Нет проблем с наличием двух ссылок на одну и ту же таблицу.Когда вы делаете запрос для выбора или вставки, обязательно сохраните правильные идентификаторы в своей таблице, и это сработает.

Некоторые примечания:

  • Нет необходимости вmatch_id в таблице участников.Это только дублирует идентификатор участника из таблицы совпадений.Никогда не бывает хорошо иметь дублирующую информацию в таблице SQL, они могут потерять синхронизацию, и ограничения могут стать адом (при удалении).ИЛИ, если вы хотите сохранить этот match_id, тогда два участника_id в таблице соответствий не нужны.

  • Вы должны назвать все свои первичные идентификаторы _id, это обычная хорошая практика сSQLite (И я думаю, что в некоторых случаях Android / SQLite аварийно завершает работу, когда не находит их)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...