Archived
64 lines
2.0 KiB
SQL
64 lines
2.0 KiB
SQL
-- Create Group table
|
|
CREATE TABLE UserGroup (
|
|
id UUID PRIMARY KEY DEFAULT uuid(),
|
|
group_name VARCHAR UNIQUE NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create User Table
|
|
CREATE TABLE User (
|
|
id UUID PRIMARY KEY DEFAULT uuid(),
|
|
name VARCHAR,
|
|
username VARCHAR UNIQUE NOT NULL,
|
|
email VARCHAR UNIQUE,
|
|
group_id UUID,
|
|
hashed_password VARCHAR NOT NULL,
|
|
is_active BOOLEAN DEFAULT true,
|
|
is_admin BOOLEAN DEFAULT false,
|
|
last_login TIMESTAMP,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
modified_at timestamp DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (group_id) REFERENCES UserGroup(id)
|
|
);
|
|
|
|
-- Create Contest Table
|
|
CREATE TABLE Contest (
|
|
id UUID PRIMARY KEY DEFAULT uuid(),
|
|
city_name VARCHAR NOT NULL,
|
|
date DATE NOT NULL,
|
|
round VARCHAR NOT NULL,
|
|
is_active BOOLEAN DEFAULT false,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
-- Create Song Table with ARRAY type for tags
|
|
CREATE TABLE Song (
|
|
id UUID PRIMARY KEY DEFAULT uuid(),
|
|
contest_id UUID NOT NULL,
|
|
artist_name VARCHAR NOT NULL,
|
|
song_title VARCHAR NOT NULL,
|
|
country VARCHAR NOT NULL,
|
|
lyrics TEXT,
|
|
song_meaning TEXT,
|
|
tags VARCHAR[],
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (contest_id) REFERENCES Contest(id)
|
|
);
|
|
|
|
-- Create Reviews Table with Score Constraints
|
|
CREATE TABLE Reviews (
|
|
id UUID PRIMARY KEY DEFAULT uuid(),
|
|
song_id UUID NOT NULL,
|
|
reviewer_id UUID NOT NULL,
|
|
song_score INTEGER CHECK (song_score BETWEEN 1 AND 100),
|
|
wardrobe_score INTEGER CHECK (wardrobe_score BETWEEN 1 AND 100),
|
|
stage_show_score INTEGER CHECK (stage_show_score BETWEEN 1 AND 100),
|
|
review_text TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (song_id) REFERENCES Song(id),
|
|
FOREIGN KEY (reviewer_id) REFERENCES User(id)
|
|
); |