Web SQL、indexedDB、さらには localStorage/JSON を抽象化する小さくてシンプルな API を作成しています。実際に使用されているデータベースが indexedDB または localStorage/JSON データ構造であっても、API を使用すると、プログラマーはデータベースを小さなリレーショナル データベースと考えることができます。
これを行う「標準的な」方法があるかどうかはわかりませんが、データベースの構造を XML スキーマで定義されたリレーショナル データベースとして表現しています。最終製品は次のようになると思います: xsd --> xml (スキーマに従い、db を定義) --> javascript api --> (indexeddb/wwebsql/localStorage-JSON)。良いアイデア?パフォーマンスはAPI内で調整できることに注意してください。つまり、indexedDB がリレーショナル データベースではなく、一部の人にとっては不浄な UNION であると表現することはわかっていますが、API 自体は indexedDB の方法で indexedDB と連携し、Web SQL の方法で Web SQL と連携します。
そうは言っても、私のスキーマを紹介します。とてもシンプルに保ちたいです。できるだけシンプルに。これについて何か改善できますか?追加したいことの 1 つは、フィールドの型の定義です。そのため、フィールドは属性タイプを持つことができますが、特定の値 (文字列、数値、blob、w/e) のみにすることができます。
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- DATABASE -->
<xs:element name="database">
<xs:complexType>
<xs:choice>
<!-- TABLE-->
<xs:element name="table" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:choice>
<!-- FIELD -->
<xs:element name="field" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="pk" type="xs:boolean"/>
<xs:attribute name="fk" type="xs:string"/>
<xs:attribute name="unique" type="xs:boolean"/>
<xs:attribute name="index" type="xs:boolean"/>
<xs:attribute name="indentity" type="xs:boolean"/>
<xs:attribute name="maxSize" type="xs:long"/>
</xs:complexType>
</xs:element>
<!-- END FIELD -->
</xs:choice>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<!-- END TABLE -->
</xs:choice>
<xs:attribute name="version" type="xs:double" use="required"/>
</xs:complexType>
</xs:element>
<!-- END DATABASE -->
</xs:schema>