了解表格服務資料模型
表格服務會以資料表格式提供結構化儲存體。 下面各節概述表格服務資料模型。
儲存體帳戶
儲存體帳戶是儲存體系統中全域唯一的實體。 記憶體帳戶是數據表服務的父命名空間,而且是授權的基礎。 您可以在某個儲存體帳戶內建立任意數目的資料表,只要每個資料表的名稱是唯一的即可。
要求 URI 中一定要指定儲存體帳戶。 存取表格服務的基底 URI 如下:
https://myaccount.table.core.windows.net
資料表、實體和屬性
資料表會將資料儲存為實體集合。 實體類似資料列。 實體包含主索引鍵和一組屬性。 屬性是名稱與具類型值組,類似資料行。
表格服務不會對資料表強制執行任何結構描述,因此同一個資料表中的兩個實體可能會有不同的屬性集。 開發人員可以選擇在用戶端上強制執行結構描述。 資料表可包含任意數目的實體。
資料表名稱
資料表名稱必須符合下列規則:
資料表名稱在帳戶內必須是唯一的。
資料表名稱只能包含英數字元。
資料表名稱的開頭不可以是數值字元。
資料表名稱不區分大小寫。
資料表名稱的長度必須介於 3 到 63 個字元。
某些資料表名稱會加以保留,包括 "tables"。 嘗試以保留的資料表名稱建立資料表,會傳回錯誤碼 404 (不正確的要求)。
正則表達式 “^[A-Za-z][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
屬性
資料表中的每個實體都會自動包含這些系統屬性。 這些屬性的名稱會加以保留,且無法變更。 開發人員負責插入及更新 PartitionKey
和 RowKey
的值。 伺服器會管理 Timestamp
的值,此值無法修改。
索引鍵欄位中不允許的字元
下列字元不可在 PartitionKey
和 RowKey
屬性的值中使用:
正斜線 (/) 字元
反斜線 (\) 字元
數字符號 (#) 字元
問號 (?) 字元
從 U+0000 到 U+001F 的控制字元,包括:
- 水平索引標籤 (\t) 字元
- 換行 (\n) 字元
- 歸位字元 (\r) 字元
從 U+007F 到 U+009F 的控制字元,包括:
PartitionKey 屬性
表格會加以分割,以支援跨儲存體節點進行負載平衡。 資料表的實體是由資料分割所組織。 資料分割是擁有相同資料分割索引鍵值的實體連續範圍。 資料分割索引鍵是所指資料表內資料分割的唯一識別碼,由 PartitionKey
屬性所指定。 資料分割索引鍵會構成實體主索引鍵的第一個部分。 分割區索引鍵的大小上限為 1024 個字元的字串值。
您必須在每個插入、更新及刪除作業中包含 PartitionKey
屬性。
RowKey 屬性
主索引鍵的第二個部分是資料列索引鍵,由 RowKey
屬性所指定。 資料列索引鍵是指定資料分割內實體的唯一識別碼。
PartitionKey
和 RowKey
會共同以唯一的方式識別資料表內的每個實體。
數據列索引鍵是一個字串值,大小上限為 1024 個字元。
您必須在每個插入、更新及刪除作業中包含 RowKey
屬性。
Timestamp 屬性
Timestamp
屬性是 DateTime
值,會在伺服器端維護以記錄實體上次修改的時間。 表格服務會在內部使用 Timestamp
屬性提供開放式並行存取。 每次修改實體時,實體的 Timestamp
屬性值都會前進。 插入或更新作業則不應設定這個屬性 (會忽略其值)。
屬性 Timestamp
必須以其中一個可接受的 ISO 8601 UTC 格式表示。 如需已接受 UTC 格式的詳細資訊,請參閱 格式化 DateTime 值。
屬性類型
數據表服務支援 OData 通訊協定規格所定義的數據類型子集。 下表顯示表格服務所支援的屬性類型:
OData 資料類型 | Common Language Runtime 類型 | 詳細資料 |
---|---|---|
Edm.Binary |
byte[] |
大小上限為 64 KiB 的位元組陣列。 |
Edm.Boolean |
bool |
Boolean 值。 |
Edm.DateTime |
DateTime |
以國際標準時間 (UTC) 表示的 64 位元值。 支援的 DateTime 範圍是從西元 1601 年 1 月 1 日午夜 12 點 (C.E.) UTC.開始。 此範圍結束於 9999 年 12 月 31 日。 如需詳細資訊,請參閱 格式化 DateTime 值。 |
Edm.Double |
double |
64 位元的浮點值。 |
Edm.Guid |
Guid |
128 位元的全域唯一識別碼。 |
Edm.Int32 |
Int32 或 int |
32 位元的整數。 |
Edm.Int64 |
Int64 或 long |
64 位元的整數。 |
Edm.String |
String |
UTF 16 編碼值。 字串值的大小上限為 64 KiB。 請注意,支援的字元數目上限約為 32 K 或更少。 |
根據預設,除非您指定不同的類型,否則屬性會以 String
類型建立。 若要明確輸入屬性,請使用插入 實體 或 更新實體 作業的適當 OData 數據類型來指定其數據類型。 如需詳細資訊,請參閱 插入和更新實體。
數據表服務不會保存 null
屬性的值。 查詢實體時,上述屬性類型都是不可為 Null 的。 寫入實體時,上述屬性類型都是可為 Null 的,而且任何具有 null
值的屬性都會處理,就像承載未包含該屬性一樣。
如需示範如何篩選查詢要求 URI 中各種屬性類型的範例,請參閱 查詢數據表和實體。