-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathschema.sql
154 lines (140 loc) · 4.74 KB
/
schema.sql
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
-- PRIMARY USER INFORMATION TABLES
CREATE TABLE
Users (
UserID INTEGER PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
DateOfBirth DATE,
Sex VARCHAR(10)
);
-- AUTHENTICATION TABLES
CREATE TABLE
Authentication (
UserID INTEGER,
Username VARCHAR(50) UNIQUE NOT NULL,
HashedPassword TEXT NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
-- USER HEALTH TABLE
CREATE TABLE
UserHealth (
UserID INTEGER,
Height REAL NOT NULL, -- Height in cm
Weight REAL NOT NULL, -- Weight in kg
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
-- SLEEP TABLES
-- User daily sleep goal table
CREATE TABLE
SleepGoal (
SleepGoalID INTEGER PRIMARY KEY,
UserID INTEGER,
SleepGoal REAL NOT NULL, -- Sleep goal in hours
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
-- Daily sleep tracking table
CREATE TABLE
DailySleep (
SleepID INTEGER PRIMARY KEY,
UserID INTEGER,
SleepStart DATETIME NOT NULL,
SleepEnd DATETIME NOT NULL,
SleepDuration REAL NOT NULL, -- Sleep duration in hours: SleepEnd - SleepStart BE CAREFUL ABOUT THE DATE CHANGE
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
-- WATER INTAKE TABLES
CREATE TABLE
WaterIntakeGoal (
WaterIntakeGoalID INTEGER PRIMARY KEY,
UserID INTEGER,
WaterIntakeGoal REAL NOT NULL DEFAULT 3, -- Water intake goal in liters
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
CREATE TABLE
DailyWaterIntake (
WaterIntakeID INTEGER PRIMARY KEY,
UserID INTEGER,
WaterIntakeDatetime DATETIME NOT NULL,
WaterIntakeAmount REAL NOT NULL DEFAULT 0, -- Water intake amount in leters
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
-- NUTRITION TABLES
-- Insert meal had in a day table
CREATE TABLE
DailyMeals (
MealID INTEGER PRIMARY KEY,
UserID INTEGER,
MealDate DATETIME NOT NULL,
MealName VARCHAR(255) NOT NULL,
Calories REAL NOT NULL,
MealDescription TEXT,
FOREIGN KEY (UserID) REFERENCES Users (UserID)
);
---- TRAINING TABLES
-- Goals Table (Bulking, Cutting, Maintain)
CREATE TABLE
TrainingGoal (
GoalID INTEGER PRIMARY KEY,
GoalName VARCHAR(255) NOT NULL UNIQUE,
NetCaloriesGoal REAL NOT NULL -- Net calorie change in kcal/day
);
-- UserTrainingGoal Table (junction table for Users and Goals)
CREATE TABLE
UserTrainingGoal (
UserID INTEGER,
GoalID INTEGER,
FOREIGN KEY (UserID) REFERENCES Users (UserID),
FOREIGN KEY (GoalID) REFERENCES TrainingGoal (GoalID),
UNIQUE (UserID, GoalID)
);
-- ExerciseTypes Table (Cardiovascular, Strength Training, HIIT, Circuit Training)
CREATE TABLE
ExerciseTypes (
TypeExerciseID INTEGER PRIMARY KEY,
TypeExerciseName VARCHAR(255) NOT NULL UNIQUE,
TypeExerciseDescription TEXT
);
-- Workouts Table (Running, Pushups, etc.)
CREATE TABLE
WorkoutsTable (
WorkoutID INTEGER PRIMARY KEY,
WorkoutName VARCHAR(255) NOT NULL UNIQUE,
AvgCaloriesBurnedPerMinute REAL NOT NULL,
WorkoutDescription TEXT,
WorkoutVideoURL TEXT
);
-- JUNCTION TABLE FOR WORKOUTS AND EXERCISE TYPES (connects running with cardiovascular, etc.)
CREATE TABLE
WorkoutExerciseTypesJunction (
WorkoutID INTEGER,
TypeExerciseID INTEGER,
FOREIGN KEY (WorkoutID) REFERENCES WorkoutsTable (WorkoutID),
FOREIGN KEY (TypeExerciseID) REFERENCES ExerciseTypes (TypeExerciseID),
UNIQUE (WorkoutID, TypeExerciseID)
);
-- UserWorkouts Table
CREATE TABLE
UserWorkouts (
UserID INTEGER,
WorkoutID INTEGER, -- WorkoutID from WorkoutsTable (Running, Pushups, etc.)
StartTime DATETIME NOT NULL,
EndTime DATETIME NOT NULL, -- what happens if workout spans multiple days? add it to the day it started
Duration REAL NOT NULL, -- Duration in minutes (EndTime - StartTime)
CaloriesBurned REAL NOT NULL, -- AvgCaloriesBurnedPerMinute * Duration
FOREIGN KEY (UserID) REFERENCES Users (UserID),
FOREIGN KEY (WorkoutID) REFERENCES WorkoutsTable (WorkoutID),
UNIQUE (UserID, WorkoutID, StartTime)
);
CREATE TABLE
DailyActivity (
ActivityID INTEGER PRIMARY KEY,
UserID INTEGER,
Date DATE NOT NULL,
WaterIntake REAL DEFAULT 0,
TotalCaloriesBurned REAL DEFAULT 0,
TotalCaloriesConsumed REAL DEFAULT 0,
NetCalories REAL, -- TotalCaloriesConsumed - TotalCaloriesBurned - BMR
FOREIGN KEY (UserID) REFERENCES Users (UserID)
UNIQUE (UserID, Date)
);