Первичный ключ в базе данных области

#ios #swift #realm

Вопрос:

Я создаю файл области по умолчанию, чтобы использовать его при первом запуске приложения в качестве замены (я хочу иметь файл с исходными данными). Я начинаю с создания файла области по умолчанию из csv-файлов. Проблема в том, что я не уверен, правильна ли моя структура. Когда я импортирую данные из csv (в браузере области) и пытаюсь импортировать следующие данные для следующего класса, я получаю эту ошибку

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

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

 class Exercises: Object {  @Persisted var id: Int = 0  @Persisted var name: String = ""  @Persisted var category: Category?  @Persisted var equipment: Equipment?  @Persisted var instruction: String  @Persisted var muscle: Listlt;Musclegt;  @Persisted var gif: String?  @Persisted var image: String?    convenience init(id: Int, name: String, category: Category?, equipment: Equipment?, instruction: String, muscle: [Muscle], gif: String?, image: String?) {  self.init()  self.id = id  self.name = name  self.category = category  self.equipment = equipment  self.instruction = instruction  self.muscle.append(objectsIn: muscle)  self.gif = gif  self.image = image  } }  

и другие классы для отдельных вещей

 class Equipment: Object {  @Persisted(primaryKey: true) var equipmentID = 0  @Persisted var equipment: String = ""    convenience init(equipment: String) {  self.init()  self.equipment = equipment  } }  class Category: Object {  @Persisted(primaryKey: true) var categoryID = 0  @Persisted var category: String = ""    convenience init(category: String) {  self.init()  self.category = category  }   }  class Muscle: Object {  @Persisted(primaryKey: true) var muscleID = 0  @Persisted var muscle: String = ""    convenience init(muscle: String) {  self.init()  self.muscle = muscle  } }  

Наконец, я хочу получить структуру, как показано ниже. Интересно, правильно ли это? Может быть, лучший вариант-просто установить текст в полях вместо ссылки на класс (в конце концов, область нереляционная)?

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

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

1. Вопрос: вы хотите, чтобы у объекта был первичный ключ? @Persisted var id: Int = 0 ? Во-вторых, это ошибка, которую вы получаете при импорте данных, ссылающихся на класс категории. Похоже, что в плоском файле, который вы импортируете, есть дубликат первичного ключа 1 , и первичные ключи должны быть уникальными. Я бы проверил этот файл. Пожалуйста, задавайте вопросы по одному на каждый, но скриншот, который вы включили, напрямую не соотносится с объектами (кодом) в вопросе как таковом. Другими словами, мы не знаем, что представляет собой этот снимок экрана, другой объект? О, Сфера обладает реляционными возможностями (является реляционной)

2. Я хочу, чтобы у всех классов области был первичный ключ (первичный ключ для основного класса, называемого упражнениями, и других, таких как оборудование, категория и мышцы), потому что это облегчает поиск. Правильно ли это?

3. Нет, это не облегчает поиск как таковой — фильтрация есть фильтрация. Однако с объектами с первичными ключами проще работать и они более эффективны; вы можете напрямую обновлять определенный объект или читать в определенном объекте по его первичному ключу без необходимости фильтрации . поэтому… вам нужно будет обновить модель упражнений, чтобы добавить первичный ключ, а затем вернуться к вашей проблеме. Первичные ключи должны быть уникальными, поэтому вероятной причиной вашей проблемы является то, что двум объектам категории присвоен первичный ключ «1».