RelationalDesign: ddl-v2.sql

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