Logical and Physical Design – Database Creation: DDL.sql

File DDL.sql, 7.3 KB (added by 221531, 5 days ago)
Line 
11 DROP TABLE IF EXISTS delivery_assignment;
22 DROP TABLE IF EXISTS item_ingredient;
33 DROP TABLE IF EXISTS costs;
44 DROP TABLE IF EXISTS earnings;
55 DROP TABLE IF EXISTS menu;
66 DROP TABLE IF EXISTS restaurant_category;
77 DROP TABLE IF EXISTS item_category;
88 DROP TABLE IF EXISTS order_items;
99 DROP TABLE IF EXISTS orders;
1010 DROP TABLE IF EXISTS restaurant_owners;
1111 DROP TABLE IF EXISTS user_addresses;
1212 DROP TABLE IF EXISTS restaurant_owner;
1313 DROP TABLE IF EXISTS delivery_man;
1414 DROP TABLE IF EXISTS customer;
1515 DROP TABLE IF EXISTS restaurant;
1616 DROP TABLE IF EXISTS delivery_firm;
1717 DROP TABLE IF EXISTS ingredient;
1818 DROP TABLE IF EXISTS item;
1919 DROP TABLE IF EXISTS category;
2020 DROP TABLE IF EXISTS address;
2121 DROP TABLE IF EXISTS app_user;
2222 DROP TABLE IF EXISTS administrator;
2323 DROP TABLE IF EXISTS menu_item;
2424 DROP TABLE IF EXISTS shopping_cart;
2525 DROP TABLE IF EXISTS cart_items;
26
27
28
29
30CREATE TABLE APP_USER (
31 user_id SERIAL PRIMARY KEY,
32 first_name VARCHAR(100) NOT NULL,
33 last_name VARCHAR(100) NOT NULL,
34 email VARCHAR(150) UNIQUE NOT NULL,
35 password VARCHAR(255) NOT NULL,
36 phone VARCHAR(50)
37);
38
39CREATE TABLE ADMINISTRATOR (
40 user_id INT PRIMARY KEY,
41 authorized_from DATE,
42 authorized_to DATE,
43 CONSTRAINT fk_admin_user FOREIGN KEY (user_id) REFERENCES APP_USER(user_id)
44);
45
46ALTER TABLE APP_USER
47ADD COLUMN administrator_id INT,
48ADD CONSTRAINT fk_appuser_admin FOREIGN KEY (administrator_id)
49 REFERENCES ADMINISTRATOR(user_id);
50
51CREATE TABLE ADDRESS (
52 address_id SERIAL PRIMARY KEY,
53 city VARCHAR(100),
54 street VARCHAR(200),
55 postal_code VARCHAR(20)
56);
57
58CREATE TABLE CATEGORY (
59 category_id SERIAL PRIMARY KEY,
60 name VARCHAR(100),
61 description TEXT
62);
63
64CREATE TABLE ITEM (
65 item_id SERIAL PRIMARY KEY,
66 image_url VARCHAR(255),
67 name VARCHAR(100) NOT NULL,
68 price DECIMAL(10,2) NOT NULL,
69 description TEXT
70);
71
72CREATE TABLE INGREDIENT (
73 ingredient_id SERIAL PRIMARY KEY,
74 name VARCHAR(100) NOT NULL
75);
76
77CREATE TABLE DELIVERY_FIRM (
78 deliveryfirm_id SERIAL PRIMARY KEY,
79 name VARCHAR(150) NOT NULL
80);
81
82CREATE TABLE RESTAURANT (
83 restaurant_id SERIAL PRIMARY KEY,
84 address_id INT,
85 name VARCHAR(150) NOT NULL,
86 website_url VARCHAR(255),
87 opening_time TIME,
88 closing_time TIME,
89 email VARCHAR(150),
90 phone_number VARCHAR(50),
91 CONSTRAINT fk_restaurant_address FOREIGN KEY (address_id) REFERENCES ADDRESS(address_id)
92);
93
94CREATE TABLE CUSTOMER (
95 user_id INT PRIMARY KEY,
96 CONSTRAINT fk_customer_user FOREIGN KEY (user_id) REFERENCES APP_USER(user_id)
97);
98
99CREATE TABLE DELIVERY_MAN (
100 user_id INT PRIMARY KEY,
101 CONSTRAINT fk_deliveryman_user FOREIGN KEY (user_id) REFERENCES APP_USER(user_id)
102);
103
104CREATE TABLE RESTAURANT_OWNER (
105 user_id INT PRIMARY KEY,
106 CONSTRAINT fk_restowner_user FOREIGN KEY (user_id) REFERENCES APP_USER(user_id)
107);
108
109CREATE TABLE USER_ADDRESSES (
110 address_id INT,
111 user_id INT,
112 PRIMARY KEY (address_id, user_id),
113 CONSTRAINT fk_useraddr_address FOREIGN KEY (address_id) REFERENCES ADDRESS(address_id),
114 CONSTRAINT fk_useraddr_user FOREIGN KEY (user_id) REFERENCES APP_USER(user_id)
115);
116
117CREATE TABLE RESTAURANT_OWNERS (
118 user_id INT,
119 restaurant_id INT,
120 PRIMARY KEY (user_id, restaurant_id),
121 CONSTRAINT fk_restowners_user FOREIGN KEY (user_id) REFERENCES RESTAURANT_OWNER(user_id),
122 CONSTRAINT fk_restowners_rest FOREIGN KEY (restaurant_id) REFERENCES RESTAURANT(restaurant_id)
123);
124
125CREATE TABLE ORDERS (
126 order_id SERIAL PRIMARY KEY,
127 address_id INT,
128 restaurant_id INT,
129 deliveryman_id INT,
130 user_id INT,
131 order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
132 comment TEXT,
133 order_status VARCHAR(50),
134 total_amount DECIMAL(10,2),
135 CONSTRAINT fk_orders_address FOREIGN KEY (address_id) REFERENCES ADDRESS(address_id),
136 CONSTRAINT fk_orders_rest FOREIGN KEY (restaurant_id) REFERENCES RESTAURANT(restaurant_id),
137 CONSTRAINT fk_orders_delivery FOREIGN KEY (deliveryman_id) REFERENCES DELIVERY_MAN(user_id),
138 CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES CUSTOMER(user_id)
139);
140
141CREATE TABLE ORDER_ITEMS (
142 order_id INT,
143 item_id INT,
144 quantity INT NOT NULL,
145 total_price DECIMAL(10,2),
146 PRIMARY KEY (order_id, item_id),
147 CONSTRAINT fk_orderitems_order FOREIGN KEY (order_id) REFERENCES ORDERS(order_id),
148 CONSTRAINT fk_orderitems_item FOREIGN KEY (item_id) REFERENCES ITEM(item_id)
149);
150
151CREATE TABLE ITEM_CATEGORY (
152 category_id INT,
153 item_id INT,
154 PRIMARY KEY (category_id, item_id),
155 CONSTRAINT fk_itemcat_category FOREIGN KEY (category_id) REFERENCES CATEGORY(category_id),
156 CONSTRAINT fk_itemcat_item FOREIGN KEY (item_id) REFERENCES ITEM(item_id)
157);
158
159CREATE TABLE RESTAURANT_CATEGORY (
160 category_id INT,
161 restaurant_id INT,
162 PRIMARY KEY (category_id, restaurant_id),
163 CONSTRAINT fk_restcat_category FOREIGN KEY (category_id) REFERENCES CATEGORY(category_id),
164 CONSTRAINT fk_restcat_rest FOREIGN KEY (restaurant_id) REFERENCES RESTAURANT(restaurant_id)
165);
166
167CREATE TABLE MENU (
168 menu_id SERIAL PRIMARY KEY,
169 restaurant_id INT,
170 created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
171 updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
172 name VARCHAR(150),
173 CONSTRAINT fk_menu_rest FOREIGN KEY (restaurant_id) REFERENCES RESTAURANT(restaurant_id)
174);
175
176CREATE TABLE EARNINGS (
177 earning_id SERIAL PRIMARY KEY,
178 restaurant_id INT,
179 date DATE,
180 amount DECIMAL(10,2),
181 source VARCHAR(100),
182 CONSTRAINT fk_earnings_rest FOREIGN KEY (restaurant_id) REFERENCES RESTAURANT(restaurant_id)
183);
184
185CREATE TABLE COSTS (
186 cost_id SERIAL PRIMARY KEY,
187 restaurant_id INT,
188 date DATE,
189 amount DECIMAL(10,2),
190 type VARCHAR(100),
191 CONSTRAINT fk_costs_rest FOREIGN KEY (restaurant_id) REFERENCES RESTAURANT(restaurant_id)
192);
193
194CREATE TABLE ITEM_INGREDIENT (
195 item_id INT,
196 ingredient_id INT,
197 quantity VARCHAR(50),
198 PRIMARY KEY (item_id, ingredient_id),
199 CONSTRAINT fk_iteming_item FOREIGN KEY (item_id) REFERENCES ITEM(item_id),
200 CONSTRAINT fk_iteming_ing FOREIGN KEY (ingredient_id) REFERENCES INGREDIENT(ingredient_id)
201);
202
203CREATE TABLE DELIVERY_ASSIGNMENT (
204 deliveryfirm_id INT,
205 user_id INT,
206 PRIMARY KEY (deliveryfirm_id, user_id),
207 CONSTRAINT fk_deliveryassign_firm FOREIGN KEY (deliveryfirm_id) REFERENCES DELIVERY_FIRM(deliveryfirm_id),
208 CONSTRAINT fk_deliveryassign_user FOREIGN KEY (user_id) REFERENCES DELIVERY_MAN(user_id)
209);
210
211CREATE TABLE MENU_ITEM (
212 menu_id INT,
213 item_id INT,
214 PRIMARY KEY (menu_id, item_id),
215 CONSTRAINT fk_menuitem_menu FOREIGN KEY (menu_id) REFERENCES MENU(menu_id),
216 CONSTRAINT fk_menuitem_item FOREIGN KEY (item_id) REFERENCES ITEM(item_id)
217);
218
219CREATE TABLE SHOPPING_CART (
220 cart_id SERIAL PRIMARY KEY,
221 user_id INT NOT NULL,
222 CONSTRAINT fk_cart_user FOREIGN KEY (user_id) REFERENCES APP_USER(user_id)
223);
224
225CREATE TABLE CART_ITEMS (
226 cart_id INT NOT NULL,
227 item_id INT NOT NULL,
228 quantity INT NOT NULL,
229 PRIMARY KEY (cart_id, item_id),
230 CONSTRAINT fk_cartitems_cart FOREIGN KEY (cart_id) REFERENCES SHOPPING_CART(cart_id),
231 CONSTRAINT fk_cartitems_item FOREIGN KEY (item_id) REFERENCES ITEM(item_id)
232);