フィットネス情報を保存しているデータベースを引き継いで、特定のテーブルを1つのテーブルのままにするか、3つのテーブルに分割するかについて議論していました。
今日、次のフィールドを持つワークアウトと呼ばれる1つのテーブルがあります
id、exercise_id、reps、weight、date、person_id
したがって、1日に3つの異なるエクササイズを2セット行った場合、その日のテーブルには6つのレコードがあります。例えば:
id、exercise_id、reps、weight、date、person_id 1、1、10、100、1 /
1
/ 2010、10 2、1、10、100、1 / 1
/ 2010、10 3、1、10、100、1
/ 1 / 2010、10 4、2、10、100、1 / 1 /
2010、10 5、2、10、100、1 / 1 / 2010、10
6、2、10、100、1
/ 1/2010、 10
したがって、複数のレコードに冗長なデータ(date、personid、exercise_id)がある場合、これを3つのテーブルに正規化する必要があります。
WorkoutSummary: -id
-
date
--person_id
WorkoutExercise: -id
-
workout_id(WorkoutSummaryへの外部キー)
-exercise_id
WorkoutSets:
--id
--workout_exercise_id(WorkoutExerciseへの外部キー)
--reps
--weight
欠点は、このリファクタリング後のクエリが遅くなることだと思います。これは、以前は結合がなかった同じクエリを実行するために3つのテーブルを結合する必要があるためです。リファクタリングの利点により、将来、重複を追加することなく、ワークアウトサマリーレベルまたはエクササイズレベルで新しいフィールドを追加できるようになります。
この議論についてのフィードバックはありますか?