RelationalDesign: ddl.2.sql

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