【问题标题】:How do I create a many-to-many DB schema that also keeps an order for the items associated?如何创建一个多对多数据库模式,同时保持关联项目的顺序?
【发布时间】:2019-04-14 03:41:25
【问题描述】:

如果这很简单,请原谅我,我是数据库新手,无法通过搜索找到任何答案。

我希望为一个有许多锻炼的 Android 应用程序创建一个数据库,并且每个锻炼都有许多练习。我知道我需要创建一个联合/关联表,但问题是我还需要将训练保持在一定的顺序,并根据训练为每个训练存储代表,我不太确定如何。

现在我列出了三个基本表格,但我不确定如何添加订单和代表。

当前表格:

锻炼:ID、名称、描述

演习:id、名称、描述,

WorkoutsDrills:Workout_id、Drill_id

缺少信息:reps_for_drill、订单


我想要得到的输出是当我拉动锻炼时,我拉动了一个钻孔 ID 列表,以及一些信息以将它们按顺序排列。我还需要获取每次训练的重复次数,但重复次数对于训练不是静态的,它们是根据锻炼分配给每个训练的。

现在我只是拉出一个随机训练列表,没有存储代表。如果我将 reps 存储在 Drill db 中,那么对于不同数量的 reps 的每个实例,我都需要一个新的 Drill。

样本数据

我想这里有一些示例数据可以帮助解释。

演习

Name            Description
Pushups         standard pushup
Situps          standard situp
Jumping Jacks   standard jumping jack

锻炼

Name        Description          Drills in a workout(reps)
workout1    sample description   Pushups(10), Situps(5)
workout2    sample description2  situps(5), Jumping Jacks(20)

【问题讨论】:

    标签: android sql database


    【解决方案1】:

    所以经过反复试验,我想出了一个解决方案。最终变得非常简单。这是我使用的表和类。


    我有两个课程:训练和锻炼。他们仅有的方法是 getter 和 setter 方法。以下是他们的字段。

    钻孔

    private String mDrillName;
    private String mDrillDescription;
    private int mDrillReps;
    

    锻炼

    private String mWorkoutName;
    private String mWorkoutDescription;
    private ArrayList<Drill> mDrillList;
    

    表格


    我最终选择了三个表,一个用于存储每个对象的一般信息,一个关联表用于存储它们的关系。

    演习

    INT  : _ID
    TEXT : Name
    TEXT : Description
    

    锻炼

    INT  : _ID
    TEXT : Name
    TEXT : Description
    

    锻炼

    INT : W_ID       //workout ID
    INT : D_ID       //Drill ID
    INT : orderNum   //Keeps track of the order of drills in the workout
    INT : reps       //Keeps track of the number of reps to do for a drill
    

    我还没有完全实现数据库的使用,我会回来把代码放在这里。我基于锻炼 ID 号提取信息并填充锻炼对象的计划是:

    1. 从行中查询锻炼表的基本信息并填充锻炼对象的名称和描述字段。
    2. 从包含与 W_ID 列中特定锻炼 ID 号匹配的所有行的锻炼表中查询关联光标。
    3. 转到关联光标的第一行(或下一行)
    4. 获取drill_ID 号并从drills 表中查询它以返回drillCursor。
    5. 使用两个游标填充新的 tempDrill。 (名称和描述来自 DrillCursor,代表来自 AssociationCursor。
    6. 将此临时练习推送到锻炼的 ArrayList 中。
    7. 重复步骤 3-6 直到 AssociationCursor 位于末尾。

    在那之后,一个锻炼对象应该被完全填充了信息并且可以用于任何需要的东西。


    请随时提出改进建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2015-05-23
      相关资源
      最近更新 更多