Как мне моделировать эти данные в Core Data - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь смоделировать следующие данные, чтобы они могли быть сохранены в CoreData.

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

Каждый Account имеет id и profile

struct Account {
  let id: String
  let profile: UserProfile
}

Каждый профиль имеет свой собственный id, name, а также массив Post

struct UserProfile {
  let id: String
  let name: String
  let posts: [Post]
}

Пост состоит из id, authorId, который соответствует идентификатору в профиле, а также title

struct Post {
  let id: String
  let authorId: String // this maps to the UserProfile id field
  let title: String
}

У учетной записи может быть 1 профиль и наоборот. Профиль, однако, может иметь число N Posts.

Я предполагал, что мне понадобятся 3 объекта: Account, UserProfile и Post.

Account и UserProfile будут иметь отношение один к одному.

Я не уверен, как моделировать UserProfile и Post.

Должен ли UserProfile иметь отношения один-ко-многим с Post?

Возможно ли для Post иметь отношение один-к-одному с UserProfile, а UserProfile имеет отношение один-ко-многим с Post?

Кроме того, я предполагаю, что CoreData не поддерживает Codable, свойства profile не должны существовать как Attribute для Account и вместо этого как значение в поле Relationships вместо этого?

1 Ответ

0 голосов
/ 21 апреля 2020

Мое предложение:

class Account : NSManagedObject {
  @NSManaged var id: String
  @NSManaged var profile: UserProfile?
}

class UserProfile : NSManagedObject {
  @NSManaged var id: String
  @NSManaged var name: String
  @NSManaged var account: Account?
  @NSManaged var posts: Set<Post>
}

class Post : NSManagedObject {
  @NSManaged var id: String
  @NSManaged var author: UserProfile?
  @NSManaged var title: String
}
  • profile в Account является отношением один к одному с UserProfile
  • account в UserProfile является to-one обратное отношение к Account
  • posts в UserProfile является отношением ко-многим к Post
  • author в Post это отношение один к одному обратное к UserProfile

Обратные отношения более эффективны, чем поддержание атрибута, подобного authorId в Post

Можно принять Codable в классах Core Data (включая отношения), но реализация немного сложна.

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