Recensement

[45 min]

Soit le fichier CSV suivant :

"departement";"nbhabitants"
"01 - Ain";529378
"02 - Aisne";552320
"03 - Allier";357110
"04 - Alpes-de-Haute-Provence";144809
"05 - Hautes-Alpes";126636
"06 - Alpes-Maritimes";1022710
"07 - Ardèche";294522
"08 - Ardennes";299166
"09 - Ariège";142834
"10 - Aube";301388
"11 - Aude";319611
"12 - Aveyron";277779
"13 - Bouches-du-Rhône";1861068
"14 - Calvados";663408
"15 - Cantal";157481
"16 - Charente";353608
"17 - Charente-Maritime";579187
"18 - Cher";325131
"19 - Corrèze";244260
"20 - Corse";267249
"21 - Côte-d'Or";521252
"22 - Côtes-d'Armor";565141
"23 - Creuse";130802
"24 - Dordogne";402404
"25 - Doubs";515319
"26 - Drôme";450732
"27 - Eure";557049
"28 - Eure-et-Loir";419392
"29 - Finistère";886342
"30 - Gard";638198
"31 - Haute-Garonne";1067372
"32 - Gers";179972
"33 - Gironde";1315380
"34 - Hérault";911542
"35 - Ille-et-Vilaine";893538
"36 - Indre";239893
"37 - Indre-et-Loire";568031
"38 - Isère";1116433
"39 - Jura";261922
"40 - Landes";340975
"41 - Loir-et-Cher";325393
"42 - Loire";744411
"43 - Haute-Loire";218112
"44 - Loire-Atlantique";1165231
"45 - Loiret";636867
"46 - Lot";167291
"47 - Lot-et-Garonne";317945
"48 - Lozère";78027
"49 - Maine-et-Loire";757130
"50 - Manche";498997
"51 - Marne";583101
"52 - Haute-Marne";204393
"53 - Mayenne";295572
"54 - Meurthe-et-Moselle";729996
"55 - Meuse";200331
"56 - Morbihan";670565
"57 - Moselle";1047562
"58 - Nièvre";233536
"59 - Nord";2597361
"60 - Oise";788341
"61 - Orne";302537
"62 - Pas-de-Calais";1469779
"63 - Puy-de-Dôme";620763
"64 - Pyrénées-Atlantiques";620763
"65 - Hautes-Pyrénées";231819
"66 - Pyrénées-Orientales";400817
"67 - Bas-Rhin";1042981
"68 - Haut-Rhin";720655
"69 - Rhône";1605847
"70 - Haute-Saône";239101
"71 - Saône-et-Loire";565174
"72 - Sarthe";545862
"73 - Savoie";385469
"74 - Haute-Savoie";649230
"75 - Paris";2147857
"76 - Seine-Maritime";1262482
"77 - Seine-et-Marne";1213846
"78 - Yvelines";1376171
"79 - Deux-Sèvres";358867
"80 - Somme";569634
"81 - Tarn";355784
"82 - Tarn-et-Garonne";213178
"83 - Var";921555
"84 - Vaucluse";510661
"85 - Vendée";559888
"86 - Vienne";412076
"87 - Haute-Vienne";364440
"88 - Vosges";395534
"89 - Yonne";345059
"90 - Territoire de Belfort";142098
"91 - Essonne";1149368
"92 - Hauts-de-Seine";1442907
"93 - Seine-Saint-Denis";1391245
"94 - Val-de-Marne";1236786
"95 - Val-d'Oise";1118046

Établir un modèle relationnel et un code SQL permettant d'accueillir le contenu de ce fichier (on nommera la table dpt1).

dpt1 (#numEtNom:string, population:integer)
CREATE TABLE dpt1 (
  numEtNom VARCHAR PRIMARY KEY,
  population INTEGER
) ;

Implémenter ce modèle sous Postgres et importer le fichier CSV.

\copy dpt1 FROM dpt1.csv WITH DELIMITER AS ';' CSV HEADER

En quelle forme normale est le modèle ? Normalisez le en 3NF (on nommera la table dpt2).

Le modèle n'est pas en 1NF, le premier champ n'est pas atomique.

dpt2 (#num:string(2), nom:string, population:string) WITH nom KEY
CREATE TABLE dpt2 (
  num VARCHAR(2) PRIMARY KEY,
  nom VARCHAR UNIQUE NOT NULL,
  population INTEGER
) ;

Écrivez et exécuter la requête SQL permettant de migrer dpt1 dans dpt2.

INSERT INTO dpt2 (...)
SELECT ...
FROM dpt1 

Utiliser la fonction SUBSTR.

Si vous avez défini #num comme entier, vous aurez besoin de la fonction CAST(madonnée AS montype)

INSERT INTO dpt2 (num, nom, population)
SELECT SUBSTR(numEtNom,1,2), SUBSTR(numEtNom,6), population 
FROM dpt1 ;

Écrivez le programme PHP permettant d'afficher le contenu de la table normalisée, tel que présenté ci-dessous.

Page HTML visualisée avec un navigateur Web
AccueilDevoirs > Exercice : Recensement< PrécédentSuivant >