Recensement
[45 min]
Soit le fichier CSV suivant :
1
"departement";"nbhabitants"
2
"01 - Ain";529378
3
"02 - Aisne";552320
4
"03 - Allier";357110
5
"04 - Alpes-de-Haute-Provence";144809
6
"05 - Hautes-Alpes";126636
7
"06 - Alpes-Maritimes";1022710
8
"07 - Ardèche";294522
9
"08 - Ardennes";299166
10
"09 - Ariège";142834
11
"10 - Aube";301388
Question
Établir un modèle relationnel et un code SQL permettant d'accueillir le contenu de ce fichier (on nommera la table dpt1
).
Solution
1
dpt1 (#numEtNom:string, population:integer)
1
CREATE TABLE dpt1 (
2
numEtNom VARCHAR PRIMARY KEY,
3
population INTEGER
4
) ;
Question
Implémenter ce modèle sous Postgres et importer le fichier CSV.
Solution
1
\copy dpt1 FROM dpt1.csv WITH DELIMITER AS ';' CSV HEADER
Question
En quelle forme normale est le modèle ? Normalisez le en 3NF (on nommera la table dpt2
).
Solution
Le modèle n'est pas en 1NF, le premier champ n'est pas atomique.
1
dpt2 (#num:string(2), nom:string, population:string) WITH nom KEY
1
CREATE TABLE dpt2 (
2
num VARCHAR(2) PRIMARY KEY,
3
nom VARCHAR UNIQUE NOT NULL,
4
population INTEGER
5
) ;
Question
Écrivez et exécuter la requête SQL permettant de migrer dpt1
dans dpt2
.
Indice
1
INSERT INTO dpt2 (...)
2
SELECT ...
3
FROM dpt1
Indice
Utiliser la fonction SUBSTR
.
Indice
Si vous avez défini #num
comme entier, vous aurez besoin de la fonction CAST(madonnée AS montype)
Solution
1
INSERT INTO dpt2 (num, nom, population)
2
SELECT SUBSTR(numEtNom,1,2), SUBSTR(numEtNom,6), population
3
FROM dpt1 ;
Question
Écrivez le programme PHP permettant d'afficher le contenu de la table normalisée, tel que présenté ci-dessous.