0

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>
4

1 に答える 1

1

IndexedDB は、リレーショナル ストアというよりも、ドキュメント指向 (実際にはオブジェクト指向) のストアです。IndexedDB で多対多の関係を実装することは可能ですが、それは必ずしも自然なことではありません。

したがって、すべての Web ストレージを単純な XML スキーマに単純化できれば素晴らしいと思いますが、信じられないほど表現力豊かになるとは思いません。

于 2012-04-27T04:12:02.127 に答える