RelationalDesign: ddl-v3.sql

File ddl-v3.sql, 5.9 KB (added by 232012, 39 hours 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
60CREATE TYPE artist_release_type AS ENUM (
61 'MAIN',
62 'FEATURE'
63);
64
65-- USERS
66CREATE TABLE USERS (
67 user_id BIGINT PRIMARY KEY,
68 email TEXT NOT NULL UNIQUE,
69 username TEXT NOT NULL UNIQUE,
70 password TEXT NOT NULL,
71 date_created DATE NOT NULL,
72 shipping_address TEXT,
73 telephone_number TEXT
74);
75
76-- ADMINS
77CREATE TABLE ADMINS (
78 user_id BIGINT PRIMARY KEY
79 REFERENCES USERS(user_id) ON DELETE CASCADE,
80 type admin_type NOT NULL,
81 discount_percentage NUMERIC NOT NULL
82);
83
84-- CONSUMERS
85CREATE TABLE CONSUMERS (
86 user_id BIGINT PRIMARY KEY
87 REFERENCES USERS(user_id) ON DELETE CASCADE,
88 points_collected BIGINT NOT NULL
89);
90
91-- ARTISTS
92CREATE TABLE ARTISTS (
93 artist_id BIGINT PRIMARY KEY,
94 artist_name TEXT NOT NULL,
95 artist_description TEXT,
96 artist_photo TEXT
97);
98
99-- RELEASES
100CREATE TABLE RELEASES (
101 release_id BIGINT PRIMARY KEY,
102 title TEXT NOT NULL,
103 record_label TEXT,
104 genre TEXT NOT NULL,
105 release_date DATE NOT NULL,
106 cover_photo TEXT NOT NULL
107);
108
109-- ALBUMS
110CREATE TABLE ALBUMS (
111 release_id BIGINT PRIMARY KEY
112 REFERENCES RELEASES(release_id) ON DELETE CASCADE
113);
114
115-- SINGLE RELEASES
116CREATE TABLE SINGLE_RELEASES (
117 release_id BIGINT PRIMARY KEY
118 REFERENCES RELEASES(release_id) ON DELETE CASCADE,
119 duration TEXT NOT NULL
120);
121
122-- SONGS
123CREATE TABLE SONGS (
124 song_id BIGINT PRIMARY KEY,
125 song_name TEXT NOT NULL,
126 song_duration TEXT NOT NULL
127);
128
129-- PRODUCTS
130CREATE TABLE PRODUCTS (
131 product_id BIGINT PRIMARY KEY,
132 release_id BIGINT NOT NULL
133 REFERENCES RELEASES(release_id) ON DELETE CASCADE,
134 format product_format NOT NULL,
135 price NUMERIC NOT NULL,
136 product_description TEXT NOT NULL,
137 stock BIGINT NOT NULL
138);
139
140-- ORDERS
141CREATE TABLE ORDERS (
142 order_id BIGINT PRIMARY KEY,
143 user_id BIGINT NOT NULL
144 REFERENCES USERS(user_id) ON DELETE CASCADE,
145 payment_method payment_method_type NOT NULL,
146 purchase_date DATE NOT NULL,
147 points_earned BIGINT NOT NULL,
148 points_used BIGINT,
149 status order_status_type NOT NULL
150);
151
152-- MODIFICATIONS
153CREATE TABLE MODIFICATIONS (
154 modification_id BIGINT PRIMARY KEY,
155 admin_id BIGINT NOT NULL
156 REFERENCES ADMINS(user_id) ON DELETE CASCADE,
157 date_modified DATE NOT NULL,
158 type_of_modification modification_type NOT NULL,
159 discount NUMERIC
160);
161
162-- WISHLISTS
163CREATE TABLE WISHLISTS (
164 wishlist_id BIGINT PRIMARY KEY,
165 user_id BIGINT UNIQUE NOT NULL
166 REFERENCES USERS(user_id) ON DELETE CASCADE
167);
168
169
170-- ORDER ITEMS
171CREATE TABLE ORDER_ITEMS (
172 order_id BIGINT NOT NULL
173 REFERENCES ORDERS(order_id) ON DELETE CASCADE,
174 product_id BIGINT NOT NULL
175 REFERENCES PRODUCTS(product_id) ON DELETE CASCADE,
176 price_at_purchase NUMERIC NOT NULL,
177 quantity BIGINT NOT NULL,
178
179 CONSTRAINT order_items_pk
180 PRIMARY KEY (order_id, product_id)
181);
182
183-- WISHLIST ITEMS
184CREATE TABLE WISHLIST_ITEMS (
185 wishlist_id BIGINT NOT NULL
186 REFERENCES WISHLISTS(wishlist_id) ON DELETE CASCADE,
187 product_id BIGINT NOT NULL
188 REFERENCES PRODUCTS(product_id) ON DELETE CASCADE,
189 added_at DATE NOT NULL,
190
191 CONSTRAINT wishlist_items_pk
192 PRIMARY KEY (wishlist_id, product_id)
193);
194
195-- ALBUM SONGS
196CREATE TABLE ALBUM_SONGS (
197 album_id BIGINT NOT NULL
198 REFERENCES ALBUMS(release_id) ON DELETE CASCADE,
199 song_id BIGINT NOT NULL
200 REFERENCES SONGS(song_id) ON DELETE CASCADE,
201
202 CONSTRAINT album_songs_pk
203 PRIMARY KEY (album_id, song_id)
204);
205
206-- RELEASE ARTISTS
207CREATE TABLE RELEASE_ARTISTS (
208 release_id BIGINT
209 REFERENCES RELEASES(release_id) ON DELETE CASCADE,
210 artist_id BIGINT
211 REFERENCES ARTISTS(artist_id) ON DELETE CASCADE,
212 release_ordinal BIGINT NOT NULL,
213 type artist_release_type NOT NULL,
214
215 CONSTRAINT release_artists_pk
216 PRIMARY KEY (release_id, artist_id)
217);
218
219-- SONG ARTISTS
220CREATE TABLE SONG_ARTISTS (
221 song_id BIGINT
222 REFERENCES SONGS(song_id) ON DELETE CASCADE,
223 artist_id BIGINT
224 REFERENCES ARTISTS(artist_id) ON DELETE CASCADE,
225 song_feature_ordinal BIGINT NOT NULL,
226
227 CONSTRAINT song_artists_pk
228 PRIMARY KEY (song_id, artist_id)
229);
230
231-- MODIFICATION PRODUCTS
232CREATE TABLE MODIFICATION_PRODUCTS (
233 modification_id BIGINT NOT NULL
234 REFERENCES MODIFICATIONS(modification_id) ON DELETE CASCADE,
235 product_id BIGINT NOT NULL
236 REFERENCES PRODUCTS(product_id) ON DELETE CASCADE,
237
238 CONSTRAINT modification_products_pk
239 PRIMARY KEY (modification_id, product_id)
240);