Strava-style fitness tracking database schema

How a fitness tracking app models its data: activities with compressed sensor streams instead of one row per second, segments and segment efforts with materialised leaderboards, personal records, kudos and comments, clubs, gear mileage and training load.

Strava Fitness ER diagram

Strava-style fitness tracking database schema n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 n1 athletes idBIGINT usernameVARCHAR display_nameVARCHAR emailVARCHAR country_codeCHAR weight_gramsINTEGER ftp_wattsSMALLINT resting_heart_rateSMALLINT measurement_prefe…VARCHAR default_activity_…VARCHAR created_atTIMESTAMPTZ gear idBIGINT athlete_idBIGINT gear_typeVARCHAR nameVARCHAR brandVARCHAR distance_metresBIGINT purchased_onDATE retired_atTIMESTAMPTZ is_defaultBOOLEAN activities idBIGINT athlete_idBIGINT gear_idBIGINT sport_typeVARCHAR titleVARCHAR descriptionTEXT started_atTIMESTAMPTZ local_timezoneVARCHAR elapsed_secondsINTEGER moving_secondsINTEGER distance_metresINTEGER elevation_gain_me…INTEGER average_wattsSMALLINT average_heart_rateSMALLINT caloriesINTEGER visibilityVARCHAR device_nameVARCHAR is_manualBOOLEAN is_flaggedBOOLEAN uploaded_atTIMESTAMPTZ activity_streams idBIGINT activity_idBIGINT stream_typeVARCHAR sample_countINTEGER sample_interval_s…SMALLINT encodingVARCHAR scale_factorINTEGER dataBYTEA compressed_bytesINTEGER segments idBIGINT created_by_athlet…BIGINT nameVARCHAR sport_typeVARCHAR distance_metresINTEGER average_grade_per…DECIMAL elevation_gain_me…INTEGER start_latitudeDECIMAL start_longitudeDECIMAL end_latitudeDECIMAL end_longitudeDECIMAL polylineTEXT cityVARCHAR is_hazardousBOOLEAN is_privateBOOLEAN effort_countINTEGER created_atTIMESTAMPTZ segment_efforts idBIGINT segment_idBIGINT activity_idBIGINT athlete_idBIGINT started_atTIMESTAMPTZ elapsed_secondsINTEGER moving_secondsINTEGER average_wattsSMALLINT average_heart_rateSMALLINT is_personal_bestBOOLEAN segment_leaderboard… segment_idBIGINT athlete_idBIGINT best_effort_idBIGINT elapsed_secondsINTEGER achieved_atTIMESTAMPTZ effort_countINTEGER updated_atTIMESTAMPTZ personal_records idBIGINT athlete_idBIGINT sport_typeVARCHAR record_typeVARCHAR activity_idBIGINT value_numericDECIMAL value_unitVARCHAR achieved_onDATE is_currentBOOLEAN kudos activity_idBIGINT athlete_idBIGINT created_atTIMESTAMPTZ comments idBIGINT activity_idBIGINT athlete_idBIGINT bodyVARCHAR created_atTIMESTAMPTZ edited_atTIMESTAMPTZ is_deletedBOOLEAN clubs idBIGINT nameVARCHAR slugVARCHAR sport_typeVARCHAR cityVARCHAR is_privateBOOLEAN member_countINTEGER created_atTIMESTAMPTZ club_memberships club_idBIGINT athlete_idBIGINT roleVARCHAR statusVARCHAR joined_atTIMESTAMPTZ training_load_days athlete_idBIGINT load_dateDATE training_loadSMALLINT fitnessDECIMAL fatigueDECIMAL formDECIMAL activity_countSMALLINT

Related database schemas