Architecture Oracle : Les tables


précédentsommairesuivant

Remerciements

Chaleureux remerciements à Developpez.com, l'équipe SGBD en général et Pomalaix et Anomaly en particulier.

Généralités

Les tables sont l'unité de stockage fondamentale d'une base de données Oracle.
Une table est composée de lignes elle-mêmes composées de colonnes.

Les types de tables

Oracle supporte trois types de tables :

  • Les tables relationnelles (*)
  • Les tables objets
  • Les tables XML

Chacun de ces types de tables peut être défini de façon permanente ou temporaire.

Les tables relationnelles peuvent avoir une organisation de type tas (heap) ou de type index (index organized).


remarque : depuis la version 9i, un quatrième type de table est supporté, uniquement en lecture (SELECT) : les tables externes, dont seule la définition de structure est stockée dans la base.

(*) au terme relationnel, je préfère celui de "standard", considérant que toute table pouvant être l'objet d'une jointure dans une interrogation est de facto relationnelle, ce qui est le cas des autres types de tables.

Attributs de colonne

Chaque colonne d'une table est définie avec une ou plusieurs des caractéristiques suivantes :

  • Un type définissant la nature de la donnée devant y être stockée ainsi qu'une valeur indiquant la taille maximum permise pour cette donnée
  • Une contrainte déterminant la validité de la donnée. Certaines contraintes peuvent être définies au niveau de la colonne et d'autres au niveau de la table
  • Une valeur par défaut attribuée automatiquement à l'insertion de la nouvelle ligne

Les types de données

Chaque colonne d'une table comme chaque argument d'une procédure doit être définie avec un type. Ce type détermine le domaine des valeurs que la colonne pourra stocker.

Le tableau suivant liste les divers types Oracle

Type Description
VARCHAR2(taille [BYTE | CHAR ]) Chaîne de caractères de longueur variable dont la longueur maximum est exprimée par le paramètre taille en octets ou en caractères. La taille maximum est de 4000 octets et la taille minimum est de 1 octet ou 1 caractère. Le paramètre taille est obligatoire.BYTE indique que l'élément de base est l'octet et CHAR indique que l'élément de base est le caractère. (rappelons que certains jeux de caractères stockent chaque caractère sur plusieurs octets)
NVARCHAR2(size) Chaîne de caractères de longueur variable. La valeur maximum du paramètre taille est déterminée par le nombre d'octet utilisé par un caractère du jeu national et ne peut excéder 4000 octets
NUMBER[(p[,s])] Numérique de longueur totale p dont une partie décimale de s chiffres significatifs
LONG Donnée de type caractère pouvant stocker jusqu'à 2 gigabytes
DATE Donnée de type date située dans une plage comprise entre le 1er janvier 4712 av JC et le 31 décembre 9999 ap JC stockant l'année, mois, jour, heures, minutes et secondes
TIMESTAMP( fractional_seconds_precision) Donnée de type date stockant l'année, le mois, le jour, l'heure, les minutes, les secondes et les fractions de secondes dont le nombre de chiffres est exprimé par le paramètre (fractional_seconds_precision) Ce chiffre peut être compris entre 0 et 9 (par défaut 6)
TIMESTAMP( fractional_seconds_precision) WITH TIME ZONE Identique au type TIMESTAMP avec une information supplémentaire de fuseau horaire
TIMESTAMP( fractional_seconds_precision) WITH LOCAL TIME ZONE Identique au précédent avec les particularités suivantes :la date est stockée avec le fuseau horaire de la base. A l'interrogation elle est retournée dans le fuseau horaire de la session utilisateur
INTERVAL YEAR(year_precision) TO MONTH Période de temps exprimée en années et mois ou le paramètre year_precision indique le nombre de chiffres du champ année compris entre 0 et 9. la valeur défaut est 2
INTERVAL DAY(day_precision) TO SECOND (fractional_seconds_precision) Période de temps exprimée enjours, heures, minutes et secondes ou :day_precision représente le nombre maximum de chiffres du champ jour, compris entre 0 et 9 (défaut 2)fractionfractional_seconds_precision représente le nombre maximum de chiffres du champ secondes compris entre 0 et 9 (défaut 6)
RAW(size) Chaîne de caractères au format binaire dont la longueur est indiquée par le paramètre obligatoire size, qui ne peut excéder 2000 octets
LONG RAW Chaîne de caractères au format binaire pouvant stocker jusqu'à 2 gigaoctets
ROWID Chaîne de caractères codée en base 64 représentant l'adresse physique unique d'une ligne dans sa table
UROWID[(size)] Chaîne de caractères codée en base 64 représentant l'adresse physique ou logique d'une ligne dans une table régulière ou organisée en index. le paramètre optionnel size représente la taille de la colonne dont le maximum autorisé est 4000 octets
CHAR[(size [BYTE | CHAR])] Chaîne de caractères de longueur fixe déterminée par le paramètre size et dont le minimum est de 1 octet et le maximum de 2000 octets. Cette chaîne de caractères est complétée par des espaces
NCHAR(size) Chaîne de caractères de longueur fixe déterminée par le paramètre size et dont le minimum est de 1 octet et le maximum de 2000 octets. Cette chaîne de caractères est complétée par des espaces et stocke des caractères du jeu national
CLOB Chaîne composée de caractères mono-octet ou multi-octets dont la capacité maximum de stockage est de 4 gigaoctets (9i) et 8 teraoctets (10g)
NCLOB Chaîne composée de caractères au format Unicode mono-octet ou multi-octets dont la capacité maximum de stockage est de 4 gigaoctets (9i) et 8 teraoctets (10g)
BLOB Chaîne d'éléments au format binaire dont la capacité de stockage maximum est de 4 gigaoctets (9i) et 8 teraoctets (10g)
BFILE Pointeur vers un fichier stocké en dehors de la base
XMLType Colonne contenant des données au format XML
UriType Colonne contenant une URL



