What are the best practices for structuring a database for a Bundesliga tip game in PHP?

When structuring a database for a Bundesliga tip game in PHP, it is important to create tables for users, teams, matches, and tips. Each user should have a unique identifier, and tips should be linked to both the user and the match. The matches table should contain information about the teams playing, the date and time of the match, and the final score. This structure will allow for efficient storage and retrieval of data for the tip game.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

CREATE TABLE teams (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

CREATE TABLE matches (
    id INT AUTO_INCREMENT PRIMARY KEY,
    team1_id INT,
    team2_id INT,
    match_date DATETIME,
    team1_score INT,
    team2_score INT
);

CREATE TABLE tips (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    match_id INT,
    tip_team1_score INT,
    tip_team2_score INT
);