#iphone #objective-c #database #relational-database
#iPhone #objective-c #База данных #реляционная база данных
Вопрос:
У меня есть приложение, использующее core data с моделью данных ниже. Тем не менее, я переключаюсь на стандартную базу данных со столбцами и строками. Кто-нибудь может мне помочь с настройкой этой новой схемы базы данных?
Ответ №1:
Прежде всего, вам нужно создать таблицы для каждой из сущностей и их атрибутов (обратите внимание, что я добавил «id» к каждой из таблиц для отношений):
- Процедура (имя, временная метка, идентификатор)
- Упражнение — для меня это выглядит как дубликат, поэтому оставляю только один здесь (muscleGroup, musclePicture, name, timeStamp, id)
- Сеанс (временная метка, идентификатор)
- Набор (повторения, временная метка, единица измерения, вес, идентификатор)
Теперь, когда у вас есть таблицы, описывающие каждую из сущностей, вам нужно создать таблицы, которые будут описывать отношения между этими сущностями — как и раньше, имена таблиц указаны заглавными буквами, а их поля — в круглых скобках:
- RoutineExercises (routine_id, exercise_id)
- SessionExercises (session_id, exercise_id)
- Наборы упражнений (exercise_id, set_id)
Вот и все! Теперь, если вам нужно добавить упражнение в процедуру, вы просто:
- Добавьте запись в таблицу упражнений
- Установите связь, добавив кортеж в таблицу RoutineExercises, где routine_id — ваш идентификатор процедуры, а exercise_id — идентификатор вновь созданной записи в таблице упражнений
Это будет справедливо для всех остальных отношений.
ПРИМЕЧАНИЕ: Ваша модель основных данных имеет отношения «один ко многим» и «многие ко многим». Если вы хотите специально обеспечить, чтобы отношение было «один ко многим» (например, упражнение может иметь только 1 процедуру), тогда вам нужно будет указать «exercise_id» в качестве индекса для таблицы RoutineExercises. Если вы хотите, чтобы были разрешены отношения «многие ко многим» (т.Е. Каждому упражнению разрешено иметь несколько подпрограмм), затем установите кортеж (routine_id, exercise_id) в качестве индекса.
Комментарии:
1. Спасибо, Ник, что именно я использую для ID? Нужно ли мне создавать генератор идентификационных номеров или что-то в этом роде?
2. Это действительно зависит от вас — может быть строка, целое число — все, что вам нравится. Если вы решите использовать int, вы можете использовать внутренние идентификаторы строк SQLite — просто вставьте без указания идентификатора строки, и идентификатор будет сгенерирован для вас: sqlite.org/autoinc.html … Также проверьте ключевое слово AUTOINCREMENT, обсуждаемое на той же странице