Notez qu'il n'était pas possible de mettre la contrainte NOT NULL à la création de la colonne, puisque tant que l'on n'avait pas
rempli espece_id , elle contenait NULL pour toutes les lignes.
Voilà, nos deux tables sont maintenant prêtes. Mais avant de vous lâcher dans l'univers merveilleux des jointures et des sousrequêtes, nous allons encore compliquer un peu les choses. Parce que c'est bien joli pour un éleveur de pouvoir reconnaître un
chien d'un chat, mais il serait de bon ton de reconnaître également un berger allemand d'un teckel, non ?
Par conséquent, nous allons encore ajouter deux choses à notre base. D'une part, nous allons ajouter une table Race, basée sur
le même schéma que la table Espece. Il faudra également ajouter une colonne à la table Animal, qui contiendra l'id de la race de
l'animal. Contrairement à la colonne espece_id , celle-ci pourra être NULL. Il n'est pas impossible que nous accueillions des
bâtards, ou que certaines espèces que nous élevons ne soient pas classées en plusieurs races différentes.
Ensuite, nous allons garder une trace du pedigree de nos animaux. Pour ce faire, il faut pouvoir connaître ses parents. Donc,
nous ajouterons deux colonnes à la table Animal : pere_id et mere_id , qui contiendront respectivement l'id du père et l'id de la
mère de l'animal.
Ce sont toutes des commandes que vous connaissez, donc je ne détaille pas plus.
Code : SQL
-- --------------------------- CREATION DE LA TABLE Race
-- -------------------------CREATE TABLE Race (
id SMALLINT UNSIGNED AUTO_INCREMENT,
nom VARCHAR(40) NOT NULL,
espece_id SMALLINT UNSIGNED NOT NULL,
-- pas de nom latin,
mais une référence vers l'espèce
description TEXT,
PRIMARY KEY(id),
CONSTRAINT fk_race_espece_id FOREIGN KEY (espece_id) REFERENCES
Espece(id) -- pour assurer l'intégrité de la référence
)
ENGINE = InnoDB;
-- ------------------------ REMPLISSAGE DE LA TABLE
-- ----------------------INSERT INTO Race (nom, espece_id, description)
VALUES ('Berger allemand', 1, 'Chien sportif et élégant au pelage
dense, noir-marron-fauve, noir ou gris.'),
('Berger blanc suisse', 1, 'Petit chien au corps compact, avec des
pattes courtes mais bien proportionnées et au pelage tricolore ou
bicolore.'),
('Boxer', 1, 'Chien de taille moyenne, au poil ras de couleur fauve
ou bringé avec quelques marques blanches.'),
('Bleu russe', 2, 'Chat aux yeux verts et à la robe épaisse et
argentée.'),
('Maine coon', 2, 'Chat de grande taille, à poils mi-longs.'),
('Singapura', 2, 'Chat de petite taille aux grands yeux en
amandes.'),
('Sphynx', 2, 'Chat sans poils.');
-- ---------------------------------------------- AJOUT DE LA COLONNE race_id A LA TABLE Animal
-- --------------------------------------------ALTER TABLE Animal ADD COLUMN race_id SMALLINT UNSIGNED;
ALTER TABLE Animal
ADD CONSTRAINT fk_race_id FOREIGN KEY (race_id) REFERENCES Race(id);
-- -------------------------- REMPLISSAGE DE LA COLONNE
-- ------------------------UPDATE Animal SET race_id = 1 WHERE id IN (1, 13, 20, 18, 22, 25,
26, 28);
Partie 2 : Index, jointures et sous-requêtes
96/414
www.openclassrooms.com
rempli espece_id , elle contenait NULL pour toutes les lignes.
Voilà, nos deux tables sont maintenant prêtes. Mais avant de vous lâcher dans l'univers merveilleux des jointures et des sousrequêtes, nous allons encore compliquer un peu les choses. Parce que c'est bien joli pour un éleveur de pouvoir reconnaître un
chien d'un chat, mais il serait de bon ton de reconnaître également un berger allemand d'un teckel, non ?
Par conséquent, nous allons encore ajouter deux choses à notre base. D'une part, nous allons ajouter une table Race, basée sur
le même schéma que la table Espece. Il faudra également ajouter une colonne à la table Animal, qui contiendra l'id de la race de
l'animal. Contrairement à la colonne espece_id , celle-ci pourra être NULL. Il n'est pas impossible que nous accueillions des
bâtards, ou que certaines espèces que nous élevons ne soient pas classées en plusieurs races différentes.
Ensuite, nous allons garder une trace du pedigree de nos animaux. Pour ce faire, il faut pouvoir connaître ses parents. Donc,
nous ajouterons deux colonnes à la table Animal : pere_id et mere_id , qui contiendront respectivement l'id du père et l'id de la
mère de l'animal.
Ce sont toutes des commandes que vous connaissez, donc je ne détaille pas plus.
Code : SQL
-- --------------------------- CREATION DE LA TABLE Race
-- -------------------------CREATE TABLE Race (
id SMALLINT UNSIGNED AUTO_INCREMENT,
nom VARCHAR(40) NOT NULL,
espece_id SMALLINT UNSIGNED NOT NULL,
-- pas de nom latin,
mais une référence vers l'espèce
description TEXT,
PRIMARY KEY(id),
CONSTRAINT fk_race_espece_id FOREIGN KEY (espece_id) REFERENCES
Espece(id) -- pour assurer l'intégrité de la référence
)
ENGINE = InnoDB;
-- ------------------------ REMPLISSAGE DE LA TABLE
-- ----------------------INSERT INTO Race (nom, espece_id, description)
VALUES ('Berger allemand', 1, 'Chien sportif et élégant au pelage
dense, noir-marron-fauve, noir ou gris.'),
('Berger blanc suisse', 1, 'Petit chien au corps compact, avec des
pattes courtes mais bien proportionnées et au pelage tricolore ou
bicolore.'),
('Boxer', 1, 'Chien de taille moyenne, au poil ras de couleur fauve
ou bringé avec quelques marques blanches.'),
('Bleu russe', 2, 'Chat aux yeux verts et à la robe épaisse et
argentée.'),
('Maine coon', 2, 'Chat de grande taille, à poils mi-longs.'),
('Singapura', 2, 'Chat de petite taille aux grands yeux en
amandes.'),
('Sphynx', 2, 'Chat sans poils.');
-- ---------------------------------------------- AJOUT DE LA COLONNE race_id A LA TABLE Animal
-- --------------------------------------------ALTER TABLE Animal ADD COLUMN race_id SMALLINT UNSIGNED;
ALTER TABLE Animal
ADD CONSTRAINT fk_race_id FOREIGN KEY (race_id) REFERENCES Race(id);
-- -------------------------- REMPLISSAGE DE LA COLONNE
-- ------------------------UPDATE Animal SET race_id = 1 WHERE id IN (1, 13, 20, 18, 22, 25,
26, 28);
Partie 2 : Index, jointures et sous-requêtes
96/414
www.openclassrooms.com
