CREATE TABLE [User] (
	ID INT IDENTITY(0, 1) NOT NULL,
	Email VARCHAR(254) NOT NULL,
	Username VARCHAR(32) NOT NULL,
	[Password] CHAR(256) NOT NULL
	PRIMARY KEY(ID)
)

CREATE TABLE [Platform] (
	ID INT IDENTITY(0, 1) NOT NULL,
	PlatformName VARCHAR(32) NOT NULL
	PRIMARY KEY(ID)
)

CREATE TABLE [Game] (
	ID INT IDENTITY(0, 1) NOT NULL,
	Name VARCHAR(32) NOT NULL,
	Thumbnail VARCHAR(256) NULL
	PRIMARY KEY(ID)
)

CREATE TABLE [Achievement] (
	ID INT IDENTITY(0, 1) NOT NULL,
	GameID INT NOT NULL,
	Name VARCHAR(128) NOT NULL,
	Description VARCHAR(512) NULL,
	Stages INT NOT NULL,
	Thumbnail VARCHAR(256) NULL
	PRIMARY KEY(ID)
	FOREIGN KEY(GameID) REFERENCES [Game](ID)
)

CREATE TABLE [Owns] (
	UserID INT NOT NULL,
	GameID INT NOT NULL,
	PlatformID INT NOT NULL
	PRIMARY KEY(UserID, GameID, PlatformID)
	FOREIGN KEY(UserID)     REFERENCES [User](ID),
	FOREIGN KEY(GameID)     REFERENCES [Game](ID),
	FOREIGN KEY(PlatformID) REFERENCES [Platform](ID)
)

CREATE TABLE [Progress] (
	UserID INT NOT NULL,
	GameID INT NOT NULL,
	AchievementID INT NOT NULL,
	Progress INT NOT NULL
	PRIMARY KEY(UserID, GameID, AchievementID)
	FOREIGN KEY(UserID)        REFERENCES [User](ID),
	FOREIGN KEY(GameID)        REFERENCES [Game](ID),
	FOREIGN KEY(AchievementID) REFERENCES [Achievement](ID)
)

CREATE TABLE [IsOn] (
	UserID INT NOT NULL,
	PlatformID INT NOT NULL
	PRIMARY KEY(UserID, PlatformID)
	FOREIGN KEY(UserID)     REFERENCES [User](ID),
	FOREIGN KEY(PlatformID) REFERENCES [Platform](ID)
)

CREATE TABLE [ExistsOn] (
	GameID INT NOT NULL,
	PlatformID INT NOT NULL
	PRIMARY KEY(GameID, PlatformID)
	FOREIGN KEY(GameID)     REFERENCES [Game](ID),
	FOREIGN KEY(PlatformID) REFERENCES [Platform](ID)
)

CREATE TABLE [Rating] (
	UserID INT NOT NULL,
	GameID INT NOT NULL,
	AchievementID INT NOT NULL,
	Quality FLOAT NULL,
	Difficulty FLOAT NULL,
	[Description] VARCHAR(1024) NULL
	PRIMARY KEY(UserID, GameID, AchievementID)
	FOREIGN KEY(UserID)        REFERENCES [User](ID),
	FOREIGN KEY(GameID)        REFERENCES [Game](ID),
	FOREIGN KEY(AchievementID) REFERENCES [Achievement](ID)
)
