Основная модель данных, игра имеет победителя и проигравшего, игрок имеет несколько игр?

Я пытаюсь настроить свою основную модель данных. Я хочу иметь игру, в которой есть один неудачник и один победитель. И мне нужен игрок, который имеет несколько игр.

У меня есть следующее:

Сущность: игрок

Атрибуты: победы, поражения, имя

Отношения: игры Направление: Игра обратная:??? победитель или неудачник???

Сущность: игра

Атрибуты: проигрышный, выигрышный,

Отношения: неудачник: Игрок, обратный: игры, победитель: Игрок, обратный: игры

Как я могу настроить это??

Спасибо!

2 ответа

Почему не просто

  • player.gamesWon<->game.winner (игра: to-one)
  • player.gamesLost<->game.loser (игра: to-one)
  • player.games<->game.players (игра:to-many)

Тогда вы можете случайно получить выигрыши / проигрыши как gamesWon.count и gamesLost.count, а не как атрибуты.

Учти это...

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

Мое предложение...


  • Сущность: Player
  • Атрибут: NSString *name
  • Отношения: playerGames один ко многим Game

  • Сущность: Game
  • Атрибут: NSString *reference (например, игра "1")
  • Атрибут: NSNumber *scorePlayer1
  • Атрибут: NSNumber *scorePlayer2
  • (Атрибут: NSDate *timeStamp) вариант?
  • Отношения: gamePlayer1 многие-к-одному Player
  • Отношения: gamePlayer2 многие-к-одному Player (где игрок 2 не может сравниться с игроком 1)

Итак, мы можем иметь...

Game *game = [[Game alloc] init...];

if (game.scorePlayer1 > game.scorePlayer2) {
    NSLog("%@ is winner and %@ is loser with score %@-%@", game.gamePlayer1.name, gamePlayer2.name, scorePlayer1, scorePlayer2);
} else if (game.scorePlayer2 > game.scorePlayer1) {
    NSLog("%@ is winner and %@ is loser with score %@-%@", game.gamePlayer2.name, gamePlayer1.name, scorePlayer2, scorePlayer1);
} else {
    NSLog("Players %@ and %@ drew with score %@-%@", game.gamePlayer1.name, gamePlayer2.name, scorePlayer1, scorePlayer2);
}

Player *player = [[Player alloc] init...];

NSFetchRequest *requestWins = [[NSFetchRequest alloc] initWithEntity:@"Game"];
NSPredicate *predicateAsPlayer1 = [NSPredicate predicateWithFormat: @"(%@ >= %@) && (game.gamePlayer1.name == %@)", game.scorePlayer1, game.scorePlayer2, player];
NSPredicate *predicateAsPlayer2 = [NSPredicate predicateWithFormat: @"(%@ >= %@) && (game.gamePlayer2.name == %@)", game.scorePlayer2, game.scorePlayer1, player];
NSPredicate *predicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicateAsPlayer1, predicateAsPlayer2]];
[requestWins setPredicate:predicate];
NSArray *arrayWins = [managedObjectContext executeFetchRequest:requestWins];

NSFetchRequest *requestLosses = [[NSFetchRequest alloc] initWithEntity:@"Game"];
...<repeat similar to above>...
NSArray *arrayLosses = [managedObjectContext executeFetchRequest:requestLosses];

NSInteger gamesPlayed = player.playerGames.count;
NSInteger gamesWon = arrayWins.count;
NSInteger gamesLost = arrayLosses.count;
NSInteger gamesDrawn = gamesPlayed - gamesWon - gamesLost;

Надеюсь это поможет.

Другие вопросы по тегам