Présentation du modèle de données du service de Table

Le service de Table offre un stockage structuré sous forme de tables. Les sections suivantes décrivent le modèle de données du service de Table.

Compte de stockage

Un compte de stockage est une entité globale unique au sein du système de stockage. Le compte de stockage est l’espace de noms parent pour le service Table et constitue la base de l’autorisation. Vous pouvez créer plusieurs tables dans un compte de stockage donné, mais chaque table doit avoir un nom unique.

Le compte de stockage doit toujours être spécifié dans l'URI de la demande. L'URI de base pour accéder au service de Table est de ce type :

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

Tables, entités et propriétés

Les tables stockent les données sous forme de collections d'entités. Les entités sont similaires aux lignes. Une entité possède une clé primaire et un ensemble de propriétés. Une propriété est un nom, une paire de valeur typée, semblable à une colonne.

Le service de Table n'applique pas de schéma de table, deux entités de la même table peuvent donc avoir différents ensembles de propriétés. Les développeurs peuvent choisir d'appliquer un schéma côté client. Une table peut contenir plusieurs entités.

Noms de tables

Les noms de table doivent respecter les règles suivantes :

  • ils doivent être uniques dans un compte ;

  • ils ne doivent contenir que des caractères alphanumériques ;

  • ils ne peuvent pas commencer par un caractère numérique ;

  • ils ne respectent pas la casse ;

  • ils doivent comprendre entre 3 et 63 caractères.

  • Certains noms de table sont réservés, y compris le nom « tables ». Si vous essayez de créer une table avec un nom réservé, vous obtenez le code d'erreur 404 (Requête incorrecte).

Ces règles sont également décrites par l’expression régulière « ^[A-Za-z][A-Za-z0-9]{2,62}$ ».

Les noms de table conservent la casse avec laquelle ils ont été créés, mais ne la respectent plus une fois qu'ils sont utilisés.

Noms de propriété

Les noms de propriété sont des chaînes sensibles à la casse comprenant jusqu'à 255 caractères. Les noms de propriétés doivent suivre les règles d’affectation de noms pour les identificateurs C#.

Notes

Certains identificateurs C# ne sont pas valides selon la spécification XML. Ces identificateurs ne peuvent pas être utilisés dans les noms de propriété, car ces derniers sont envoyés via une charge utile XML dans une requête sur le service de Table.

Important

Les noms de propriété sont transmis au service de Table dans une URL. Certains caractères doivent être encodés en pourcentage pour apparaître dans une URL, via UTF-8 (de préférence) ou MBCS. Cet encodage se produit automatiquement lorsque vous utilisez les bibliothèques clientes stockage Azure. Toutefois, il existe certains caractères non valides dans les chemins d'accès des URL même quand ils sont encodés. Ces caractères ne peuvent pas apparaître dans les noms de propriété. Les points de code tels que \uE000 sont valides dans les noms de fichier NTFS, mais ils constituent des caractères Unicode non valides et ne peuvent pas être utilisés. En outre, certains caractères ASCII ou Unicode, comme les caractères de contrôle (0x00 à 0x1F, \u0081, etc.), ne sont pas autorisés. Pour les règles régissant les chaînes Unicode dans HTTP/1.1, voir :

Notes

Depuis la version du 14/04/2009, le service de Table ne prend plus en charge le tiret (-) dans les noms de propriété.

Limitations de propriété

Une entité peut comprendre jusqu'à 255 propriétés, y compris 3 propriétés système décrites dans la section suivante. Par conséquent, l'utilisateur peut inclure jusqu'à 252 propriétés personnalisées, en plus des 3 propriétés système. La taille combinée de toutes les données dans les propriétés d’une entité ne peut pas dépasser 1 Mio.

Propriétés système

Une entité contient toujours les propriétés système suivantes :

  • Propriété PartitionKey

  • Propriété RowKey

  • Propriété Timestamp

Ces propriétés système sont automatiquement incluses pour chaque entité d'une table. Les noms de ces propriétés sont réservés et ne peuvent pas être modifiés. Le développeur est chargé d'insérer et de mettre à jour les valeurs de PartitionKey et RowKey. Le serveur gère la valeur de Timestamp, qui ne peut pas être modifiée.

Caractères non autorisés dans les champs de clé

