diff --git a/sql/CreateTables.sql b/sql/CreateTables.sql index a705e57..beb45bb 100644 --- a/sql/CreateTables.sql +++ b/sql/CreateTables.sql @@ -1,3 +1,32 @@ +------ DROP ALL TABLES ------ +-- +-- Courtesy of: https://stackoverflow.com/questions/8439650/how-to-drop-all-tables-in-a-sql-server-database +-- +----------------------------- + +--DECLARE @Sql NVARCHAR(500) DECLARE @Cursor CURSOR + +--SET @Cursor = CURSOR FAST_FORWARD FOR +--SELECT DISTINCT sql = 'ALTER TABLE [' + tc2.TABLE_SCHEMA + '].[' + tc2.TABLE_NAME + '] DROP [' + rc1.CONSTRAINT_NAME + '];' +--FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1 +--LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME =rc1.CONSTRAINT_NAME + +--OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql + +--WHILE (@@FETCH_STATUS = 0) +--BEGIN +--Exec sp_executesql @Sql +--FETCH NEXT FROM @Cursor INTO @Sql +--END + +--CLOSE @Cursor DEALLOCATE @Cursor +--GO + +--EXEC sp_MSforeachtable 'DROP TABLE ?' +--GO + +----------------------------- + CREATE TABLE [User] ( ID INT IDENTITY(0, 1) NOT NULL, Email VARCHAR(254) NOT NULL, @@ -28,6 +57,8 @@ CREATE TABLE [Achievement] ( Thumbnail VARCHAR(256) NULL PRIMARY KEY(ID) FOREIGN KEY(GameID) REFERENCES [Game](ID) + ON UPDATE CASCADE + ON DELETE CASCADE ) CREATE TABLE [Owns] ( @@ -35,47 +66,69 @@ CREATE TABLE [Owns] ( 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(UserID) REFERENCES [User](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, + FOREIGN KEY(GameID) REFERENCES [Game](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, FOREIGN KEY(PlatformID) REFERENCES [Platform](ID) + ON UPDATE CASCADE + ON DELETE CASCADE ) CREATE TABLE [Progress] ( UserID INT NOT NULL, - GameID INT NOT NULL, + PlatformID 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), + PRIMARY KEY(UserID, AchievementID) + FOREIGN KEY(UserID) REFERENCES [User](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, + FOREIGN KEY(PlatformID) REFERENCES [Platform](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, FOREIGN KEY(AchievementID) REFERENCES [Achievement](ID) + ON UPDATE CASCADE + ON DELETE CASCADE ) CREATE TABLE [IsOn] ( UserID INT NOT NULL, PlatformID INT NOT NULL PRIMARY KEY(UserID, PlatformID) - FOREIGN KEY(UserID) REFERENCES [User](ID), + FOREIGN KEY(UserID) REFERENCES [User](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, FOREIGN KEY(PlatformID) REFERENCES [Platform](ID) + ON UPDATE CASCADE + ON DELETE CASCADE ) CREATE TABLE [ExistsOn] ( GameID INT NOT NULL, - PlatformID INT NOT NULL + PlatformID INT NOT NULL, + PlatformGameID INT NOT NULL PRIMARY KEY(GameID, PlatformID) - FOREIGN KEY(GameID) REFERENCES [Game](ID), + FOREIGN KEY(GameID) REFERENCES [Game](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, FOREIGN KEY(PlatformID) REFERENCES [Platform](ID) + ON UPDATE CASCADE ) 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), + PRIMARY KEY(UserID, AchievementID) + FOREIGN KEY(UserID) REFERENCES [User](ID) + ON UPDATE CASCADE + ON DELETE CASCADE, FOREIGN KEY(AchievementID) REFERENCES [Achievement](ID) + ON UPDATE CASCADE + ON DELETE CASCADE ) diff --git a/sql/CreateUserSP.sql b/sql/CreateUserSP.sql new file mode 100644 index 0000000..0af4edf Binary files /dev/null and b/sql/CreateUserSP.sql differ