2013-07-12 60 views
0

我試圖將一個簡單的應用程序概念化爲我和我的朋友來記錄我們的鍛鍊。我似乎無法理解如何對數據進行建模。每個用戶都可以輸入鍛鍊。鍛鍊有一個或多個鍛鍊。每個練習都有一組或更多組。每組至少有1個重量。下面是我能夠想到的最好的。|如何在用戶有不同的輸入量時考慮數據庫設計

Workout Table  
1 User_A 9-Jul 
2 User_B 9-Jul 
3 User_C 9-Jul 
4 User_A 10-Jul 
5 User_D 10-Jul 
6 User_B 11-Jul 

Exercise Table 
1 Bench  3 reps 135 lbs Workout_1 
2 Bench  3 reps 185 lbs Workout_1 
3 Deadlift 5 reps 225 lbs Workout_2 

我在正確的軌道上嗎?這將是我第一次製作任何不是博客教程的應用程序。這看起來好像運動表會非常快速地變大。也許這是正常的,但?

回答

2

您處於正確的軌道,您可能會添加Users表並將您的Workout表更改爲UsersWorkout表,並創建兩者之間的關係。然後,您可以將您的鍛鍊表更改爲WorkoutExercise表,併爲Exercise創建一個具有練習類型(例如Bench,Deadlift)的單獨表格。

見附件我ERD低於MS Access

enter image description here

並在下文中爲每個表樣本數據:

用戶

Users

用戶的鍛鍊

UserWorkout

鍛鍊的鍛鍊

WorkoutExercise

最後練習

Exercises

這些都是Normalized表順便防止冗餘,並防止UPDATE,DELETE,INSERT異常。

+0

謝謝!是的,因爲我理解了這一方,所以我放棄了用戶表。這是我沒有信心的其餘部分。爲什麼把練習放在自己的桌子上更有意義,對我來說似乎沒有必要?在規範化和大多數例子中,我覺得它是有道理的,因爲它會像ItemID,ItemName,ItemCostPerUnit,但真的有更快的自己的表只是爲了從名稱更改爲ID? – Ryan

+0

在鍛鍊表上,您可以將其放在WorkoutExercise表上。然而,標準化表格可能會做什麼的更新異常存在危險。例如,假設你想將運動類型從Deadlift改爲Dead-Lift(我知道我錯了,但這只是爲了舉例)。並且讓我們進一步說,您的鍛鍊鍛鍊表中已經有100萬條記錄。所以,這意味着您必須爲此更新1M記錄。現在,相比之下,如果您有鍛鍊表格,則只更新一條記錄! – Edper

+0

此外,如果您的用戶將其輸入爲Deedlift或Deadlifts,那麼您將在那裏出現不一致的記錄,但是如果您有用於示例的表不會造成問題。現在,我並不是說你不能去規範化,但我想說的是在這個設計中也有一個折衷。 – Edper