Données et Indexs

Les Tables

Les tables sont des segments physiques. Elles contiennent les données utilisateur. Elles sont composées de colonnes typées. Elles présentent des contraintes d’intégrite (unique, clé primaire, clé étrangère, ‘check’).
Décrites dans le dictionnaire dans USER_TABLES, ALL_TABLES et DBA_TABLES.

exemple

SQL> CREATE TABLE salaires
( no_emp NUMBER , salaire NUMBER)
TABLESPACE USERS
STORAGE (INITIAL 50K NEXT 50K MINEXTENTS 1 MAXEXTENTS 25 PCTINCREASE 0)

SQL> describe salaires
Name Null? Type
——————————- ——– —-
NO_EMP NUMBER
SALAIRE NUMBER

on peut vérifier les caractéristiques de la table dans le dictionnaire par une commande SQl ou avec des outils graphiques comme Enterprise Manager ou SQLDeveloper :

SQL> select TABLE_NAME, TABLESPACE_NAME, INITIAL_EXTENT,
NEXT_EXTENT, BLOCKS from user_tables
where TABLE_NAME=’SALAIRES’

TABLE_NAME TABLESPACE_NAME INITIAL_EXTENT     NEXT_EXTENT     BLOCKS
----------     ---------------        --------------    -----------    ------
SALAIRES    USERS                  53248              53248

em_table_emp

Il peut être judicieux comme ici de préciser la clause STORAGE au niveau de chaque table plutôt qu’au niveau du tablespace, les volumes pouvant être très différents d’une table à l’autre….

SQL> CREATE TABLE mini_emp (empno NUMBER CONSTRAINT pk_emp PRIMARY KEY,
ename VARCHAR2(10) CONSTRAINT upper_ename CHECK (ename = UPPER(ename)),
hiredate DATE DEFAULT SYSDATE,
deptno NUMBER(2) CONSTRAINT fk_deptno REFERENCES scott.dept(deptno) )

on voit ici un certain nombre de contraintes d’intégrité qui faciliteront les développements

Les clusters

Les clusters sont des segments spéciaux qui contiennent plusieurs tables fusionnées, suivant en général une colonne de jointure. On peut les voir comme des jointures physiques.

rem : un certain nombre de tables du dictionnaire sont organisées en cluster.
Voir dba_clusters

Les indexs

Ce sont des accélérateurs, externes aux tables. Peuvent être créés / détruits à tout moment. Se remplissent dynamiquement au fur et à mesure des mises à jour de la table indexée. Organisés en B-TREE. Description dans dba_indexes.

On peut créer autant d’index qu’on veut sur une table (mais il ne faut pas en abuser…)

rem : un index n’est efficace que si la colonne indexée est utilisée dans la clause WHERE d’un SELECT !!

SQL> create [unique] index i1 on t1(col1)

rem : un index peut ne pas être unique. Une clé primaire dans une table est représentée sous forme d’index unique par Oracle (qui lui donne alors un nom ‘technique’ commencant par ‘SYS’.

exemple de requete sur le dictionnaire :

sql> select index_name, index_type,
table_name, uniqueness
from user_indexes

INDEX_NAME INDEX_TYPE TABLE_NAME UNIQUENES
SYS_C00178427 NORMAL T_TEST UNIQUE
SYS_C00178434 NORMAL T1 UNIQUE
PK1 NORMAL EMP UNIQUE
I_EMP_DEPTNO NORMAL EMP

Toutes les informations concernant les tables (description, paramètres de stockage, contraintes, index, …) peuvent être visualisées dans la console :  Onglet ‘Administration’, rubrique ‘Schema’, Table / Visualiser Table

NONUNIQUE