© Éditions Eyrolles
59
chapitre n° 2
Manipulation des données
CREATE TABLE Avion
(immat CHAR(6), typeAvion CHAR(15), nbhVol DECIMAL(10,2),
proprio CHAR(4) NOT NULL, CONSTRAINT pk_Avion PRIMARY KEY(immat),
INDEX (proprio),
CONSTRAINT fk_Avion_comp_Compag
FOREIGN KEY(proprio) REFERENCES Compagnie(comp));
CREATE TABLE Affreter
(compAff CHAR(4), immat CHAR(6), dateAff DATE, nbPax INTEGER(3),
CONSTRAINT pk_Affreter PRIMARY KEY (compAff, immat, dateAff),
INDEX (immat),
CONSTRAINT fk_Aff_na_Avion
FOREIGN KEY(immat) REFERENCES Avion(immat),
INDEX (compAff),
CONSTRAINT fk_Aff_comp_Compag
FOREIGN KEY(compAff) REFERENCES Compagnie(comp));
Cohérence du fils vers le père
Si la clé étrangère est déclarée NOT NULL, l’insertion d’un enregistrement « fils » n’est possible
que s’il est rattaché à un enregistrement « père » existant. Dans le cas inverse, l’insertion d’un
enregistrement « fils » rattaché à aucun « père » est possible.
Le tableau suivant décrit des insertions correctes et une incorrecte. Le message d’erreur est ici
en anglais (il y est question de ne pouvoir ajouter un enregistrement « fils »).
Pour insérer un affrètement, il faut donc avoir ajouté au préalable au moins une compagnie et
un avion. Le chargement de la base de données est conditionné par la hiérarchie des contraintes référentielles. Ici il faut insérer d’abord les compagnies, puis les pilotes (ou les avions),
enfin les affrètements.
Tableau 2-15 Insertions correctes et incorrectes
Insertions correctes
Insertion incorrecte
-- fils avec père
INSERT INTO Pilote VALUES
('PL-3', 'Paul Soutou', 1000, 'SING');
-- fils sans père
INSERT INTO Pilote VALUES
('PL-4', 'Un Connu', 0, NULL);
-- fils avec pères
INSERT INTO Avion VALUES
('F-WTSS', 'Concorde', 6570, 'SING');
INSERT INTO Affreter VALUES
('AF', 'F-WTSS', '15-05-2003', 82)
-- avec père inconnu
mysql> INSERT INTO Pilote VALUES
('PL-5', 'Pb de Compagnie', 0,
);
ERROR 1452 (23000): Cannot add or update
a child row: a foreign key constraint
fails (`bdsoutou/pilote`, CONSTRAINT
`fk_Pil_compa_Comp` FOREIGN KEY (`compa`)
REFERENCES `compagnie` (`comp`))
Web
'?'
Précédent

- 81/418

Suivant