Partie I
SQL de base
58
© Éditions Eyrolles
Contraintes côté « fils »
Indépendamment de l’écriture de la table « père », plusieurs écritures sont possibles au niveau
de la table « fils » selon qu’on créé les index ou qu’on laisse MySQL le faire, et selon qu’on
nomme ou pas la contrainte de clé étrangère.
La première écriture nomme la contrainte, mais ne précise rien à propos de l’index. La
deuxième ne nomme pas la contrainte, mais définit l’index (sans option toutefois). L’écriture
à adopter est un mélange des deux, à savoir nommer les contraintes et décrire les index.
Clés composites et nulles
Les clés étrangères ou primaires peuvent être définies sur plusieurs colonnes (16 au maximum), on parle de composite keys.
Des clés étrangères peuvent être nulles (si elles ne font pas partie d’une clé primaire) si
aucune contrainte NOT NULL n’est déclarée.
Décrivons à présent le script SQL qui convient à notre exemple (la syntaxe de création des
deux premières tables a été discutée plus haut) et étudions ensuite les mécanismes programmés par ces contraintes. Décidons qu’un avion aura toujours un propriétaire (NOT NULL).
Tableau 2-13 Écritures des contraintes de la table « père »
Clé primaire
Clé candidate
CREATE TABLE Compagnie
(comp CHAR(4), nrue INTEGER(3),
rue CHAR(20), ville CHAR(15),
nomComp CHAR(15),
CONSTRAINT pk_Compagnie PRIMARY
KEY(comp));
CREATE TABLE Compagnie
(comp CHAR(4) NOT NULL, nrue INTEGER(3),
rue CHAR(20), ville CHAR(15),
nomComp CHAR(15),
CONSTRAINT un_Compagnie UNIQUE(comp),
CONSTRAINT pk_Compagnie PRIMARY
KEY(nomComp));
Tableau 2-14 Écritures des contraintes de la table « fils »
Contrainte nommée sans index
Contrainte pas nommée et index
CREATE TABLE Pilote
(brevet CHAR(6), nom CHAR(15),
nbHVol DECIMAL(7,2), compa CHAR(4),
CONSTRAINT pk_Pilote
PRIMARY KEY(brevet),
CONSTRAINT fk_Pil_compa_Comp
FOREIGN KEY (compa)
REFERENCES Compagnie(comp));
CREATE TABLE Pilote
(brevet CHAR(6), nom CHAR(15),
nbHVol DECIMAL(7,2), compa CHAR(4),
CONSTRAINT pk_Pilote
PRIMARY KEY(brevet),
INDEX (compa),
FOREIGN KEY (compa) REFERENCES
Compagnie(comp));
Précédent

- 80/418

Suivant