RelationalDesign: ddl.sql

File ddl.sql, 4.8 KB (added by 233062, 6 days ago)
Line 
1DROP SCHEMA IF EXISTS trekr CASCADE;
2
3CREATE SCHEMA trekr;
4
5SET search_path TO trekr;
6
7-- =================================================-
8-- DROP TABLES (dependency order)
9-- =================================================-
10DROP TABLE IF EXISTS TASK_DAILY_COMPLETION;
11DROP TABLE IF EXISTS DAILY_COMPLETION;
12DROP TABLE IF EXISTS TASKS;
13DROP TABLE IF EXISTS CUSTOM_TRACKING_CATEGORIES;
14DROP TABLE IF EXISTS ASSETS;
15DROP TABLE IF EXISTS INVESTOR_USERS;
16DROP TABLE IF EXISTS DAILY_INTAKES;
17DROP TABLE IF EXISTS WEIGHT_USERS;
18DROP TABLE IF EXISTS TRAINING_SESSIONS;
19DROP TABLE IF EXISTS TRAINING_USERS;
20DROP TABLE IF EXISTS INCOMES;
21DROP TABLE IF EXISTS FINANCE_USERS;
22DROP TABLE IF EXISTS DISCIPLINE_USERS;
23DROP TABLE IF EXISTS USERS;
24
25-- ==================================================
26-- USERS
27-- ==================================================
28
29CREATE TABLE USERS (
30 user_id BIGINT PRIMARY KEY,
31 email TEXT NOT NULL,
32 username TEXT NOT NULL,
33 password TEXT NOT NULL
34);
35
36-- ==================================================
37-- FINANCE
38-- ==================================================
39
40CREATE TABLE FINANCE_USERS (
41 user_id BIGINT PRIMARY KEY
42 REFERENCES USERS(user_id) ON DELETE CASCADE,
43 spending_budget NUMERIC,
44 saving_budget NUMERIC,
45 investing_budget NUMERIC,
46 donation_budget NUMERIC,
47 credit NUMERIC
48);
49
50CREATE TABLE INCOMES (
51 income_id BIGINT PRIMARY KEY,
52 user_id BIGINT
53 REFERENCES FINANCE_USERS(user_id) ON DELETE CASCADE,
54 date DATE NOT NULL,
55 amount NUMERIC NOT NULL
56);
57
58-- ==================================================
59-- TRAINING
60-- ==================================================
61
62CREATE TABLE TRAINING_USERS (
63 user_id BIGINT PRIMARY KEY
64 REFERENCES USERS(user_id) ON DELETE CASCADE,
65 gender TEXT,
66 age INTEGER,
67 weight NUMERIC
68);
69
70CREATE TABLE TRAINING_SESSIONS (
71 training_id BIGINT PRIMARY KEY,
72 training_user_id BIGINT
73 REFERENCES TRAINING_USERS(user_id) ON DELETE CASCADE,
74 weight_user_id BIGINT
75 REFERENCES WEIGHT_USERS(user_id) ON DELETE CASCADE,
76 duration NUMERIC,
77 calories NUMERIC,
78 date DATE,
79 type TEXT
80);
81
82-- ==================================================
83-- WEIGHT & CALORIES
84-- ==================================================
85
86CREATE TABLE WEIGHT_USERS (
87 user_id BIGINT PRIMARY KEY
88 REFERENCES USERS(user_id) ON DELETE CASCADE,
89 weight NUMERIC,
90 height NUMERIC,
91 goal_weight NUMERIC,
92 goal_calories NUMERIC
93);
94
95CREATE TABLE DAILY_INTAKES (
96 daily_intake_id BIGINT PRIMARY KEY,
97 user_id BIGINT
98 REFERENCES WEIGHT_USERS(user_id) ON DELETE CASCADE,
99 calories NUMERIC,
100 date DATE
101);
102
103-- ==================================================
104-- DISCIPLINE & CUSTOM TRACKING
105-- ==================================================
106
107CREATE TABLE DISCIPLINE_USERS (
108 user_id BIGINT PRIMARY KEY
109 REFERENCES USERS(user_id) ON DELETE CASCADE,
110 num_tasks INTEGER,
111 tasks TEXT
112);
113
114CREATE TABLE CUSTOM_TRACKING_CATEGORIES (
115 custom_tracking_id BIGINT PRIMARY KEY,
116 user_id BIGINT
117 REFERENCES USERS(user_id) ON DELETE CASCADE,
118 name TEXT NOT NULL,
119 num_tasks INTEGER,
120 tasks TEXT
121);
122
123-- ==================================================
124-- TASKS & COMPLETION
125-- ==================================================
126
127CREATE TABLE TASKS (
128 task_id BIGINT PRIMARY KEY,
129 name TEXT NOT NULL,
130
131 discipline_user_id BIGINT
132 REFERENCES DISCIPLINE_USERS(user_id) ON DELETE CASCADE,
133
134 custom_tracking_id BIGINT
135 REFERENCES CUSTOM_TRACKING_CATEGORIES(custom_tracking_id)
136 ON DELETE CASCADE,
137
138 CONSTRAINT task_belongs_to_exactly_one_category
139 CHECK (
140 (discipline_user_id IS NOT NULL AND custom_tracking_id IS NULL)
141 OR
142 (discipline_user_id IS NULL AND custom_tracking_id IS NOT NULL)
143 )
144);
145
146CREATE TABLE DAILY_COMPLETION (
147 daily_completion_id BIGINT PRIMARY KEY,
148 user_id BIGINT
149 REFERENCES USERS(user_id) ON DELETE CASCADE,
150 date DATE,
151 procent NUMERIC
152);
153
154CREATE TABLE TASK_DAILY_COMPLETION (
155 task_id BIGINT
156 REFERENCES TASKS(task_id) ON DELETE CASCADE,
157 daily_completion_id BIGINT
158 REFERENCES DAILY_COMPLETION(daily_completion_id) ON DELETE CASCADE,
159
160 CONSTRAINT task_daily_completion_pk
161 PRIMARY KEY (task_id, daily_completion_id)
162);
163
164-- ==================================================
165-- INVESTING
166-- ==================================================
167
168CREATE TABLE INVESTOR_USERS (
169 user_id BIGINT PRIMARY KEY
170 REFERENCES USERS(user_id) ON DELETE CASCADE
171);
172
173CREATE TABLE ASSETS (
174 asset_id BIGINT PRIMARY KEY,
175 user_id BIGINT
176 REFERENCES INVESTOR_USERS(user_id) ON DELETE CASCADE,
177 ticker_symbol TEXT NOT NULL,
178 buy_price NUMERIC,
179 buy_date DATE,
180 quantity NUMERIC
181);