@startuml Tournament System
' Internal development class diagram
' Describes database fields and object methods required

class Match {
    *match_id: Integer
    tournament_id: Integer
    team_ids: Integer[]
    scores: Integer[]
    winner_id: Integer

    Match constructor(tournament_id: Integer, team_ids: Integer[])
    void setScore(team_id: Integer, score: Integer)
    void setWinner(winner_id: Integer)
}
class Team {
    *team_id: Integer
    name: String
    tournament_ids: Integer[]

    Team constructor(name: String)
    void joinTournament(tournament_id: Integer)
    void addPlayer(player_id: Integer)
    void removePlayer(player_id: Integer)
    void leaveTournament(tournament_id: Integer)
}
class Player {
    *player_id: Integer
    name: String
    team_id: Integer


    Player constructor(name: String)
    void joinTeam(team_id: Integer)
    void leaveTeam()
}

class Tournament {
    *tournament_id: Integer
    name: String
    start_date: Date
    end_date: Date
    manager_ids: Integer[]
    team_ids: Integer[]

    Tournament constructor(name: String, start_date: Date, end_date: Date)
    void addTeam(team_id: Integer)
    void removeTeam(team_id: Integer)
}


Team "2..*" -- "1..*" Tournament : "Plays in"
Tournament "1" -- "1..*" Match : contains
Player "1..*" -- "1..1" Team : "Belongs to"
Team "2..2" -- "1..*" Match : "Competes in"


@enduml