你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

了解表服务数据模型

表服务提供表形式的结构化存储。 以下各节概述表服务数据模型。

存储帐户

存储帐户是在存储系统中全局唯一的实体。 存储帐户是表服务的父命名空间,是授权的基础。 只要每个表的名称都独一无二,即可在给定的存储帐户中创建任意数量的表。

必须始终在请求 URI 中指定存储帐户。 用于访问表服务的基 URI 如下所示:

https://myaccount.table.core.windows.net  

表、实体和属性

表以实体集合的形式存储数据。 实体与行类似。 一个实体具有一个主键和一组属性。 属性与列类似,是一个名称/类型化值对。

表服务不对表施加任何架构,因此同一表中的两个实体可具有两组不同的属性。 开发人员可在客户端一侧施加架构。 一个表可以包含任意数量的实体。

表名称

表名必须遵循以下规则:

  • 表名必须在帐户中独一无二。

  • 表名只能包含字母数字字符。

  • 表名不能以数字字符开头。

  • 表名不区分大小写。

  • 表名的长度必须为 3 到 63 个字符。

  • 某些表名是保留的名称,包括“tables”。 尝试创建具有保留表名的表将返回错误代码 404(错误请求)。

这些规则也由正则表达式“^[A-Za-z][A-Za-z0-9]{2,62}$”描述。

表名保留创建时的大小写,但使用表名时不区分大小写。

属性名称

属性名称是长度最大为 255 个字符、区分大小写的字符串。 属性名称应遵循 C# 标识符的命名规则。

注意

根据 XML 规范,某些 C# 标识符无效。 属性名称中不能使用这些标识符,因为在对表服务的请求中,这些属性名称需要通过 XML 负载发送。

重要

属性名称在 URL 中传递给表服务。 某些字符必须使用 UTF-8(首选)或 MBCS 以百分比编码形式出现在 URL 中。 使用 Azure 存储客户端库时,会自动进行此编码。 但是,即使经过编码,还是有一些字符在 URL 路径中无效。 这些字符不能出现在属性名称中。 像 \uE000 这样的码位虽然在 NTFS 文件名中有效,但不是有效的 Unicode 字符,因此无法使用。 此外,也不允许使用某些 ASCII 或 Unicode 字符,如控制字符(0x00 到 0x1F、\u0081 等)。 有关管理 HTTP/1.1 中的 Unicode 字符串的规则,请参见:

注意

自 2009-04-14 版开始,表服务不再支持属性名称中包括短划线 (-) 字符。

属性限制

一个实体最多可具有 255 个属性,包括下一节中描述的 3 个系统属性。 因此,除了这 3 个系统属性之外,用户最多还可加入 252 个自定义属性。 实体属性中所有数据的总大小不能超过 1 MiB。

系统属性

实体始终具有以下系统属性:

  • PartitionKey 属性

  • RowKey 属性

  • Timestamp 属性

表中的每个实体会自动包括上述系统属性。 这些属性的名称是保留的名称,因此无法更改。 开发人员负责插入并更新 PartitionKeyRowKey 的值。 服务器管理 Timestamp 的值,无法修改该值。

键字段中禁用的字符

PartitionKeyRowKey 属性的值中不允许使用下列字符:

  • 正斜杠 (/) 字符

  • 反斜杠 (\) 字符

  • 数字记号 (#) 字符

  • 问号 (?) 字符

  • 从 U+0000 到 U+001F 的控制字符,包括:

    • 水平制表符 (\t) 字符
    • 换行符 (\n) 字符
    • 回车 (\r) 字符
  • 从 U+007F 到 U+009F 的控制字符

PartitionKey 属性

将对表进行分区以支持跨存储节点的负载平衡。 表的实体按分区加以组织。 分区是拥有相同分区键值的一系列连续实体。 分区键是给定表中的分区的唯一标识符,由 PartitionKey 属性指定。 分区键构成了实体的主键的第一部分。 分区键可以是最大大小为 1 KiB 的字符串值。

必须在每个插入、更新和删除操作中加入 PartitionKey 属性。

RowKey 属性

主键的第二部分是行键,由 RowKey 属性指定。 行键是某个给定分区中实体的唯一标识符。 PartitionKeyRowKey 共同唯一标识表中的每个实体。

行键是一个字符串值,其大小可能高达 1 KiB。

必须在每个插入、更新和删除操作中加入 RowKey 属性。

Timestamp 属性

Timestamp 属性是一个 DateTime 值,该值保留在服务器端以记录上次修改实体的时间。 表服务在内部使用 Timestamp 属性以提供乐观并发。 Timestamp每次修改实体时,实体的 属性值都会向前推进。 不应在插入或更新操作中设置此属性(将忽略其值)。

属性 Timestamp 必须以接受的 ISO 8601 UTC 格式之一表示。 有关接受的 UTC 格式的详细信息,请参阅 设置 DateTime 值的格式

属性类型

表服务支持 OData 协议规范定义的数据类型子集。 下表显示了表服务支持的属性类型:

Odata 数据类型 公共语言运行时类型 详细信息
Edm.Binary byte[] 最大大小为 64 KiB 的字节数组。
Edm.Boolean bool 一个布尔值。
Edm.DateTime DateTime 一个 64 位值,用协调世界时 (UTC) 表示。 支持的 DateTime 范围从公元 1601 年 1 月 1 日午夜 12:00 UTC 开始, 到 9999 年 12 月 31 日结束。 有关详细信息,请参阅 设置 DateTime 值的格式
Edm.Double double 64 位浮点值。
Edm.Guid Guid 128 位全局唯一标识符。
Edm.Int32 Int32int 32 位整数。
Edm.Int64 Int64long 64 位整数。
Edm.String String UTF-16 编码值。 字符串值的大小可能高达 64 KiB。 请注意,支持的最大字符数约为 32 K 或更少。

默认情况下,除非指定其他类型,否则以 String 类型创建属性。 若要显式键入属性,请使用插入实体或更新实体操作的相应 OData 数据类型来指定其数据类型。 有关详细信息,请参阅 插入和更新实体

表服务不保留 null 属性的值。 查询实体时,上述属性类型都是不可为 null 的。 写入实体时,上述属性类型都是可为 null 的,并且任何具有值的属性都会像有效负载不包含该属性一 null 样进行处理。

有关演示如何筛选查询请求 URI 中各种属性类型的示例,请参阅 查询表和实体

另请参阅