source: scripts/ddl.sql@ c7f743d

main
Last change on this file since c7f743d was c7f743d, checked in by Filip Gavrilovski <filipgavrilovski28@…>, 37 hours ago

remove extra comma in ddl

  • Property mode set to 100644
File size: 5.1 KB
Line 
1drop schema if exists project cascade;
2
3create schema project;
4
5SET search_path TO project;
6
7DROP TABLE IF EXISTS ARTIST_CONTRIBUTIONS;
8DROP TABLE IF EXISTS PLAYLIST_SONGS;
9DROP TABLE IF EXISTS SAVED_PLAYLISTS;
10DROP TABLE IF EXISTS REVIEWS;
11DROP TABLE IF EXISTS LISTENS;
12DROP TABLE IF EXISTS LIKES;
13DROP TABLE IF EXISTS PERFORMS_AT;
14DROP TABLE IF EXISTS FOLLOWS;
15DROP TABLE IF EXISTS PLAYLISTS;
16DROP TABLE IF EXISTS EVENTS;
17DROP TABLE IF EXISTS SONGS;
18DROP TABLE IF EXISTS ALBUMS;
19DROP TABLE IF EXISTS MUSICAL_ENTITIES;
20DROP TABLE IF EXISTS ARTISTS;
21DROP TABLE IF EXISTS LISTENERS;
22DROP TABLE IF EXISTS ADMINS;
23DROP TABLE IF EXISTS NON_ADMIN_USERS;
24DROP TABLE IF EXISTS USERS;
25
26
27CREATE TABLE USERS (
28 user_id BIGINT PRIMARY KEY,
29 full_name TEXT NOT NULL,
30 email TEXT NOT NULL,
31 password_hash TEXT NOT NULL,
32 username TEXT NOT NULL,
33 profile_photo TEXT
34);
35
36CREATE TABLE NON_ADMIN_USERS (
37 user_id BIGINT PRIMARY KEY REFERENCES USERS(user_id) ON DELETE CASCADE
38);
39
40CREATE TABLE ADMINS (
41 user_id BIGINT PRIMARY KEY REFERENCES USERS(user_id) ON DELETE CASCADE
42);
43
44CREATE TABLE LISTENERS (
45 user_id BIGINT PRIMARY KEY REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE
46);
47
48CREATE TABLE ARTISTS (
49 user_id BIGINT PRIMARY KEY REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE
50);
51
52CREATE TABLE MUSICAL_ENTITIES (
53 id BIGINT PRIMARY KEY,
54 title TEXT NOT NULL,
55 genre TEXT NOT NULL,
56 release_date DATE NOT NULL,
57 released_by BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE
58);
59
60
61CREATE TABLE ALBUMS (
62 id BIGINT PRIMARY KEY REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE
63);
64
65CREATE TABLE SONGS (
66 id BIGINT PRIMARY KEY REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
67 album_id BIGINT REFERENCES ALBUMS(id) ON DELETE CASCADE,
68 link TEXT NOT NULL
69);
70
71
72CREATE TABLE EVENTS (
73 event_id BIGINT PRIMARY KEY,
74 name TEXT NOT NULL,
75 location TEXT NOT NULL,
76 venue TEXT NOT NULL,
77 date DATE NOT NULL,
78 time TIME NOT NULL,
79 creator_id BIGINT REFERENCES USERS(user_id) ON DELETE CASCADE
80);
81
82CREATE TABLE PLAYLISTS (
83 playlist_id BIGINT PRIMARY KEY,
84 cover TEXT,
85 name TEXT NOT NULL,
86 created_by BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE
87);
88
89CREATE TABLE CONTRIBUTIONS (
90 musical_entity_id BIGINT NOT NULL REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
91 artist_id BIGINT NOT NULL REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
92 contribution_order INT NOT NULL,
93
94 CONSTRAINT contributions_pk
95 PRIMARY KEY (musical_entity_id, artist_id),
96
97 CONSTRAINT contributions_order_positive
98 CHECK (contribution_order > 0)
99);
100
101CREATE TABLE ROLES (
102 role_id BIGINT PRIMARY KEY,
103 name TEXT NOT NULL,
104
105 CONSTRAINT roles_name_unique UNIQUE (name)
106);
107
108-- RELACII
109
110
111CREATE TABLE FOLLOWS (
112 follower BIGINT REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE,
113 followee BIGINT REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE,
114
115 CONSTRAINT follows_no_self_follow
116 CHECK (follower <> followee),
117
118 CONSTRAINT follows_pk
119 PRIMARY KEY (follower, followee)
120);
121
122CREATE TABLE PERFORMS_AT (
123 event_id BIGINT REFERENCES EVENTS(event_id) ON DELETE CASCADE,
124 artist_id BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
125
126 CONSTRAINT performs_at_pk
127 PRIMARY KEY (event_id, artist_id)
128);
129
130CREATE TABLE LIKES (
131 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
132 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
133
134 CONSTRAINT likes_pk
135 PRIMARY KEY (listener_id, musical_entity_id)
136);
137
138CREATE TABLE LISTENS (
139 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
140 song_id BIGINT REFERENCES SONGS(id) ON DELETE CASCADE,
141 timestamp TIMESTAMP NOT NULL,
142
143 CONSTRAINT listens_to_pk
144 PRIMARY KEY (listener_id, song_id, timestamp)
145);
146
147CREATE TABLE REVIEWS (
148 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
149 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
150 grade INT CHECK ( grade between 1 and 5) NOT NULL,
151 comment TEXT,
152
153 CONSTRAINT reviews_pk
154 PRIMARY KEY (listener_id, musical_entity_id)
155);
156
157CREATE TABLE SAVED_PLAYLISTS (
158 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
159 playlist_id BIGINT REFERENCES PLAYLISTS(playlist_id) ON DELETE CASCADE,
160
161 CONSTRAINT saved_playlists_id
162 PRIMARY KEY (listener_id, playlist_id)
163);
164
165CREATE TABLE PLAYLIST_SONGS (
166 song_id BIGINT REFERENCES SONGS(id) ON DELETE CASCADE,
167 playlist_id BIGINT REFERENCES PLAYLISTS(playlist_id) ON DELETE CASCADE,
168
169 CONSTRAINT playlist_songs_id
170 PRIMARY KEY (song_id, playlist_id)
171);
172
173CREATE TABLE CONTRIBUTION_ROLES (
174 musical_entity_id BIGINT NOT NULL,
175 artist_id BIGINT NOT NULL,
176 role_id BIGINT NOT NULL REFERENCES ROLES(role_id),
177
178 CONSTRAINT contribution_roles_pk
179 PRIMARY KEY (musical_entity_id, artist_id, role_id),
180
181 CONSTRAINT contribution_roles_contribution_fk
182 FOREIGN KEY (musical_entity_id, artist_id)
183 REFERENCES CONTRIBUTIONS(musical_entity_id, artist_id)
184 ON DELETE CASCADE
185);
Note: See TracBrowser for help on using the repository browser.