質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2290閲覧

Realm に保存するクラスのグルーピングについて

marcurrys

総合スコア16

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

1グッド

0クリップ

投稿2016/06/06 14:59

以下のようなRealmオブジェクトPersonを定義し、PersonListとしてもつクラスを定義したいと思っています。

Swift

1class Person: Object { 2 dynamic var id: Int = 0 3 dynamic var email: String? = "" 4 dynamic var name: String = "" 5 6 convenience init(id: Int, email: String?, name: String) { 7 self.init() 8 self.id = id 9 self.email = email 10 self.name = name 11 } 12 13 override class func primaryKey() -> String? { 14 return "id" 15 } 16}

その際、Friends, Family, Cousinsのように、どれもPersonListを持つ点は同じですが、中身が違うクラスをそれぞれ分けて定義したいと思っています。(表示するページごとに、RealmからそのクラスのList<Person>をもってきたいと思っています。FriendsTableViewControllerではFriendsクラス, FamilyTableViewControllerではFamilyクラス, CousinsTableViewControllerではCousinsクラスといった具合です。)

Swift

1class Friends: Object { 2 let members = List<Person>() 3 4 convenience init(members: [Person]?) { 5 self.init() 6 if let members = members { 7 self.members.appendContentsOf(members) 8 } 9 } 10} 11class Family: Object { 12 ::: 同上 13} 14class Cousins: Object { 15 ::: 同上 16}

この際、それぞれ分けてRealmに保存するのは正しいでしょうか?
本当はPersonのプロパティに判別できる値を持たせるのが正しいのかもしれませんが、今回のように同じ構造のクラス/データをそれぞれ分類して保存する場合にいい方法があれば、教えていただきたいです。
よろしくお願いいたします。

退会済みユーザー👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Realmにおいて関連を作成/表示するコストは非常に安いので、例のようなあるクラスのオブジェクトを分類する、場合に関連を用いるのは非常に合理的です。

このような方法をとった場合、一般のRDBではJOINのコストがかかる場合がありますが、Realmの場合はそれがないので、おっしゃっているように、FriendsTableViewControllerに表示するオブジェクトはrealm.objects(Friends).first?.membersのように簡単に、効率良く取得できます。

またこの方法の良いところはFriendsかつCousins(という関係は想定外かもしれませんが、あくまで例として)といった複数のグループに所属するオブジェクトも自然に表せることです。
(単にFriendsCousinsの両方に関連付けるだけ)

もし、これをPersonのプロパティで表現していたら、かなり複雑な状態を持つことになってしまいます。

ということで、おっしゃっている方法でグルーピングすることに何の問題もありません。良い方法だと思います。

投稿2016/06/07 01:35

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marcurrys

2016/06/07 01:37

ご丁寧に回答いただきありがとうございます。 上記の方法で実装してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問