我正在编写一个小而简单的API来抽象出Web SQL,indexedDB,甚至localStorage/JSON。该API将允许程序员将数据库视为小型关系数据库,即使实际使用的数据库是indexedDB或localStorage/JSON数据结构。
我不知道是否有"标准"方法可以做到这一点,但我将数据库的结构表示为在XML模式中定义的关系数据库。我认为最终产品看起来像这样:xsd --> xml(遵循模式,定义数据库(--> javascript api --> (indexeddb/wwebsql/localStorage-JSON(。好主意?请注意,可以在 API 中调整该性能。也就是说,我知道indexedDB不是一个关系数据库,对于某些人来说,这是一个邪恶的UNION,但API本身将以indexedDB的方式与indexedDB和Web SQL方式的Web SQL一起工作。
话虽如此,我向您介绍我的架构。我想保持非常简单。尽可能简单。你能在这方面做任何改进吗?我想补充的一件事是字段的定义类型。这样字段可以具有属性类型,但它只能是某些值(字符串、数字、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>
IndexedDB 更像是一个面向文档(实际上是面向对象的(存储,而不是一个关系存储。虽然可以在 IndexedDB 中实现多对多关系,但这并不完全自然。
因此,虽然我认为将所有 Web 存储简化为一个简单的 XML 模式会很棒,但我认为它不会非常富有表现力。