-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_table.sql
More file actions
92 lines (79 loc) · 2.8 KB
/
create_table.sql
File metadata and controls
92 lines (79 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
-- Drop All tables and sequences if they exist
DROP TABLE IF EXISTS sets;
DROP TABLE IF EXISTS workouts;
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS reviews;
DROP SEQUENCE if EXISTS workouts_id_seq;
DROP SEQUENCE if EXISTS sets_id_seq;
DROP TABLE IF EXISTS reviews_id_seq;
-- Create table Schema, without Foriegn keys to avoid conflict
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(255),
password VARCHAR(255),
pfp VARCHAR(255),
isAdmin BOOLEAN
);
CREATE TABLE workouts (
id SERIAL PRIMARY KEY,
workout_date DATE,
location VARCHAR(255),
notes TEXT,
time_start TIME,
time_stop TIME CHECK (time_stop>=time_start),
user_id INTEGER NOT NULL
);
CREATE TABLE sets (
id SERIAL PRIMARY KEY,
exercise_name TEXT CHECK (char_length(exercise_name) <= 100),
--- exercise_name TEXT NOT NULL CHECK (char_length(exercise_name) <= 100),
weight NUMERIC CHECK (weight >= 0),
reps INTEGER CHECK (reps >= 0),
sets INTEGER CHECK (sets >= 0),
myo_rep_id INTEGER,
failure BOOLEAN,
notes TEXT,
video_link TEXT,
exercise_time TIME,
workout_id INTEGER NOT NULL,
exercise_type TEXT CHECK (char_length(exercise_type) <= 50)
--- exercise_type TEXT NOT NULL CHECK (char_length(exercise_type) <= 50),
);
CREATE TABLE reviews (
id SERIAL PRIMARY KEY,
title TEXT CHECK (char_length(title) <= 50),
comment TEXT CHECK (char_length(comment) <= 1000),
user_id INTEGER NOT NULL,
workout_id INTEGER NOT NULL
);
-- Copy Data from CSVs
COPY workouts (id, workout_date, location, notes, time_start, time_stop, user_id)
FROM '/data/workouts.csv'
DELIMITER ','
CSV HEADER;
COPY users (id, name, password, pfp, isAdmin)
FROM '/data/users.csv'
DELIMITER ','
CSV HEADER;
COPY sets (id, exercise_name, weight, reps, sets, myo_rep_id, failure, notes, video_link, exercise_time, workout_id, exercise_type)
FROM '/data/sets.csv'
DELIMITER ','
CSV HEADER;
COPY reviews (id, title, comment, user_id, workout_id)
FROM '/data/reviews.csv'
DELIMITER ','
CSV HEADER;
-- Include Forgeign Keys now
ALTER TABLE workouts ADD CONSTRAINT fk_workouts_user
FOREIGN KEY (user_id) REFERENCES users(id);
ALTER TABLE sets ADD CONSTRAINT fk_sets_workout
FOREIGN KEY (workout_id) REFERENCES workouts(id);
ALTER TABLE reviews ADD CONSTRAINT fk_reviews_workout
FOREIGN KEY (workout_id) REFERENCES workouts(id);
ALTER TABLE reviews ADD CONSTRAINT fk_reviews_user
FOREIGN KEY (user_id) REFERENCES users(id);
-- This will create the sequences, match it to the current max id, and link it to the desired tables
SELECT setval('users_id_seq', (SELECT MAX(id) FROM users));
SELECT setval('workouts_id_seq', (SELECT MAX(id) FROM workouts));
SELECT setval('sets_id_seq', (SELECT MAX(id) FROM sets));
SELECT setval('reviews_id_seq', (SELECT MAX(id) FROM reviews));