Таблица соответствия матчей между командой и игроком - PullRequest
0 голосов
/ 24 января 2020

У меня есть 2 стола Вступление и Матч если на основе турнирной команды is_team = true если на основе игрока is_team = false , поэтому мой вопрос в том, как мне составить более эффективную таблицу соответствий, что бы вы предложили? Таким образом, я думаю, что это не эффективно на данный момент.

Примечание: причина, по которой я это делаю, может быть не командой каждого игрока, поэтому я просто не могу составить winner_team и team_a и team_b.

class Entry(models.Model): #Entries
tournament = 
player =
team =
is_team = 


class Match(models.Model):
entry_id = models.ForeignKey()
team_a = # if player based=null
team_b =
player_a = # if team based = null
player_b =
score_a =
score_b =
winner_team =   # if player based=null
winner_player = # if team based = null

1 Ответ

1 голос
/ 24 января 2020

Вам нужно нормализовать вашу базу данных больше. Если вы предполагаете, что игрок сам по себе является командой из 1, вы можете сделать следующее:

class Tournament(models.Model):
    pass

class Team(models.Model):
    pass

class Player(models.Model):
    team = models.ForeignKey(Team)

class TournamentTeam(models.Model):
    tournament = models.ForeignKey(Tournament)
    team = models.ForeignKey(Team)

class Match(models.Model):
    # breaks normalization so you can keep track of newly created
    # matches in a tournament that don't have a winner or participants yet.
    tournament = models.ForeignKey(Tournament) 
    winner = models.ForeignKey(TournamentTeam, null=True, blank=True)
    participants = models.ManyToManyField(TournamentTeam, through='MatchParticipant')


class MatchParticipant(models.Model):
    match = models.ForeignKey(Match)
    team = models.ForeignKey(TournamentTeam)
    score = models.IntegerField()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...