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