Я совершенно новый начинающий в программировании.
Я только что сделал систему для личного пользования.
Есть возможность добавить результаты спортивных матчей двух игроков.
Пока все отлично работает.
Сейчас я думаю добавить систему рейтинга ELO.
Я не могу понять, как я должен проектировать свою базу данных.
Проблема в том, что я не могу понять, как правильно вести учет расчета рейтинга в случае, если какой-либо результат игры будет удален в любой момент. Например, кто-то добавит неверные данные, а запись в игре должна быть удалена.
Итак, как сделать дизайн базы данных, чтобы, если я удалю какую-либо игру из середины записей, рейтинг был пересчитан правильно?
Наглядный пример моей проблемы я не могу решить (расчет рейтинга просто информативен):
Player1 (rating 1200), Player2 (1200)
Game1 played, player1 wins.
Rating after game: P1:1231, P2:1169
Game2 played, Player1 wins.
Rating: P1:1259, P2:1141
Game3, Player2 wins
Rating: P1:1220, P2:1180
Итак, я понимаю, что в игре 2 есть ложные данные, и я хочу их удалить.
Что должно произойти?
Удаляю game2, тогда скрипт должен изменить рейтинг как
Получите рейтинг обоих игроков от одной игры до, от после игры1. что будет P1: 1231, P2: 1169
А затем пересчитать весь рейтинг после удаленной игры.
Так Game3, игрок выигрывает, рейтинг должен быть P1: 1198, P2: 1202
Я не могу просто удалить game2 и его различия в рейтинге … рейтинг должен быть пересчитан из предыдущей игры и для всех после сыгранных игр.
Сложнее становится, если есть 3 или более игроков, и они играли в игры после того, который я хочу удалить.
Из-за их рейтинги изменились. А если игра удалена, то все изменения рейтинга игр, в которые играли после, должны были быть пересчитаны одна за другой.
Я надеюсь, что моя проблема ясна …
Итак, вопрос в том, не могли бы вы дать мне полный старт php / .mysql, намеки на то, какой должна быть логика базы данных и процесс расчета рейтингов для моей ситуации.
Заранее спасибо.
В основном будет две таблицы: players(name,whatever else,rating)
а также games(player_id_white,player_id_black,result=1,0,-1,date)
,
После того, как игра была удалена, сбросьте рейтинги всех игроков до первоначального значения и пересчитайте их с нуля. Просто прочитайте таблицу игр, отсортированную по дате, обновите рейтинги в памяти и, наконец, запишите их обратно в таблицу игроков.
Это простое и грубое решение, но оно должно работать для вас, если (пока) у вас нет тысяч игроков и миллионов игр.
Других решений пока нет …