63 lines
2.0 KiB
SQL
63 lines
2.0 KiB
SQL
CREATE TABLE exercise_categories (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name VARCHAR(100) NOT NULL UNIQUE,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE exercises (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
name VARCHAR(255) NOT NULL,
|
|
description TEXT,
|
|
category_id UUID NULL REFERENCES exercise_categories(id) ON DELETE RESTRICT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
|
|
);
|
|
|
|
CREATE INDEX idx_exercises_category_id ON exercises(category_id);
|
|
|
|
CREATE TABLE workouts (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
name VARCHAR(255) NULL,
|
|
notes TEXT,
|
|
workout_date TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_workouts_user_id ON workouts(user_id);
|
|
CREATE INDEX idx_workouts_workout_date ON workouts(workout_date);
|
|
|
|
CREATE TABLE workout_exercises (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
workout_id UUID NOT NULL REFERENCES workouts(id) ON DELETE CASCADE,
|
|
exercise_id UUID NOT NULL REFERENCES exercises(id) ON DELETE RESTRICT,
|
|
notes TEXT,
|
|
order_index INT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_workout_exercises_workout_id ON workout_exercises(workout_id);
|
|
CREATE INDEX idx_workout_exercises_exercise_id ON workout_exercises(exercise_id);
|
|
|
|
CREATE TABLE exercise_sets (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
workout_exercise_id UUID NOT NULL REFERENCES workout_exercises(id) ON DELETE CASCADE,
|
|
set_number INT NOT NULL,
|
|
reps INT,
|
|
weight DECIMAL(10,2),
|
|
weight_unit VARCHAR(10),
|
|
duration_seconds INTEGER,
|
|
distance DECIMAL(10,2),
|
|
distance_unit VARCHAR(10),
|
|
notes TEXT,
|
|
rate_perceived_exertion INT,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_exercise_sets_workout_exercise_id ON exercise_sets(workout_exercise_id);
|