source: scripts/ddl.sql@ 0519e8d

main
Last change on this file since 0519e8d was e111525, checked in by Filip Gavrilovski <filipgavrilovski28@…>, 16 hours ago

remove cover from playlist table in ddl

  • Property mode set to 100644
File size: 5.0 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 name TEXT NOT NULL,
85 created_by BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE
86);
87
88CREATE TABLE CONTRIBUTIONS (
89 musical_entity_id BIGINT NOT NULL REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
90 artist_id BIGINT NOT NULL REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
91 contribution_order INT NOT NULL,
92
93 CONSTRAINT contributions_pk
94 PRIMARY KEY (musical_entity_id, artist_id),
95
96 CONSTRAINT contributions_order_positive
97 CHECK (contribution_order > 0)
98);
99
100CREATE TABLE ROLES (
101 role_id BIGINT PRIMARY KEY,
102 name TEXT NOT NULL,
103
104 CONSTRAINT roles_name_unique UNIQUE (name)
105);
106
107-- RELACII
108
109
110CREATE TABLE FOLLOWS (
111 follower BIGINT REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE,
112 followee BIGINT REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE,
113
114 CONSTRAINT follows_no_self_follow
115 CHECK (follower <> followee),
116
117 CONSTRAINT follows_pk
118 PRIMARY KEY (follower, followee)
119);
120
121CREATE TABLE PERFORMS_AT (
122 event_id BIGINT REFERENCES EVENTS(event_id) ON DELETE CASCADE,
123 artist_id BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
124
125 CONSTRAINT performs_at_pk
126 PRIMARY KEY (event_id, artist_id)
127);
128
129CREATE TABLE LIKES (
130 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
131 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
132
133 CONSTRAINT likes_pk
134 PRIMARY KEY (listener_id, musical_entity_id)
135);
136
137CREATE TABLE LISTENS (
138 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
139 song_id BIGINT REFERENCES SONGS(id) ON DELETE CASCADE,
140 timestamp TIMESTAMP NOT NULL,
141
142 CONSTRAINT listens_to_pk
143 PRIMARY KEY (listener_id, song_id, timestamp)
144);
145
146CREATE TABLE REVIEWS (
147 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
148 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
149 grade INT CHECK ( grade between 1 and 5) NOT NULL,
150 comment TEXT,
151
152 CONSTRAINT reviews_pk
153 PRIMARY KEY (listener_id, musical_entity_id)
154);
155
156CREATE TABLE SAVED_PLAYLISTS (
157 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
158 playlist_id BIGINT REFERENCES PLAYLISTS(playlist_id) ON DELETE CASCADE,
159
160 CONSTRAINT saved_playlists_id
161 PRIMARY KEY (listener_id, playlist_id)
162);
163
164CREATE TABLE PLAYLIST_SONGS (
165 song_id BIGINT REFERENCES SONGS(id) ON DELETE CASCADE,
166 playlist_id BIGINT REFERENCES PLAYLISTS(playlist_id) ON DELETE CASCADE,
167
168 CONSTRAINT playlist_songs_id
169 PRIMARY KEY (song_id, playlist_id)
170);
171
172CREATE TABLE CONTRIBUTION_ROLES (
173 musical_entity_id BIGINT NOT NULL,
174 artist_id BIGINT NOT NULL,
175 role_id BIGINT NOT NULL REFERENCES ROLES(role_id),
176
177 CONSTRAINT contribution_roles_pk
178 PRIMARY KEY (musical_entity_id, artist_id, role_id),
179
180 CONSTRAINT contribution_roles_contribution_fk
181 FOREIGN KEY (musical_entity_id, artist_id)
182 REFERENCES CONTRIBUTIONS(musical_entity_id, artist_id)
183 ON DELETE CASCADE
184);
Note: See TracBrowser for help on using the repository browser.