|

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 🙂