Как мне создать схему БД «многие ко многим», которая также поддерживает порядок для связанных элементов? - PullRequest
0 голосов
/ 14 апреля 2019

Простите, если это довольно просто, я новичок в базах данных и не могу найти ответы через поиск.

Я ищу создание базы данных для приложения для Android, где есть несколько тренировок, и каждая тренировка имеет несколько упражнений.Я знаю, что мне нужно создать объединенную / ассоциативную таблицу, но проблема в том, что мне также нужно держать упражнения в определенном порядке и сохранять повторения для каждого упражнения на основе тренировки, и я не совсем уверен, как.

Сейчас у меня есть три основные таблицы, но я не совсем уверен, как добавить порядок и количество повторений.

Текущие таблицы:

Тренировки: id, имя, описание

Тренировки: id, name, description,

WorkoutsDrills:Workout_id, Drill_id

Отсутствует информация: reps_for_drill, порядок


Вывод, который я хотел бы получить, - это когда я выполняю тренировку, я вытягиваю список Drill_IDs вместе с некоторой информациейпривести их в порядок.Мне также нужно получить количество повторений для каждого упражнения, но повторы не являются статичными для упражнения, они назначаются каждому упражнению на основе тренировки.

Прямо сейчас я просто вытягиваю список случайных упражнений, без повторений.Если я храню повторения в базе данных упражнений, то мне нужно новое упражнение для каждого экземпляра разного количества повторений.

пример данных

Я думаю, вот некоторыеобразец данных, чтобы помочь объяснить.

Тренировки

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)

1 Ответ

0 голосов
/ 27 апреля 2019

Итак, после некоторых проб и ошибок я нашел решение. Закончилось довольно просто. Вот таблицы и классы, которые я использовал.

Классы


У меня было два класса: тренировка и тренировка. Единственными методами, которые у них были, были методы получения и установки. Ниже приведены их поля.

Дрель

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

workoutdrill

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

Я еще не полностью реализовал использование БД, я вернусь и вставлю этот код сюда, когда у меня будет. Мой план получения информации и заполнения объекта тренировки на основе номера workout_ID:

  1. Запрос таблицы тренировок для получения базовой информации из строки и заполнение полей имени и описания объекта тренировки.
  2. Запрос ассоциативного курсора из таблицы тренировок, содержащей все строки, соответствующие определенному номеру тренировки в столбце W_ID.
  3. Перейти к первой (или следующей) строке ассоциацииКурсор
  4. Возьмите номер Drill_ID и запросите его из таблицы сверлений, чтобы вернуть DrillCursor.
  5. Используйте два курсора для заполнения нового tempDrill. (имя и описание от DrillCursor и представитель от AssociationCursor.
  6. Вставьте эту временную тренировку в ArrayList тренировки.
  7. Повторяет шаги 3-6, пока ассоциация Cursor не будет в конце.

После этого объект тренировки должен быть полностью заполнен информацией и использоваться для того, что когда-либо потребуется.


Пожалуйста, не стесняйтесь предлагать улучшения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...