Bases de Données
1 Une donnée ?
- texte (nom, prénom, ville…)
- numérique (age, prix…)
- date
- liste (compétences, loisirs)
- image
- fichier
- types ?
- valeurs ?
- représente quelque chose
1.1 Définition d’une donnée
Une donnée est une information brute composée de 3 éléments :
- un concept (exemple : hauteur d’un monument)
- un domaine des possibles (nombre entier positif et une unité : mètres)
- une valeur (pour la tour Eiffel : 324)
Source : Qu’est-ce qu’une donnée ?, Courrier des statistiques N5, Pascal Rivière
1.2 Où stocker des données
J’avais eu une question lors de la prez Git : où on stocke les données si on peut pas les mettre sur GitHub.
- On ne garde pas les données sur sa machine (risque de fuite)
- Dans l’idéal on bosse dans le cloud et on stocke sur S3
- Sinon on travaille dans un espace dédié (AUS)
Suivre sur Linkedin : Mauvière, Holtz, Blefari, Lesur, Galiana, Degorre, Natacha NJONGWA
1.3 Format Parquet
- Stockage orienté colonne
- Contient des métadonnées
- Adapté pour le stockage de données figées
- Parquet pour remplacer csv, Éric Mauvière, Icem7
- Comment bien préparer son Parquet, Éric Mauvière, Icem7
- Lire et écrire des fichiers Parquet, UtilitR
- Données figées -> parquet
- Données mouvantes -> bdd PostgreSQL
- Tad Viewer pour afficher le contenu d’un parquet
2 Une base de données ?
Une base de données est un ensemble de données rassemblées et stockées de manière organisée dans un but spécifique.
Types ?
On n’utilise pas la même structure pour du texte ou des fichiers.
3 Enjeux
- Accès aux données : langage SQL
- Sécurité des données : seuls les utilisateurs autorisés (droits)
- Partage des données : facile en lecture, mais en écriture ?
- Non-redondance des données
- Cohérence des données : respect des contraintes d’intégrité
- Se brancher à la BDD qui est sur un serveur
- Règles pour la cohérence. ⚠️ trop de règles -> bon dosage
4 Types de bases de données
4.1 Hiérarchique
- Données organisées comme un arbre
- Relations de type parent-enfant
- Annuaires LDAP, systèmes de fichiers
4.2 Réseau
- Organisée en graphe
- Les enregistrements peuvent avoir plusieurs parents et enfants
- Réseaux de transports
4.3 Relationnelle
- Organisée en tables
- Lien entre les tables
Quelques tables sont gérables avec Excel ou Calc.
Mais ça devient vite trop compliqué.
4.4 NoSQL
Nombreux sous-types :
Type | Description | Exemple |
---|---|---|
Clé-valeur | Données sous forme de paires clé-valeur. Idéale pour des lectures rapides avec peu de structure. | DynamoDB |
Colonnes | Organisée en colonnes, adaptée aux grandes quantités de données avec peu de relations entre elles. | Cassandra |
Document | Stocke des documents semi-structurés, souvent en format JSON ou XML, permettant une grande flexibilité. | MongoDB |
Graphes | Organisée sous forme de nœuds et de relations, idéale pour des données très connectées ou inter-relées. | Neo4j |
Not Only SQL
4.5 Autres
- Bases de données de séries temporelles
5 Base de données relationnelle
5.1 Table
- Composée de lignes et de colonnes
- Chaque table représente une entité
- Chaque ligne est un enregistrement
- Chaque colonne représente un attribut de l’entité
- Types de données : texte, num…
Imaginez un classeur Excel avec plusieurs feuilles
5.2 Relations entre les tables
- Clé primaire (PK) pour identifier chaque enregistrement dans une table
- de manière unique
- sans ambiguïté
- Clé étrangère (FK) pour créer des liens avec d’autres tables
- attribut d’une table A
- correspond à la clé primaire d’une table B
Exemples juste après
5.3 Clé primaire ?
nom | prenom | elo |
---|---|---|
Guichard | Pauline | 2357 |
Daulyte-Cornette | Deimante | 2371 |
Navrotescu | Andreea | 2338 |
Sebag | Marie | 2448 |
Millet | Sophie | 2366 |
Skrichempko | Almira | 2361 |
Quel champ choisir comme clé primaire ? 😐
5.4 Clé primaire technique
Créons une séquence numérique. 😎
id_joueuse | nom | prenom | elo |
---|---|---|---|
1 | Guichard | Pauline | 2357 |
2 | Daulyte-Cornette | Deimante | 2371 |
3 | Navrotescu | Andreea | 2338 |
4 | Sebag | Marie | 2448 |
5 | Millet | Sophie | 2366 |
6 | Skrichempko | Almira | 2361 |
5.5 Clé primaire
- Attribut (ou ensemble d’attributs)
- Unique
- Non nulle
- Immuable
Sauf mention contraire, nous utiliserons une clé primaire “technique” : séquence.
Immuable :
- idéalement stable, elle ne change pas au cours du temps
- Pour maintenir l’intégrité des liens avec d’autres tables
Remarque : pas obligatoire d’avoir une clé primaire
Question : nous voulons ajouter le club de chaque joueuse, comment faire ?
5.6 Clé étrangère ?
Comment relier ces 2 tables ?
- une joueuse joue pour un seul club
- Un club peut avoir plusieurs joueuses
id_club | nom | ville |
---|---|---|
1 | C’Chartres Echecs | Chartres |
2 | Bischwiller | Bischwiller |
3 | Asnieres - le Grand Echiquier | Asnieres |
4 | Tours des Hauts-De-France | Saint-Quentin |
5.7 Clé étrangère
En ajoutant une clé étrangère.
id_joueuse | nom | prenom | elo | id_club |
---|---|---|---|---|
1 | Guichard | Pauline | 2357 | 3 |
2 | Daulyte | Deimante | 2371 | 1 |
3 | Navrotescu | Andreea | 2338 | 2 |
4 | Sebag | Marie | 2448 | 2 |
5 | Millet | Sophie | 2366 | 3 |
6 | Skrichempko | Almira | 2361 |
Une clé étrangère peut être nulle.
Une clé étrangère référence une valeur existante de clé primaire.
5.8 Question
Et si vous supprimez, le club de C’Chartres Echecs ? 😇
SQL Error [23503]: ERROR: UPDATE or DELETE on table "club" violates the foreign key constraint "fk_id_club" on table "joueuse". Detail: Key (id_club)=(1) is still referenced from table "joueuse".
id_club = 1
Erreur aussi si vous essayer d’insert une joueuse avec id_club=9
5.9 Autre question
Si une joueuse peut adhérer à plusieurs clubs ? 😕
- id_club devient une liste de clubs ?
Par exemple si notre bdd contient aussi les clubs belges, allemands, espagnols…
5.10 Table d’association
Création d’une table d’association : adhesion 😅
id_club | id_joueuse |
---|---|
1 | 2 |
2 | 3 |
2 | 4 |
2 | 6 |
3 | 1 |
3 | 5 |
4 | 1 |
4 | 2 |
Imaginons que la Picardie devienne Belge.
Clé primaire ?
- id_adhesion
- (id_club, id_joueuse)
6 Associations
Il existe plusieurs types d’associations entre tables.
6.1 Association 1:1
Une entité dans la table A est associée à une seule entité dans la table B.
Exemple :
- Une personne a une seule carte vitale
- Une carte vitale appartient à une seule personne
on aurait pu tout mettre dans la même table
Question : Où met-on la clé étrangère ?
6.2 Association 1:n
Une entité dans la table A peut-être associée à plusieurs entités dans la table B.
Exemple :
- Un club est composé de plusieurs joueuses
- Une joueuse adhère à un seul club
Supposons de nouveau qu’une joueuse ne joue que pour 1 seul club.
Question : Où met-on la clé étrangère ?
6.3 Association n:n
Une entité dans la table A peut-être associée à plusieurs entités dans la table B.
Et inversement, une entité dans la table B peut-être associée à plusieurs entités dans la table A.
Exemple :
- une joueuse participe à plusieurs tournois
- Un tournoi regroupe plusieurs joueuses
Question : Comment fait-t-on ?
- Table d’association
6.4 Association récursive
Une table peut avoir des relations avec elle-même.
Dans ce cas, la table contient une clé étrangère qui référence sa propre clé primaire.
Exemple :
- employe (id_employe, nom, prenom, #id_superieur)
- id_superieur clé étrangère qui référence id_employe
Conventions
- PK soulignée
- FK avec #
6.5 Association multiples
Une table A peut avoir plusieurs relations avec une table B.
Exemple :
- equipe (id_equipe, nom)
- match (id_match, #id_equipe1, #id_equipe2, score)
Nous reviendrons sur les associations quand nous parlerons des jointures.
7 SGBD
Un Système de Gestion de Bases de Données est un logiciel qui permet de créer, gérer et manipuler des bases de données.
Il fournit des outils pour stocker, récupérer, modifier et sécuriser les données.
7.1 PostgreSQL
- Open Source, Libre
- Communauté active
- Stable et performant
- Basé sur le modèle client-serveur
- Extension PostGIS (Données géographiques)
utilisé à l’INSEE
client-serveur classique :
- le composant serveur central « postmaster » gère tous les fichiers de bdd
- ainsi que toutes les connexions établies pour la communication avec le serveur de bdd.
Les utilisateurs n’ont besoin que d’un programme client approprié pour établir la connexion
7.2 Outil de Gestion et Administration
Il est nécessaire d’avoir un outil pour gérer et administrer une base de données.
- PostgreSQL : Installé sur un serveur, sert de moteur de base de données
- pgAdmin : Interface graphique pour interagir avec PostgreSQL
7.3 Kesako
- Base de données : endroit où sont stockées les informations
- SGBD : logiciel qui permet de créer, gérer et manipuler les bases de données
- Outil de gestion du SGBD : application graphique qui facilite l’interaction avec un SGBD
- SQL : Langage pour donner les instructions à la base de données
- BDD : bibliothèque
- SGBD : bibliothécaire
- Outil : tableau de bord interactif pour les bibliothécaires
A l’ENSAI :
- vous avez chacun une bdd (nom=id)
- utilisez DBeaver pour vous y connecter