RelationalDesign: ddl-v1.sql

File ddl-v1.sql, 5.6 KB (added by 231241, 9 days ago)
Line 
1DROP SCHEMA IF EXISTS project CASCADE;
2
3CREATE SCHEMA project;
4
5SET search_path TO project;
6
7DROP TABLE IF EXISTS MODIFICATION_PRODUCTS;
8DROP TABLE IF EXISTS WISHLIST_ITEMS;
9DROP TABLE IF EXISTS ORDER_ITEMS;
10DROP TABLE IF EXISTS SONG_ARTISTS;
11DROP TABLE IF EXISTS RELEASE_ARTISTS;
12DROP TABLE IF EXISTS ALBUM_SONGS;
13DROP TABLE IF EXISTS MODIFICATIONS;
14DROP TABLE IF EXISTS WISHLISTS;
15DROP TABLE IF EXISTS ORDERS;
16DROP TABLE IF EXISTS SONGS;
17DROP TABLE IF EXISTS SINGLE_RELEASES;
18DROP TABLE IF EXISTS ALBUMS;
19DROP TABLE IF EXISTS PRODUCTS;
20DROP TABLE IF EXISTS RELEASES;
21DROP TABLE IF EXISTS ARTISTS;
22DROP TABLE IF EXISTS CONSUMERS;
23DROP TABLE IF EXISTS ADMINS;
24DROP TABLE IF EXISTS USERS;
25
26CREATE TYPE admin_type AS ENUM (
27 'SUPER_ADMIN',
28 'PRODUCT_MANAGER',
29 'CONTENT_MANAGER'
30);
31
32CREATE TYPE product_format AS ENUM (
33 'VINYL',
34 'CD',
35 'CASSETTE'
36);
37
38CREATE TYPE payment_method_type AS ENUM (
39 'CARD',
40 'PAYPAL',
41 'CASH'
42);
43
44CREATE TYPE order_status_type AS ENUM (
45 'PENDING',
46 'PAID',
47 'SHIPPED',
48 'DELIVERED',
49 'CANCELLED'
50);
51
52CREATE TYPE modification_type AS ENUM (
53 'CREATE',
54 'UPDATE',
55 'DELETE',
56 'DISCOUNT'
57);
58
59-- USERS
60
61CREATE TABLE USERS (
62 user_id BIGINT PRIMARY KEY,
63 email TEXT NOT NULL UNIQUE,
64 username TEXT NOT NULL UNIQUE,
65 password TEXT NOT NULL,
66 date_created DATE NOT NULL,
67 shipping_address TEXT,
68 telephone_number TEXT
69);
70
71-- ADMINS
72
73CREATE TABLE ADMINS (
74 user_id BIGINT PRIMARY KEY
75 REFERENCES USERS(user_id) ON DELETE CASCADE,
76
77 type admin_type NOT NULL,
78 discount_percentage NUMERIC NOT NULL
79);
80
81-- CONSUMERS
82
83CREATE TABLE CONSUMERS (
84 user_id BIGINT PRIMARY KEY
85 REFERENCES USERS(user_id) ON DELETE CASCADE,
86
87 points_collected BIGINT NOT NULL
88);
89
90-- ARTISTS
91
92CREATE TABLE ARTISTS (
93 artist_id BIGINT PRIMARY KEY,
94 artist_name TEXT NOT NULL,
95 description TEXT,
96 photo TEXT
97);
98
99-- RELEASES
100
101CREATE TABLE RELEASES (
102 release_id BIGINT PRIMARY KEY,
103 title TEXT NOT NULL,
104 record_label TEXT,
105 genre TEXT NOT NULL,
106 release_date DATE NOT NULL,
107 cover_photo TEXT NOT NULL
108);
109
110-- ALBUMS
111
112CREATE TABLE ALBUMS (
113 release_id BIGINT PRIMARY KEY
114 REFERENCES RELEASES(release_id) ON DELETE CASCADE
115);
116
117-- SINGLE RELEASES
118
119CREATE TABLE SINGLE_RELEASES (
120 release_id BIGINT PRIMARY KEY
121 REFERENCES RELEASES(release_id) ON DELETE CASCADE,
122
123 duration TEXT NOT NULL
124);
125
126-- SONGS
127
128CREATE TABLE SONGS (
129 song_id BIGINT PRIMARY KEY,
130 song_name TEXT NOT NULL,
131 duration TEXT NOT NULL
132);
133
134
135-- PRODUCTS
136
137CREATE TABLE PRODUCTS (
138 product_id BIGINT PRIMARY KEY,
139 release_id BIGINT NOT NULL
140 REFERENCES RELEASES(release_id) ON DELETE CASCADE,
141
142 format product_format NOT NULL,
143 price NUMERIC NOT NULL,
144 description TEXT NOT NULL,
145 stock BIGINT NOT NULL
146);
147
148-- ORDERS
149
150CREATE TABLE ORDERS (
151 order_id BIGINT PRIMARY KEY,
152
153 user_id BIGINT NOT NULL
154 REFERENCES USERS(user_id) ON DELETE CASCADE,
155
156 payment_method payment_method_type NOT NULL,
157 purchase_date DATE NOT NULL,
158 points_earned BIGINT NOT NULL,
159 points_used BIGINT,
160 status order_status_type NOT NULL
161);
162
163-- MODIFICATIONS
164
165CREATE TABLE MODIFICATIONS (
166 modification_id BIGINT PRIMARY KEY,
167
168 admin_id BIGINT NOT NULL
169 REFERENCES ADMINS(user_id) ON DELETE CASCADE,
170
171 date_modified DATE NOT NULL,
172 type_of_modification modification_type NOT NULL,
173 discount NUMERIC
174);
175
176-- WISHLISTS
177
178CREATE TABLE WISHLISTS (
179 wishlist_id BIGINT PRIMARY KEY,
180
181 user_id BIGINT UNIQUE NOT NULL
182 REFERENCES USERS(user_id) ON DELETE CASCADE
183);
184-- RELATIONS
185-- ORDER ITEMS
186
187CREATE TABLE ORDER_ITEMS (
188 order_id BIGINT
189 REFERENCES ORDERS(order_id) ON DELETE CASCADE,
190
191 product_id BIGINT
192 REFERENCES PRODUCTS(product_id) ON DELETE CASCADE,
193
194 price_at_purchase NUMERIC NOT NULL,
195 quantity BIGINT NOT NULL,
196
197 CONSTRAINT order_items_pk
198 PRIMARY KEY (order_id, product_id)
199);
200
201-- WISHLIST ITEMS
202
203CREATE TABLE WISHLIST_ITEMS (
204 wishlist_id BIGINT
205 REFERENCES WISHLISTS(wishlist_id) ON DELETE CASCADE,
206
207 product_id BIGINT
208 REFERENCES PRODUCTS(product_id) ON DELETE CASCADE,
209
210 added_at DATE NOT NULL,
211
212 CONSTRAINT wishlist_items_pk
213 PRIMARY KEY (wishlist_id, product_id)
214);
215
216-- ALBUM SONGS
217
218CREATE TABLE ALBUM_SONGS (
219 album_id BIGINT
220 REFERENCES ALBUMS(release_id) ON DELETE CASCADE,
221
222 song_id BIGINT
223 REFERENCES SONGS(song_id) ON DELETE CASCADE,
224
225 CONSTRAINT album_songs_pk
226 PRIMARY KEY (album_id, song_id)
227);
228
229-- RELEASE ARTISTS
230
231CREATE TABLE RELEASE_ARTISTS (
232 release_id BIGINT
233 REFERENCES RELEASES(release_id) ON DELETE CASCADE,
234
235 artist_id BIGINT
236 REFERENCES ARTISTS(artist_id) ON DELETE CASCADE,
237
238 CONSTRAINT release_artists_pk
239 PRIMARY KEY (release_id, artist_id)
240);
241
242-- SONG ARTISTS
243
244CREATE TABLE SONG_ARTISTS (
245 song_id BIGINT
246 REFERENCES SONGS(song_id) ON DELETE CASCADE,
247
248 artist_id BIGINT
249 REFERENCES ARTISTS(artist_id) ON DELETE CASCADE,
250
251 CONSTRAINT song_artists_pk
252 PRIMARY KEY (song_id, artist_id)
253);
254
255-- MODIFICATION PRODUCTS
256
257CREATE TABLE MODIFICATION_PRODUCTS (
258 modification_id BIGINT
259 REFERENCES MODIFICATIONS(modification_id) ON DELETE CASCADE,
260
261 product_id BIGINT
262 REFERENCES PRODUCTS(product_id) ON DELETE CASCADE,
263
264 CONSTRAINT modification_products_pk
265 PRIMARY KEY (modification_id, product_id)
266);