148
Chapitre 6 • SQL avancé
a) Principes d'un dictionnaire de données
Tout SGBD relationnel gère, outre les tables définies par les utilisateurs, un
ensemble de tables standard dont le contenu décrit tous les objets qui ont été déclarés
par les utilisateurs et l’administrateur 15 de la base de données. En particulier, ces
tables permettent de savoir quelles tables ont été définies et renseignent sur la
définition de leurs colonnes, des index, des privilèges (y compris les mots de passe),
les utilisateurs eux-mêmes ainsi que les programmes qui utilisent la base de données.
Ces informations étant rangées dans des tables SQL ordinaires, il est possible à
l'utilisateur qui en a l'autorisation de consulter leur contenu.
Ces tables constituent ce qu'on appelle un dictionnaire de données. Elles sont
utilisées par le SGBD SQL, qui peut ainsi vérifier la validité des requêtes, les
traduire en algorithmes efficaces et les exécuter. Ces tables seront également utilisées lors de l'exécution d'un programme, afin de vérifier que la structure de la base
de données n'a pas été modifiée depuis la compilation du programme (et, le cas
échéant, recompiler automatiquement le programme) et d'effectuer un contrôle
d’accès.
b) Les tables du catalogue
Le dictionnaire de données que nous venons de décrire, ou catalogue du système,
contient plusieurs dizaines de tables, dont le nombre, le nom, la composition et
l'interprétation sont susceptibles de varier selon les SGBD et selon les versions.
Les deux tables les plus importantes sont certainement la table des tables et la
table des colonnes. La première (que nous appellerons SYS_TABLE) nous
renseigne sur les tables qui constituent la base de données tandis que la seconde
(SYS_COLUMN) décrit leurs colonnes (figure 6.1). Nous décrirons brièvement la
composition de ces deux tables 16 .
Chaque ligne de SYS_TABLE décrit une des tables de la base de données. Elle en
spécifie le nom (TNAME), le créateur et propriétaire (CREATOR) et le type
(TTYPE), qui est réel (R) ou vue (V).
La table SYS_COLUMN indique pour chaque colonne de la base de données le
nom de sa table (TNAME), son propre nom (CNAME), le type de ses valeurs
(CTYPE), leur longueur (LEN1), le nombre de décimales (LEN2) ainsi que son
caractère obligatoire (NULLS = N) ou facultatif (NULLS = Y). Ces tables comportent
d'autres colonnes qui ne présentent pas d'intérêt dans une présentation introductive.
On observera que ces deux tables décrivent non seulement les tables et colonnes
des utilisateurs, mais aussi celles du catalogue (y compris SYS_TABLE et
15. Un administrateur d’une base de données destinée à desservir une communauté d’utilisateurs
est le responsable de la création, du bon fonctionnement de la base de données et de la qualité des
données. C’est lui qui est chargé, entre autres choses, de la gestion des privilèges et de l’évolution de la base de données.
16. Le script de création des quatre tables du catalogue en InterBase est disponible sur le site de
l’ouvrage. Ce catalogue est évidemment fictif.
Chapitre 6 • SQL avancé
a) Principes d'un dictionnaire de données
Tout SGBD relationnel gère, outre les tables définies par les utilisateurs, un
ensemble de tables standard dont le contenu décrit tous les objets qui ont été déclarés
par les utilisateurs et l’administrateur 15 de la base de données. En particulier, ces
tables permettent de savoir quelles tables ont été définies et renseignent sur la
définition de leurs colonnes, des index, des privilèges (y compris les mots de passe),
les utilisateurs eux-mêmes ainsi que les programmes qui utilisent la base de données.
Ces informations étant rangées dans des tables SQL ordinaires, il est possible à
l'utilisateur qui en a l'autorisation de consulter leur contenu.
Ces tables constituent ce qu'on appelle un dictionnaire de données. Elles sont
utilisées par le SGBD SQL, qui peut ainsi vérifier la validité des requêtes, les
traduire en algorithmes efficaces et les exécuter. Ces tables seront également utilisées lors de l'exécution d'un programme, afin de vérifier que la structure de la base
de données n'a pas été modifiée depuis la compilation du programme (et, le cas
échéant, recompiler automatiquement le programme) et d'effectuer un contrôle
d’accès.
b) Les tables du catalogue
Le dictionnaire de données que nous venons de décrire, ou catalogue du système,
contient plusieurs dizaines de tables, dont le nombre, le nom, la composition et
l'interprétation sont susceptibles de varier selon les SGBD et selon les versions.
Les deux tables les plus importantes sont certainement la table des tables et la
table des colonnes. La première (que nous appellerons SYS_TABLE) nous
renseigne sur les tables qui constituent la base de données tandis que la seconde
(SYS_COLUMN) décrit leurs colonnes (figure 6.1). Nous décrirons brièvement la
composition de ces deux tables 16 .
Chaque ligne de SYS_TABLE décrit une des tables de la base de données. Elle en
spécifie le nom (TNAME), le créateur et propriétaire (CREATOR) et le type
(TTYPE), qui est réel (R) ou vue (V).
La table SYS_COLUMN indique pour chaque colonne de la base de données le
nom de sa table (TNAME), son propre nom (CNAME), le type de ses valeurs
(CTYPE), leur longueur (LEN1), le nombre de décimales (LEN2) ainsi que son
caractère obligatoire (NULLS = N) ou facultatif (NULLS = Y). Ces tables comportent
d'autres colonnes qui ne présentent pas d'intérêt dans une présentation introductive.
On observera que ces deux tables décrivent non seulement les tables et colonnes
des utilisateurs, mais aussi celles du catalogue (y compris SYS_TABLE et
15. Un administrateur d’une base de données destinée à desservir une communauté d’utilisateurs
est le responsable de la création, du bon fonctionnement de la base de données et de la qualité des
données. C’est lui qui est chargé, entre autres choses, de la gestion des privilèges et de l’évolution de la base de données.
16. Le script de création des quatre tables du catalogue en InterBase est disponible sur le site de
l’ouvrage. Ce catalogue est évidemment fictif.
