source: scripts/ddl.sql@ 765e166

main
Last change on this file since 765e166 was c807e22, checked in by Filip Gavrilovski <filipgavrilovski28@…>, 5 months ago

add ddl and dml scripts; update example env-s

  • Property mode set to 100644
File size: 4.4 KB
RevLine 
[c807e22]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 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
89-- RELACII
90
91
92CREATE TABLE FOLLOWS (
93 follower BIGINT REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE,
94 followee BIGINT REFERENCES NON_ADMIN_USERS(user_id) ON DELETE CASCADE,
95
96 CONSTRAINT follows_no_self_follow
97 CHECK (follower <> followee),
98
99 CONSTRAINT follows_pk
100 PRIMARY KEY (follower, followee)
101);
102
103CREATE TABLE PERFORMS_AT (
104 event_id BIGINT REFERENCES EVENTS(event_id) ON DELETE CASCADE,
105 artist_id BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
106
107 CONSTRAINT performs_at_pk
108 PRIMARY KEY (event_id, artist_id)
109);
110
111CREATE TABLE LIKES (
112 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
113 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
114
115 CONSTRAINT likes_pk
116 PRIMARY KEY (listener_id, musical_entity_id)
117);
118
119CREATE TABLE LISTENS (
120 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
121 song_id BIGINT REFERENCES SONGS(id) ON DELETE CASCADE,
122 timestamp TIMESTAMP NOT NULL,
123
124 CONSTRAINT listens_to_pk
125 PRIMARY KEY (listener_id, song_id, timestamp)
126);
127
128CREATE TABLE REVIEWS (
129 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
130 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
131 grade INT CHECK ( grade between 1 and 5) NOT NULL,
132 comment TEXT,
133
134 CONSTRAINT reviews_pk
135 PRIMARY KEY (listener_id, musical_entity_id)
136);
137
138CREATE TABLE SAVED_PLAYLISTS (
139 listener_id BIGINT REFERENCES LISTENERS(user_id) ON DELETE CASCADE,
140 playlist_id BIGINT REFERENCES PLAYLISTS(playlist_id) ON DELETE CASCADE,
141
142 CONSTRAINT saved_playlists_id
143 PRIMARY KEY (listener_id, playlist_id)
144);
145
146CREATE TABLE PLAYLIST_SONGS (
147 song_id BIGINT REFERENCES SONGS(id) ON DELETE CASCADE,
148 playlist_id BIGINT REFERENCES PLAYLISTS(playlist_id) ON DELETE CASCADE,
149
150 CONSTRAINT playlist_songs_id
151 PRIMARY KEY (song_id, playlist_id)
152);
153
154CREATE TABLE ARTIST_CONTRIBUTIONS (
155 artist_id BIGINT REFERENCES ARTISTS(user_id) ON DELETE CASCADE,
156 musical_entity_id BIGINT REFERENCES MUSICAL_ENTITIES(id) ON DELETE CASCADE,
157 role TEXT NOT NULL,
158
159 CONSTRAINT artist_contribution_id
160 PRIMARY KEY (artist_id, musical_entity_id)
161);
Note: See TracBrowser for help on using the repository browser.