Bạn có mơ ước được chạy marathon? Hãy xem mô hình dữ liệu cho một ứng dụng có thể đưa bạn từ khoai tây đi ghế lười đến vận động viên chạy marathon.
Bạn cần gì để chạy marathon? Bạn sẽ cần sự nhiệt tình và quyết tâm. Một đôi giày chạy bộ tốt. Và rèn luyện thân thể rất nhiều! Giả sử bạn có một ứng dụng giúp bạn từ vận động viên mới làm quen với vận động viên marathon. Mô hình dữ liệu sẽ như thế nào?
Trong bài viết này, chúng ta sẽ xem xét mô hình dữ liệu đằng sau một ứng dụng đào tạo chạy marathon.
Ứng dụng Huấn luyện Marathon nên làm gì?
Bất kỳ ứng dụng đào tạo nào thường đi kèm với một số tùy chọn. Trong trường hợp này, chúng tôi hy vọng ứng dụng sẽ hỗ trợ đào tạo cho các loại chạy khác nhau (marathon toàn phần, marathon nửa vòng, chạy 5k) và cho các lịch trình đào tạo khác nhau (bất kỳ từ tám đến 24 tuần). Ứng dụng sẽ nắm bắt các thông tin chi tiết cơ bản của bạn, bao gồm tuổi, giới tính và trạng thái chạy hiện tại. Nó cũng sẽ cho phép bạn đặt mục tiêu và ngày bắt đầu. Ứng dụng sẽ sử dụng thông tin này để tạo kế hoạch đào tạo cho sự kiện đang chạy sắp tới của bạn. Bạn càng tiến bộ với kế hoạch của mình, bạn càng tiến gần đến mục tiêu của mình.
Hãy xem qua các yêu cầu chính của ứng dụng này. Nó phải:
- Ghi lại tên, tuổi, giới tính, v.v. của người dùng trong quá trình đăng ký.
- Hiển thị danh sách các mục tiêu (ví dụ:đi bộ, chạy, đạp xe, v.v.) với khoảng cách mục tiêu liên quan.
- Cho phép người dùng đặt mục tiêu, khoảng cách mục tiêu và ngày bắt đầu.
- Tạo một kế hoạch đào tạo cá nhân chi tiết cho người dùng cá nhân xem xét độ tuổi, giới tính và mức độ thể chất hiện tại của họ. Kế hoạch đào tạo này bao gồm:
- Các hoạt động, chẳng hạn như chạy bộ.
- Ngày bắt đầu và hoàn thành các hoạt động.
- Khoảng cách (ví dụ:chạy 5 km)
- Tốc độ đề xuất (ví dụ:5 km / h) và thời gian hoàn thành gần đúng (1 giờ).
- Những ngày nghỉ ngơi. Điều quan trọng là phải xây dựng những điều này thành một kế hoạch rèn luyện sức khỏe.
- Ngày kết thúc mục tiêu, ví dụ:khi nào người dùng sẵn sàng chạy sự kiện mà họ đã chọn.
- Nắm bắt tiến trình của các hoạt động trong kế hoạch đào tạo, bao gồm thời điểm (hoặc nếu) mỗi hoạt động được bắt đầu, mức độ hoàn thành của người dùng và thời điểm kết thúc.
- Điều chỉnh kế hoạch đào tạo nếu cần. Ví dụ, một người chạy có thể bị ốm hoặc bị thương và có thể không theo lịch trình ban đầu của họ; trong trường hợp đó, kế hoạch ban đầu sẽ cần được mở rộng hoặc sửa đổi.
- Chụp lại các danh hiệu mà người dùng đã đạt được. Trong quá trình chạy, các sự kiện này dựa trên các sự kiện đã hoàn thành thành công, ví dụ:Người chạy 5K, người chạy 10K, người chạy bán marathon hoặc người chạy marathon toàn phần. Những danh hiệu này sẽ giành được khi người chạy tiến bộ trong quá trình đào tạo của họ.
Mô hình dữ liệu
Mô hình dữ liệu hỗ trợ một ứng dụng như vậy bao gồm ba lĩnh vực chủ đề:
- Người dùng và Tiêu đề
- Mục tiêu và Hoạt động
- Mục tiêu và Chuyển đổi của Người dùng
Chúng ta sẽ thảo luận về từng lĩnh vực chủ đề theo thứ tự được liệt kê.
Chủ đề Khu vực 1:Người dùng và Chức danh
Ứng dụng này sẽ được sử dụng bởi nhiều hơn chỉ những người mới tập chạy. Các sự kiện chạy rất khắt khe và vất vả; ngay cả những người chạy marathon dày dạn kinh nghiệm cũng cần phải tập luyện cho những cuộc thi marathon sắp tới. Không ai chạy marathon trọn vẹn chỉ trong một đêm hoặc sau một khóa huấn luyện duy nhất. Nó là một quá trình dần dần.
Như chúng tôi đã đề cập trước đó, người chạy giành được nhiều danh hiệu khác nhau dựa trên các sự kiện có độ dài khác nhau. Khi người chạy tiến bộ trong quá trình đào tạo của họ, họ sẽ có thể chạy các sự kiện dài hơn và giành được nhiều danh hiệu hơn. Các bảng trong chủ đề này được xác định với ý nghĩ đó.
“registered_user
”Bảng chứa thông tin chi tiết cơ bản về người dùng. Những chi tiết này được ghi lại trong quá trình đăng ký. Điều này bao gồm hai yếu tố chính ảnh hưởng đến thiết kế kế hoạch đào tạo:tuổi (lấy từ date_of_birth
) và giới tính. Những điều này rất quan trọng vì các giới tính và nhóm tuổi khác nhau huấn luyện khác nhau, ngay cả khi họ đang thi đấu trong cùng một sự kiện. Một chàng trai 19 tuổi sẽ cần một kế hoạch tập luyện khác với một phụ nữ 45 tuổi.
“running_event
”Bảng lưu trữ danh sách tất cả các sự kiện đang chạy chính thức. Điều này có thể bao gồm các sự kiện quốc tế. Tất cả các trường đều tự giải thích.
“title
"Bảng chủ yếu lưu trữ" thông tin đăng nhập "của các vận động viên:khoảng cách họ vượt qua và thời gian diễn ra trong một sự kiện chính thức. Những điểm chính về tiêu đề và cách phân phối của chúng là:
- Mỗi sự kiện marathon có danh sách danh hiệu riêng.
- Thông thường, những danh hiệu này được trao cho những người chạy khi kết thúc một cột mốc (trên đường đua) hoặc khi họ về đích (ví dụ:vượt qua vạch đích của một cuộc chạy marathon).
- Có thể trao cùng một danh hiệu cho nhiều người chạy, miễn là tất cả họ đều đáp ứng các điều kiện của nó. Chúng bao gồm (1) khoảng cách tối thiểu được bảo hiểm và (2) thời gian tối đa để thực hiện khoảng cách này.
- Nếu các danh hiệu được xác định ở các mốc trung gian trên đường đua, thì người chạy sẽ giữ danh hiệu cao nhất duy nhất mà họ giành được.
Với sự hiểu biết này về tiêu đề, các cột trong bảng “tiêu đề” nên tự giải thích. ☺
“user_title
”Bảng lưu trữ tất cả các danh hiệu mà người dùng đã đạt được. Sự khác biệt duy nhất là ở đây chúng tôi tính thời gian của người chạy bằng giây thay vì phút.
Chủ đề Lĩnh vực 2:Mục tiêu và Hoạt động
Không ai có thể thúc đẩy bạn chạy marathon nếu bạn không muốn. Bạn phải nỗ lực hết mình. Một cách để duy trì động lực là thiết lập và đạt được mục tiêu. Hai lĩnh vực chủ đề tiếp theo liên quan đến việc thiết lập và đáp ứng các mục tiêu.
Đầu tiên, chúng ta sẽ xem xét Goals and Activities
môn học. Nó chứa ba bảng:
- “
goal
”Nắm giữ thông tin chi tiết về các mục tiêu được xác định trong ứng dụng. - “
activity
”Lưu trữ thông tin về các loại hoạt động rèn luyện khác nhau, như đi bộ, đi bộ tốc độ, chạy, bơi lội, đạp xe, v.v. - “
goal_activity
”Lưu trữ thông tin chi tiết về các hoạt động cần thiết để đạt được mục tiêu.
Điều quan trọng là phải hiểu rằng những người dùng khác nhau đạt được cùng một mục tiêu. Một lần nữa, một cô gái 15 tuổi sẽ có một kế hoạch tập luyện và các hoạt động khác với một người đàn ông 40 tuổi. Xem xét những thực tế này, chúng tôi đã đặt các cột sau trong “goal
”Bảng:
-
distance_to_run
- Quãng đường mà người chạy có thể chạy khi kết thúc mục tiêu này. -
target_time_in_min
- Thời gian tối đa cần thiết để vượt qua khoảng cách này. -
gender
- Mục tiêu này dành cho giới tính nào.
Một mục tiêu có thể được tạo cho một nhóm tuổi, chẳng hạn như 15-20 hoặc 35-40. Cách chúng tôi đào tạo sẽ thay đổi một chút khi chúng tôi già đi, vì vậy chúng tôi đã thêm hai cột nữa vào “goal
”:
-
starting_age
- Độ tuổi tối thiểu cho mục tiêu này. -
closing_age
- Độ tuổi tối đa cho mục tiêu này.
Mọi người có thể mơ lớn, nhưng cách duy nhất để thực sự thành công là tiến bộ dần dần. Ứng dụng này hạn chế cách người dùng thực hiện mục tiêu; họ phải hoàn thành các mục tiêu nhỏ hơn, có thể đạt được trước khi cố gắng cho những mục tiêu lớn hơn. Một củ khoai tây đi văng có thể mơ được chạy marathon 26,2 dặm 42,2km, nhưng trước tiên chúng nên bắt đầu hướng tới đường chạy 5K.
“goal
”Bảng xử lý các hạn chế bằng các cột sau:
-
current_run_distance_per_week
- Khoảng cách chạy tối thiểu đạt được trước khi người dùng có thể đặt mục tiêu nhất định; và -
current_min_title_id
- Người dùng phải có chức danh tối thiểu để đặt mục tiêu này.
Nếu các điều kiện tiên quyết này không được đáp ứng, mục tiêu đó sẽ không có sẵn cho người dùng. Tuy nhiên, cả hai cột này đều có giá trị rỗng; sẽ có một số mục tiêu không có yêu cầu tiên quyết về thể lực.
Hãy chuyển sang “goal_activity
" bàn. Hầu hết các cột này phục vụ một mục đích rõ ràng. Tôi sẽ chỉ nhận xét về hai, bắt đầu bằng seq_of_day
cột. Đây là cột số chứa các giá trị biểu thị ngày mà một hoạt động sẽ được thực hiện. Rõ ràng, chuỗi này bắt đầu từ 1 cho bất kỳ mục tiêu nào. Nó không bao giờ có thể là KHÔNG hoặc KHÔNG. Các số có thể không liên tiếp cho một mục tiêu; điều này có nghĩa là ngày nghỉ đã được thiết lập. Những ngày không có bản ghi nào trong bảng này thực sự là những ngày nghỉ ngơi.
Tiếp theo, chúng ta có distance_to_cover
cột. Điều này là vô hiệu, vì có những hoạt động (như yoga, kéo căng và cử tạ) mà khoảng cách không quan trọng. Sau khi nói điều này, hãy lưu ý rằng min_pace
và max_pace
trong “activity
”Cũng có thể là bảng nullable.
Lĩnh vực chủ đề # 3:Mục tiêu và chuyển đổi của người dùng
Chủ đề này là tất cả về mục tiêu do người dùng tạo và kế hoạch hoạt động do ứng dụng tạo. Ngày thực tế rất quan trọng ở đây và seq_of_day
trong cột “goal_activity
”Bảng đóng một vai trò quan trọng trong việc hiển thị ngày kế hoạch, cũng như start_date
được người dùng chọn cho mục tiêu của họ.
“user_goal
”Và“ transition_plan
”Cả hai bảng hầu hết là tự giải thích. Chỉ có một số cột mà chúng ta nên đánh dấu.
Trong “user_goal
”Bảng:
-
is_active
- Hiển thị nếu người dùng vẫn đang tiếp tục thực hiện mục tiêu này. Tất cả các mục tiêu đang thực hiện sẽ có chữ "Y" trong cột này. Cột này cho phép ứng dụng hạn chế người dùng đặt một mục tiêu tại một thời điểm. -
create_date
- Ngày tạo mục tiêu. -
start_date
- Ngày mà một mục tiêu thực sự được bắt đầu. Nó có thể không giống với create_date. -
expected_end_date
- Ngày kết thúc, được ứng dụng tính toán sau khi lập kế hoạch chuyển đổi cho người dùng. -
actual_end_date
- Khi mục tiêu đã thực sự hoàn thành. Có thể có sai lệch so với kế hoạch đào tạo, vì vậy chúng tôi cần cột này để ghi lại ngày kết thúc thực tế. Ứng dụng có thể cung cấp tùy chọn bỏ qua một ngày hoặc nâng cao lịch trình đào tạo thêm một ngày hoặc lâu hơn. Trong những trường hợp như vậy,actual_end_date
chắc chắn sẽ khác vớiexpected_end_date
.
Trong “transition_plan
”Bảng:
-
is_complete
- Cho biết một hoạt động đã bị bỏ qua, chưa bắt đầu hay đã kết thúc. Nó sẽ chứa một chữ ‘Y’, ‘N’ hoặc một ô trống. -
start_timestamp
- Dấu thời gian khi một hoạt động được bắt đầu. -
end_timestamp
- Dấu thời gian khi hoạt động đã hoàn thành.
Vì chúng tôi hiểu rằng có thể có những khoảng trống trong đào tạo (do bệnh tật, chấn thương hoặc thiếu động lực), bảng này chứa ba ngày khác nhau:
-
original_calendar_date
- Ngày lịch biểu thị thời điểm một hoạt động cần được thực hiện. Giá trị này được điền khi ứng dụng tạo kế hoạch đào tạo. -
planned_calendar_date
- Ban đầu, cột này vẫn để trống. Ngày được điền và thời điểm thay đổi trong kế hoạch đào tạo. -
actual_calendar_date
- Cột này được điền ngay sau khi người dùng đánh dấu một hoạt động là hoàn tất. Đây là ngày hoạt động thực sự kết thúc.
planned_calendar_date
và actual_calendar_date
các cột là nullable; chúng không được điền trong quá trình tạo kế hoạch ban đầu.
Ba cột khác trong bảng này là không thể bỏ qua để mô hình dữ liệu này có thể xử lý tất cả các tình huống có thể xảy ra đối với một hoạt động đang diễn ra. Dưới đây là một số ví dụ:
- Một hoạt động chưa bắt đầu -
-
is_complete
- KHÔNG CÓ -
start_timestamp
- KHÔNG CÓ -
end_timestamp
- KHÔNG CÓ - Một hoạt động đã được bắt đầu nhưng chưa hoàn thành -
- is_complete - NULL
- start_timestamp - VALUE
- end_timestamp - NULL
- Một hoạt động đã bị bỏ qua -
- is_complete - ‘N’
- start_timestamp - NULL
- end_timestamp - NULL
- Một hoạt động đã hoàn thành -
- is_complete - ‘Y’
- start_timestamp –VALUE
- end_timestamp - VALUE
Bạn sẽ thay đổi điều gì về mô hình dữ liệu này?
Tập luyện cho một cuộc chạy marathon không chỉ là tập thể dục. Những người chạy marathon phải điều chỉnh mọi khía cạnh trong lối sống của họ, bắt đầu từ lượng thức ăn hàng ngày, sức mạnh tinh thần của họ, và thậm chí cả thời lượng ngủ.
Một ứng dụng hiệu quả phải có khả năng tổ chức, lập kế hoạch và theo dõi tất cả các khía cạnh của quá trình đào tạo. Mô hình dữ liệu của chúng tôi có phục vụ cho tất cả các khía cạnh này không? Cần có những thay đổi nào để biến nó thành một ứng dụng đào tạo chính thức?
Hãy chia sẻ quan điểm và đề xuất của bạn trong phần bình luận.