@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) Integer getWinner() } class Team { *team_id: Integer name: String tournament_ids: Integer[] player_ids: Integer[] match_ids: Integer[] Team constructor(name: String) void joinTournament(tournament_id: Integer) void addPlayer(player_id: Integer) void addMatch(match_id: Integer) void removePlayer(player_id: Integer) void removeMatch(match_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 team_ids: Integer[] Tournament constructor(name: String, start_date: Date, end_date: Date) void addTeam(team_id: Integer) void removeTeam(team_id: Integer) } Tournament "1" --> "2..*" Team : contains Tournament "1" --> "*" Match : contains Player "1..*" --> "1" Team : belongsTo Match "*" ---> "2" Team : contains @enduml