Contrainte de colonne NOT NULL

Cette contrainte permet de s'assurer que la colonne contiendra toujours une valeur autre que NULL pendant l'insertion ou la mise à jour d'une ligne de la table. Contrairement aux autres contraintes qui peuvent être définies au niveau table (out of line constraint), la contrainte NOT NULL ne peut être définie qu'au niveau colonne (in line constraint).

Une contrainte PRIMARY KEY ajoute automatiquement la contrainte NOT NULL sur la ou les colonnes inclues dans la clé primaire.

Valeur par défaut

La définition d'une valeur par défaut sur une colonne permet d'assigner automatiquement cette valeur lors d'une insertion lorsque aucune valeur n'est indiquée pour cette colonne dans l'ordre d'insertion.



Les contraintes de niveau table

A l'exception de la contrainte NOT NULL, les autres contraintes peuvent être définies au niveau table (c'est à dire après la définition des colonnes) dont voici la liste :

Primary Key
Cette contrainte définie sur une ou plusieurs colonnes permet de s'assurer que le contenu de cette ou ces colonnes est unique et non NULL dans toute la table. En d'autres termes, cette contrainte garantit l'absence de doublon concernant les données stockées dans cette ou ces colonnes et permet de définir un identifiant unique pour la ligne.

Unique Key
Cette contrainte définie sur une ou plusieurs colonnes garantit l'unicité des informations stockées dans cette ou ces colonnes.

Check
Cette contrainte définie sur une ou plusieurs colonnes permet de valider la donnée que l'on veut stocker en vérifiant qu'elle satisfait une condition.

Foreign
Cette contrainte permet de s'assurer que l'enregistrement dans une table "enfants" ne peut se faire que si les clés existent dans la table "parents".

Ces contraintes peuvent être créées et dans la plupart des cas modifiées, activées (enable) ou désactivées (disable), déclenchées dès l'exécution de l'instruction (immediate) ou à la fin de la transaction (deferred).



Attributs de stockage

Lorsque vous demandez la création d'une table dans un tablespace géré localement (depuis Oracle 9i), Oracle utilise ses propres algorithmes de stockage.
Dans le cas où cette création s'effectue dans un tablespace géré par le dictionnaire (toutes versions Oracle), vous pouvez définir vos propres paramètres de stockage.

Attention : Ne créez jamais de table dans les schémas SYS et SYSTEM


Localisation d'une table

Avec les privilèges et les quotas suffisants, vous pouvez créer une table dans n'importe quel tablespace en ligne (ONLINE) avec la clause TABLESPACE de l'instruction CREATE TABLE. Si cette clause n'est pas spécifiée, la table sera créée dans le tablespace par défaut (attribué à la création de votre compte (CREATE USER) ou au pire, défini dans les paramètres d'initialisation de la base).

Dans le cas d'une création de table définie à l'aide d'une sous-requête (CREATE TABLE ? AS SELECT), vous pouvez utiliser l'option de parallélisme permettant à plusieurs processus de participer à la création ainsi que l'option NOLOGGING afin de limiter les entrées dans les redo log files.


Restrictions liées à la création d'une table :

  • Les tables contenant des objets ne peuvent pas être importées dans une base antérieure à la version 8.
  • Vous ne pouvez pas déplacer les types et les extents dans un schéma différent du schéma initial si les données liées existent toujours dans la base.
  • Vous ne pouvez pas fusionner une table exportée dans une table existante qui porte le même nom dans un schéma différent.
  • Vous ne pouvez pas dépasser le nombre maximum de colonnes (1000) dans une table ainsi que le nombre maximum d'attributs dans un type objet.

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Le guide Oracle par Orafrance, Helyos et SheikYerbouti