Les caractères suivants ne sont pas autorisés dans les valeurs des propriétés PartitionKey et RowKey :

  • la barre oblique (/) ;

  • la barre oblique inverse (\) ;

  • le signe dièse (#) ;

  • le point d'interrogation (?).

  • les caractères de commande U+0000 à U+001F, notamment :

    • le caractère de tabulation horizontale (\t) ;
    • le caractère de nouvelle ligne (\n) ;
    • le caractère de retour chariot (\r) ;
  • les caractères de commande U+007F à U+009F.

Propriété PartitionKey

Les tables sont partitionnées pour prendre en charge l'équilibrage de charge entre les nœuds de stockage. Les entités d'une table sont organisées en partitions. Une partition est une plage consécutive d'entités possédant la même valeur de clé de partition. La clé de partition est l'identificateur unique de la partition dans une table donnée, spécifié par la propriété PartitionKey. La clé de partition constitue la première partie de la clé primaire d'une entité. La clé de partition peut avoir une valeur de chaîne d’une taille maximale de 1 Kio.

Vous devez inclure la propriété PartitionKey dans chaque opération d'insertion, de mise à jour et de suppression.

Propriété RowKey

La deuxième partie de la clé primaire est la clé de ligne, spécifiée par la propriété RowKey. La clé de ligne est un identificateur unique pour une entité dans une partition donnée. Les propriétés PartitionKey et RowKey identifient de manière unique chaque entité d'une table.

La clé de ligne est une valeur de chaîne pouvant atteindre 1 Kio.

Vous devez inclure la propriété RowKey dans chaque opération d'insertion, de mise à jour et de suppression.

Propriété Timestamp

La propriété Timestamp est une valeur DateTime gérée côté serveur pour enregistrer l'heure de dernière modification d'une entité. Le service de Table utilise la propriété Timestamp en interne pour fournir un accès concurrentiel optimiste. La valeur de la Timestamp propriété pour une entité avance chaque fois que l’entité est modifiée. Cette propriété ne doit pas être utilisée pour les opérations d'insertion ou de mise à jour (la valeur sera ignorée).

La Timestamp propriété doit être exprimée dans l’un des formats UTC ISO 8601 acceptés. Pour plus d’informations sur les formats UTC acceptés, consultez Mise en forme des valeurs DateTime.

Types de propriétés

Le service Table prend en charge un sous-ensemble de types de données définis par la spécification du protocole OData. Le tableau suivant indique les types de propriété pris en charge pour le service de Table :

Type de données OData Type CLR (Common Language Runtime) Détails
Edm.Binary byte[] Tableau d’octets d’une taille maximale de 64 Kio.
Edm.Boolean bool Valeur booléenne.
Edm.DateTime DateTime Valeur de 64 bits exprimée en temps universel coordonné (UTC). La période DateTime prise en charge commence à partir de 00 h 00 (minuit) le 1er janvier 1601 après J.-C. (C.E.), UTC. La plage se termine le 31 décembre 9999. Pour plus d’informations, consultez Mise en forme des valeurs DateTime.
Edm.Double double Valeur à virgule flottante de 64 bits.
Edm.Guid Guid Identificateur global unique de 128 bits.
Edm.Int32 Int32 ou int Nombre entier 32 bits.
Edm.Int64 Int64 ou long Nombre entier 64 bits.
Edm.String String Valeur encodée en UTF-16. Les valeurs de chaîne peuvent atteindre 64 Kio. Notez que le nombre maximal de caractères pris en charge est d’environ 32 Ko ou moins.

Par défaut une propriété est créée en tant que String, sauf si vous spécifiez un type différent. Pour taper explicitement une propriété, spécifiez son type de données à l’aide du type de données OData approprié pour une opération Insérer une entité ou Mettre à jour une entité . Pour plus d’informations, consultez Insertion et mise à jour d’entités.

Le service Table ne conserve pas les null valeurs des propriétés. Lors de l’interrogation d’entités, les types de propriétés ci-dessus ne peuvent pas tous être nullables. Lors de l’écriture d’entités, les types de propriétés ci-dessus peuvent tous avoir la valeur Null, et toute propriété avec une null valeur est gérée comme si la charge utile ne contenait pas cette propriété.

Pour obtenir des exemples qui montrent comment filtrer sur les différents types de propriétés dans un URI de requête, consultez Interrogation de tables et d’entités.

Voir aussi