3.2 Rôles d’une colonne
35
© Dunod – La photocopie non autorisée est un délit.
la table. Toute table possède un identifiant primaire et un nombre quelconque (éventuellement nul) d’identifiants secondaires 6 . Ceci a pour conséquence importante que
les lignes d’une table sont distinctes, en accord avec la définition du contenu d’une
table comme un ensemble de lignes.
Remarque sur les identifiants. Tout ensemble de colonnes qui comprend un identifiant est encore un identifiant : (NUMF, NOMF) est un identifiant de FOURNISSEUR. Un identifiant dont on ne peut retirer aucun composant sans qu’il perde sa
qualité d’identifiant est appelé identifiant minimal. Il est évident qu’on cherchera à
ne définir que des identifiants minimaux.
Remarque sur les clés étrangères. Bien que, théoriquement, la cible d’une clé
étrangère soit l’un des identifiants de la table référencée, on convient de se limiter à
l’identifiant primaire.
3.2.6 Les contraintes référentielles
Une valeur d’une clé étrangère constituée de la colonne RA d’une table B (ou, étant
donné l’existence d’identifiants multicomposants, constituée d’un groupe de
colonnes de référence) est destinée à désigner une ligne d’une table A. Concrètement, on peut imposer que pour toute valeur de RA dans B, il y ait une ligne de la
table A identifiée par cette valeur. On en déduit une propriété très importante,
dénommée contrainte référentielle. Celle-ci stipule que l’ensemble des valeurs
d’une clé étrangère est à tout instant une partie de l’ensemble des valeurs de l’identifiant primaire de la table référencée. On imposerait par exemple que toute valeur de
NUMPL dans OFFRE soit présente dans la colonne NUMP de PIECE (ce qu’on
notera OFFRE.NUMPL ⊆ PIECE.NUMFL), et que toute valeur de NUMFL dans
OFFRE se retrouve comme valeur NUMF de la table FOURNISSEUR. Il est donc
interdit d’introduire dans la table OFFRE une ligne telle que (NUMFL:93, NUMPL:57,
PRIX:32), puisqu’il n’existe dans FOURNISSEUR aucune ligne dont l’identifiant
primaire NUMF ait la valeur 93.
3.2.7 Les colonnes facultatives
Il se peut qu’une information ne soit pas connue au moment où on introduit la
description d’une entité ou d’un fait dans une table. Par exemple, on apprend que le
fournisseur 259 offre désormais des pièces 15, mais on n’en connaît pas encore le
prix. On admet alors d’introduire dans la table OFFRE la ligne incomplète suivante :
4. Selon la terminologie standard, clé primaire ou primary key.
5. Le terme de secondaire n’est pas standard. La littérature utilisera le terme de clés candidates
pour désigner tous les identifiants d’une table. Un identifiant secondaire est donc une clé candidate non primaire.
6. En conformité avec les recommandations énoncées dans [Codd, 1990] et [Date, 1992], on s’en
tiendra à des structures de tables avec identifiants. Signalons cependant que le langage SQL, que
nous étudierons dans la suite, permet de définir des tables sans identifiants, possibilité que nous
ignorerons ici.
35
© Dunod – La photocopie non autorisée est un délit.
la table. Toute table possède un identifiant primaire et un nombre quelconque (éventuellement nul) d’identifiants secondaires 6 . Ceci a pour conséquence importante que
les lignes d’une table sont distinctes, en accord avec la définition du contenu d’une
table comme un ensemble de lignes.
Remarque sur les identifiants. Tout ensemble de colonnes qui comprend un identifiant est encore un identifiant : (NUMF, NOMF) est un identifiant de FOURNISSEUR. Un identifiant dont on ne peut retirer aucun composant sans qu’il perde sa
qualité d’identifiant est appelé identifiant minimal. Il est évident qu’on cherchera à
ne définir que des identifiants minimaux.
Remarque sur les clés étrangères. Bien que, théoriquement, la cible d’une clé
étrangère soit l’un des identifiants de la table référencée, on convient de se limiter à
l’identifiant primaire.
3.2.6 Les contraintes référentielles
Une valeur d’une clé étrangère constituée de la colonne RA d’une table B (ou, étant
donné l’existence d’identifiants multicomposants, constituée d’un groupe de
colonnes de référence) est destinée à désigner une ligne d’une table A. Concrètement, on peut imposer que pour toute valeur de RA dans B, il y ait une ligne de la
table A identifiée par cette valeur. On en déduit une propriété très importante,
dénommée contrainte référentielle. Celle-ci stipule que l’ensemble des valeurs
d’une clé étrangère est à tout instant une partie de l’ensemble des valeurs de l’identifiant primaire de la table référencée. On imposerait par exemple que toute valeur de
NUMPL dans OFFRE soit présente dans la colonne NUMP de PIECE (ce qu’on
notera OFFRE.NUMPL ⊆ PIECE.NUMFL), et que toute valeur de NUMFL dans
OFFRE se retrouve comme valeur NUMF de la table FOURNISSEUR. Il est donc
interdit d’introduire dans la table OFFRE une ligne telle que (NUMFL:93, NUMPL:57,
PRIX:32), puisqu’il n’existe dans FOURNISSEUR aucune ligne dont l’identifiant
primaire NUMF ait la valeur 93.
3.2.7 Les colonnes facultatives
Il se peut qu’une information ne soit pas connue au moment où on introduit la
description d’une entité ou d’un fait dans une table. Par exemple, on apprend que le
fournisseur 259 offre désormais des pièces 15, mais on n’en connaît pas encore le
prix. On admet alors d’introduire dans la table OFFRE la ligne incomplète suivante :
4. Selon la terminologie standard, clé primaire ou primary key.
5. Le terme de secondaire n’est pas standard. La littérature utilisera le terme de clés candidates
pour désigner tous les identifiants d’une table. Un identifiant secondaire est donc une clé candidate non primaire.
6. En conformité avec les recommandations énoncées dans [Codd, 1990] et [Date, 1992], on s’en
tiendra à des structures de tables avec identifiants. Signalons cependant que le langage SQL, que
nous étudierons dans la suite, permet de définir des tables sans identifiants, possibilité que nous
ignorerons ici.
