Realmで複数のschemaを作成する

今日はRealmについて。
React Nativeお勉強中にRealmを使っていて、schemaを複数持ちたいな、と思った時、
どうやるのか、、非常に簡単で説明するまでもないですが、書きます。
勝手に書きます!笑

前提、JavaScript版です。

例によって、公式をご紹介
https://www.realm.io/jp/docs/javascript/latest/

で、早速やり方。

new realm({schema:[schema1,schema2]})

これで、shcema1、schema2が作成されます。
ね、簡単でしょ? 記事にするほどのことないでしょ?w

ちなみに、Realmは、1つのプロジェクトで1オブジェクトのみです。
つまり、realm.open、new realmは1度だけ。

Realmのshcemaというのは、他のデータベースでよく言うテーブルみたいなものです。
その中にプロパティを定義するんですが、このプロパティがカラムみたいな感じ。
例を出した方がわかりやすいですね。公式ページから参照。

const CarSchema = {
  name: 'Car',
  properties: {
    make:  'string',
    model: 'string',
    miles: {type: 'int', default: 0},
  }
};

これは、Carという名前のshemaを定義しております。
もっているプロパティが、make、model、milesで、それぞれ、’String’といった指定でデータ型を定義しています。
まぁ、Carテーブルにmake、model、milesというカラムを定義してる感じです。
で、これはあくまでも定義なので、作成自体は、

Realm.open({schema: [CarSchema]}).then(realm => {ほげほげ});

こんな感じだったり、

const realm = Realm.open({schema: [CarSchema]})

こんな感じでやります。

で、Carだけじゃなく車を所持しているPersonというschemaも作りたくなったら、

const CarSchema = {
  name: 'Car',
  properties: {
    make:  'string',
    model: 'string',
    miles: {type: 'int', default: 0},
  }
};
const PersonSchema = {
  name: 'Person',
  properties: {
    name:     'string',
    birthday: 'date',
    cars:     {type: 'list', objectType: 'Car'},
    picture:  {type: 'data', optional: true},
  }
};
Realm.open({schema: [CarSchema, PersonSchema]}).then(realm => {ほげほげ});

こんな感じで2つ定義して作成してやるわけです。
もちろん

const realm = Realm.open({schema: [CarSchema, PersonSchema]})

これでもOKです。

また、上記の例の場合、PersonのcarsというプロパティにCarスキーマをobjectType: ‘Car’で定義してます。
つまり、PersonにCarをプロパティとして挿入する仕様です。
このように、schemaに別のschemaをネストすることも可能です。
もちろん、ネストさせずに、特に関連性がなくてもOKです。

どこのサイトもschemaをネストしてたので、最初、関連性を持たせないとダメなのかな? と誤解したので、別に必要ないよー、てことを伝えたようと思いましたw

といったところで、複数schemaの作成についてでした。
お疲れ様でしたー!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です