2014-04-11 54 views
1

我一直在試圖圍繞如何模擬這個數據庫。我正在使用Ruby on Rails做健身追蹤網站。我想要的是用戶能夠維護一個練習列表,然後他們可以使用它來構建和維護他們的例程列表。然後當他們真正完成那個例程時,它會做一次鍛鍊,記錄那次他們做例程的信息。針對健身追蹤的特定數據庫構造

因此,練習和例程更像是用戶可以使用的模板,因此他們不必每次都重新輸入所有信息。我感到困惑的地方是如何把這一切放在一起。一個例程可以有不定數量的練習,所以我知道我需要另一個表來保存它們之間的關聯。我的問題是,我將如何能夠每次在鍛鍊表中記錄信息?我希望這個問題很清楚,下面是我目前關於如何對這個設置進行建模的想法。

練習
類型:字符串(將被限制爲 「強度」 或 「心」)
代表:整數
重量:浮
集:整數
距離:浮動
TOTALTIME:時間


常規
標題:字符串


鍛鍊
日期時間:日期時間
???

我不確定實際鍛鍊數據的記錄可以如何進行。我可以整天製作模板,但剩下的就沒有了。任何幫助表示讚賞。

回答

0

[免責聲明:我不熟悉的Ruby on Rails的,所以這個答案是純粹從數據庫建模觀點]

看起來像你需要一個類似的數據庫結構:

enter image description here

  • 上圖僅顯示了建模表間關係的關鍵字段。根據需要在此「骨架」上添加「肉」。

  • ROUTINE和EXERCISE之間存在多對多的關係,因此幾個例程可以包含相同的練習(並且反之亦然)。該模型目前允許不同用戶分享練習 - 讓我知道這是不是可取的。

  • ROUTINE_EXERCISE.EXERCISE_NO定義了給定例程中練習的順序。同時,主鍵內的ROUTINE_EXERCISE.EXERCISE_ID爲而不是,允許在同一例程中的多個「地點」重複相同的練習。

  • 例程對用戶來說目前是「私有」的。如果它們應該可以在用戶之間共享,那麼就需要在USER和ROUTINE之間建立一個額外的交匯表,並且對誰可以在下面描述的一個給定的例程進行鍛鍊的限制將需要改變。

  • 例程使用一個標識關係(ROUTINE.USER_ID既是FK和PK的一部分),所以,當WORKOUT引用USER和程序中,可以從它們兩者遷移USER_ID。這確保用戶不能執行屬於不同的用戶的例程的鍛鍊。

  • ROUTINE.ROUTINE_NAME是例程的人類可讀名稱,在給定用戶的級別上是唯一的,但不同的用戶可以「重複使用」相同的名稱。您可以使用類似整數ROUTINE_NO的東西來保持引用表格更小。

  • WORKOUT的主鍵對於clustering很有用 - 實質上,屬於同一用戶的所有鍛鍊將在物理上緊密地存儲在數據庫中。據推測,鍛鍊表是最大的鍛鍊表,因此,將所有事情按照用戶進行「預先分組」(按用戶)和「預先分類」(按給定用戶的日期/時間)可以使性能受益。

  • WORKOUT.ROUTINE_NAME爲NULL-able,因此當用戶更改或刪除例程時,WORKOUT可以與它斷開連接,而不會被自身刪除。另一種選擇是從不修改或刪除ROUTINE,而是使用某種形式的版本(用於修改)和DELETED標誌(用於刪除)。沿着these lines的東西,但更簡單。