diff --git a/src/lib/database.sql b/src/lib/database.sql index 0fdc2de..99b4deb 100644 --- a/src/lib/database.sql +++ b/src/lib/database.sql @@ -10,6 +10,8 @@ DROP TABLE IF EXISTS Song; DROP TABLE IF EXISTS "User"; -- Quoted because USER is a reserved keyword DROP TABLE IF EXISTS Team; DROP TABLE IF EXISTS CountryCodes; +DROP VIEW IF EXISTS ReviewSummary; +DROP VIEW IF EXISTS ReviewSummaryByTeam; DROP SEQUENCE IF EXISTS group_id_seq; DROP SEQUENCE IF EXISTS user_id_seq; @@ -42,6 +44,8 @@ CREATE TABLE "Team" ( CREATE TABLE "User" ( id INTEGER PRIMARY KEY DEFAULT nextval('user_id_seq'), -- Use sequence for auto-increment username VARCHAR UNIQUE NOT NULL, -- The user's login name + first_name VARCHAR DEFAULT '', + last_name VARCHAR DEFAULT '', hashed_password VARCHAR NOT NULL, -- The securely hashed password email VARCHAR UNIQUE, -- User's email address (nullable) team_id INTEGER NOT NULL, -- Foreign Key -> Group.id @@ -115,6 +119,31 @@ CREATE TABLE CountryCodes ( name_sv VARCHAR NOT NULL ); +CREATE VIEW ReviewSummaryGlobal AS +SELECT + song_id, + COUNT(*) AS total_reviews, + AVG(score_song) AS avg_score_song, + AVG(score_show) AS avg_score_show, + AVG(score_costume) AS avg_score_costume, + AVG((score_song + score_show + score_costume)/3) AS avg_total_score +FROM Review +GROUP BY song_id; + +CREATE VIEW ReviewSummaryByTeam AS +SELECT + r.song_id, + u.team_id, + AVG(r.score_song) AS avg_score_song, + AVG(r.score_show) AS avg_score_show, + AVG(r.score_costume) AS avg_score_costume, + AVG((r.score_song + r.score_show + r.score_costume)/3) AS avg_total_score +FROM Review r +JOIN "User" u ON r.user_id = u.id +JOIN Song s ON r.song_id = s.id +GROUP BY r.song_id, u.team_id +ORDER BY r.song_id, u.team_id; + -- Insert country codes data INSERT INTO CountryCodes (code, name_en, name_fi, name_sv) VALUES ('ALB', 'Albania', 'Albania', 'Albanien'); INSERT INTO CountryCodes (code, name_en, name_fi, name_sv) VALUES ('ARM', 'Armenia', 'Armenia', 'Armenien');