IndexedDBの概念がわかりづらいので、まとめてみた。
- オブジェクトストア
- インデックス
- キー
- 値
オブジェクトストア
RDBでいうとこのテーブルに相当する。実態はただのオブジェクト
ややこしいのは、オブジェクトストア=なんらかのオブジェクトという概念なので、
一概にテーブルと同じ。とは言い切れないところ。
オブジェクトストアを作成するサンプルは以下のとおり
var store = db.createObjectStore('user', {
keyPath: "name",
autoIncrement: false
});
インデックス
オブジェクトストアを作るとき、構成定義は行わず、自由にキー・ペア形式でデータを挿入できてしまう。そのため、インデックスを作って、キーの制約設定をしたり、検索するときにインデックスで設定したキーで検索ができるようにする。
インデックスは、オブジェクトのキーではなく保存されたオブジェクトのプロパティの値を使用して、オブジェクトストア内に保存された値を検索することを可能にする。また、インデックスには、保存されたデータに単純な制限を強制する機能がある。
インデックスも一種のオブジェクトストアとしてIndexedDBでは捉えている。
基本、RDBのインデックスと仕組みは同じ。
(参考:インデックスの意味とメリット・デメリット)
キー
RDBでいうところのカラムに相当。ただ、オブジェクトストアは構成定義がなく、その構成は自由になっている。いわゆるNoSQLに近い。なので、オブジェクトのプロパティと言ったほうが近い。
このキーの概念がIndexedDBでは大きく分けて2つある
種類 | 説明 |
---|---|
インライン・キー | オブジェクトストア内にあるキーのことをインライン・キーと称する |
アウトオブライン・キー | オブジェクトストアの外で定義されたキーのこと。 |
keyPathを省略し、autoincrementをtrue、falseを切り替えることで、以下のような違いが生まれる。
autoIncrementをtrueでオブジェクトストアを生成すると、キーはインクリメントで自動生成される。
var store = db.createObjectStore('user', {
autoIncrement: true
});
autoIncrementはfalseでオブジェクトストアを生成すると、add()やput()でデータを追加するとき第二引数にキー値を指定しなければならない。
var store = db.createObjectStore('user', {
autoIncrement: false
});
KeyPath | autoincrement | 説明 |
---|---|---|
なし | なし | どんな種類の値でも保持できる。新たな値の追加をするときは個別のキー引数を指定する必要がある。 |
あり | なし | JavaScript オブジェクトのみ保持できる。オブジェクトはキーパスと同じ名称のプロパティを持つ必要がある。 |
なし | あり | どんあ種類の値でも保持できる。キーは自動的に生成される。 |
あり | あり | JavaScript オブジェクトのみ保持できる。KeyPath に指定したプロパティに自動的に値が生成される |
値
キーに入れる値のこと。EcmaScriptで使われる型であれば値として指定できる。
メソッドや、オブジェクトの種類についてはまた書くときにまとめてみたいと思います。