Как я могу реплицировать модель основных данных, используя традиционную реляционную базу данных?

#iphone #objective-c #database #relational-database

#iPhone #objective-c #База данных #реляционная база данных

Вопрос:

У меня есть приложение, использующее core data с моделью данных ниже. Тем не менее, я переключаюсь на стандартную базу данных со столбцами и строками. Кто-нибудь может мне помочь с настройкой этой новой схемы базы данных?

введите описание изображения здесь

Ответ №1:

Прежде всего, вам нужно создать таблицы для каждой из сущностей и их атрибутов (обратите внимание, что я добавил «id» к каждой из таблиц для отношений):

  1. Процедура (имя, временная метка, идентификатор)
  2. Упражнение — для меня это выглядит как дубликат, поэтому оставляю только один здесь (muscleGroup, musclePicture, name, timeStamp, id)
  3. Сеанс (временная метка, идентификатор)
  4. Набор (повторения, временная метка, единица измерения, вес, идентификатор)

Теперь, когда у вас есть таблицы, описывающие каждую из сущностей, вам нужно создать таблицы, которые будут описывать отношения между этими сущностями — как и раньше, имена таблиц указаны заглавными буквами, а их поля — в круглых скобках:

  1. RoutineExercises (routine_id, exercise_id)
  2. SessionExercises (session_id, exercise_id)
  3. Наборы упражнений (exercise_id, set_id)

Вот и все! Теперь, если вам нужно добавить упражнение в процедуру, вы просто:

  1. Добавьте запись в таблицу упражнений
  2. Установите связь, добавив кортеж в таблицу RoutineExercises, где routine_id — ваш идентификатор процедуры, а exercise_id — идентификатор вновь созданной записи в таблице упражнений

Это будет справедливо для всех остальных отношений.

ПРИМЕЧАНИЕ: Ваша модель основных данных имеет отношения «один ко многим» и «многие ко многим». Если вы хотите специально обеспечить, чтобы отношение было «один ко многим» (например, упражнение может иметь только 1 процедуру), тогда вам нужно будет указать «exercise_id» в качестве индекса для таблицы RoutineExercises. Если вы хотите, чтобы были разрешены отношения «многие ко многим» (т.Е. Каждому упражнению разрешено иметь несколько подпрограмм), затем установите кортеж (routine_id, exercise_id) в качестве индекса.

Комментарии:

1. Спасибо, Ник, что именно я использую для ID? Нужно ли мне создавать генератор идентификационных номеров или что-то в этом роде?

2. Это действительно зависит от вас — может быть строка, целое число — все, что вам нравится. Если вы решите использовать int, вы можете использовать внутренние идентификаторы строк SQLite — просто вставьте без указания идентификатора строки, и идентификатор будет сгенерирован для вас: sqlite.org/autoinc.html … Также проверьте ключевое слово AUTOINCREMENT, обсуждаемое на той же странице