第三章 文档数据库 (DocDB) 简介 - 反规范化数据结构

33 阅读2分钟

第三章 文档数据库 (DocDB) 简介 - 反规范化数据结构

反规范化数据结构

以下是传统 SQL 规范化关系数据结构的 JSON 示例。它由两个文档组成,可能包含在两个不同的集合中:

{
   "id":123,
   "Name":"John Smith",
   "DOB":"1990-11-23",
   "Address":555
}
{
   "id":555,
   "street":"101 Main Street",
   "city":"Mapleville",
   "state":"NY",
   "postal code":10234
 }

以下是反规范化的相同数据,指定为包含嵌套数据结构的集合中的单个文档:

{
   "id":123,
   "Name":"John Smith",
   "DOB":"1990-11-23",
   "Address":{
              "street":"101 Main Street",
              "city":"Mapleville",
              "state":"NY",
              "postal code":10234
             }
 }

SQL 中,从第一个数据结构转换为第二个数据结构将涉及更改表数据定义,然后迁移数据。

DocDB中,由于没有固定的模式,这两种数据结构可以作为同一数据的不同表示形式共存。应用程序代码必须指定它将访问哪个数据结构。可以将数据迁移到新的数据结构,也可以保持旧数据结构格式不变,在这种情况下,DocDB 每次使用新数据结构访问数据时都会迁移数据。

数据类型和值

DocDB 中,键没有数据类型。但是,导入到 DocDB 的数据值可能具有关联的数据类型。由于数据类型与特定值相关联,因此用另一个值替换该值可能会导致更改该记录的键:值对的数据类型。

DocDB 没有任何保留字或任何特殊的命名约定。在 key:value 对中,任何字符串都可以作为键;任何字符串或数字都可以用作值。键名可以与值相同:“name”:“name”。键名称可以与其索引名称相同。

DocDB 将数据值表示为 JSON 值,如下表所示:

Data ValueRepresentation
StringsString
Numbers数字以规范形式表示,但以下情况除外:1-1 之间的 JSON 小数用前导零整数表示(例如 0.007);相应的 IRIS 数字不带前导零整数(例如 0.007)。
$DOUBLE numbers表示为 IEEE 双精度(64 位)浮点数。
Non-printing charactersJSON 提供以下非打印字符的转义码表示形式:
$CHAR(8): ”\b”
$CHAR(9): ”\t”
$CHAR(10): ”\n”
$CHAR(12): ”\f”
$CHAR(13): ”\r”所有其他不可打印的字符均由转义的十六进制表示法表示。例如,$CHAR(11)“\u000b”。可打印字符也可以使用转义十六进制 (Unicode) 表示法表示。例如,希腊小写字母 alpha 可以表示为“\u03b1”
Other escaped charactersJSON 转义了两个可打印字符,即双引号字符和反斜杠字符:
$CHAR(34): ”\””
$CHAR(92): ”\\”