Création d’une base de données
But de l’article
Nous allons créer une base de données qui contiendra une liste de villes avec leur code postal.
Le but n’étant pas de créer une application mais d’avoir un cas d’ecole simple avec 2 tables pour les jointures.
Pour cela nous allons créer :
- Une base de données carnet qui contiendra les tables :
- Codes postaux
- Ville
Pour l’échantillonnage je me suis appuyer sur le référentiel officiel de l’état ici
Le but sera de pouvoir rechercher :
- Une ville avec tous les codes postaux
- Un code postal avec toutes les villes
Le schéma est très simple :

- Un code postal peut avoir plusieurs villes
- Un nom de ville peut avoir plusieurs codes postaux
Nous le verrons plus bas
Création d’une base de données
Nous allons donc créer notre base de données carnet via une commande de ouff
create database carnet ;avec comme résultat :
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| carnet |
+--------------------+
5 rows in set (0.01 sec)Création des tables
Table pour les codes postaux
CREATE TABLE `codepostal` (
`cp_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identifiant unique pour les codes postaux',
`Insee` varchar(200) DEFAULT NULL COMMENT 'Name of the host',
`cp` varchar(200) DEFAULT NULL COMMENT 'Name of the host',
`Acheminement` varchar(200) DEFAULT NULL COMMENT 'Name of the host',
PRIMARY KEY (`cp_id`)
)Les champs :
- cp_id : autoincrément de mysql ( Donc automatique et notre clé primaire)
- Insee : Code d’index de référencement national
- cp : Le code postal
- Acheminement : centre de tri
Table pour les noms de villes
CREATE TABLE `ville` (
`ville_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Identifiant unique pour les villes',
`cp_id` int(11) DEFAULT NULL COMMENT 'ID du code postal dans la table codepostal',
`ville` varchar(200) DEFAULT NULL COMMENT 'Nom de la ville',
UNIQUE KEY `cp_id` (`cp_id`,`ville_id`),
KEY (`ville_id`)
)Les champs :
- Ville_id : autoincrément de mysql ( Donc automatique et notre clé interne à la table)
- Cp_id : Pour la jointure entre la table codepostal et ville
Petit contrôle
Lister les tables :
mysql> show tables;
+------------------+
| Tables_in_carnet |
+------------------+
| codepostal |
| ville |
+------------------+
2 rows in set (0.00 sec)Description des tables
- Code postal
- Ville
On est plutôt bien là, on est au top
Insérons des lignes
Table des CP
Pour l’exemple j’ai importé tout le fichier mais voici un extrait de l’import :
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01001', '01400', 'L ABERGEMENT CLEMENCIAT');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01002', '01640', 'L ABERGEMENT DE VAREY');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01004', '01500', 'AMBERIEU EN BUGEY');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01005', '01330', 'AMBERIEUX EN DOMBES');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01006', '01300', 'AMBLEON');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01007', '01500', 'AMBRONAY');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01008', '01500', 'AMBUTRIX');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01009', '01300', 'ANDERT ET CONDON');
INSERT INTO `codepostal` (`Insee`, `cp`, `Acheminement`) VALUES ('01010', '01350', 'ANGLEFORT');Table des villes
On fait de même sans oublier l’ID du code postal pour éviter les doublons
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('1', 'L Abergement Clemenciat');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('2', 'L Abergement De Varey');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('3', 'Amberieu En Bugey');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('4', 'Amberieux En Dombes');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('5', 'Ambleon');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('6', 'Ambronay');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('7', 'Ambutrix');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('8', 'Andert Et Condon');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('9', 'Anglefort');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('10', 'Apremont');
INSERT INTO `ville` (`cp_id`, `ville`) VALUES ('11', 'Aranc');Petit contrôle des imports :
Les codes postaux
select count(*) from codepostal;
+----------+
| count(*) |
+----------+
| 35625 |
+----------+
1 row in set (0.01 sec)Les villes
select count(*) from codepostal;
+----------+
| count(*) |
+----------+
| 35625 |
+----------+
1 row in set (0.01 sec)Même nombre de lignes c’est logique 🙂
