Un système de gestion de bases de données relationnelle (SGBDR) est un logiciel conçu pour interagir (stocker, manipuler, gérer)
avec une base de données relationnelle : Il sert d'intermédiaire entre l'utilisateur et les données de la base de données.
Un tel système doit implémenter quatre opérations de base :
Il existe plusieurs logiciels SGBDR, tous basés sur CRUD :
Ces logiciels utilisent le langage SQL (Structured Query Language, en français : langage de requêtes structurées), dont ils partagent les instructions de base mais présentent aussi des variations mentionnées dans leur documentation respective.
Au niveau conceptuel, les SGBD utilisent l'architecture Ansi/Sparc crée en 1975 par Charles Bachman, félicité par un prix Turing (équivalent d'un prix Nobel d'informatique).
Elle est divisée en trois niveaux, fréquentés par différents acteurs :
|
![]() |
Cette architecture permet de :
Installé sur un serveur, un SGBD traditionnel (Oracle, MySQL, MariaDB, etc) est capable de manipuler plusieurs bases de données et de fournir des accès aux utilisateurs. L'administrateur peut gérer les bases de données à l'aide des instructions SQL suivantes :
Opération | Instruction |
---|---|
Création d'une BD | |
Suppression d'une BD | |
Utilisation d'une BD |
Remarques :
Nous allons utiliser la bibliothèque sqlite3, qui permet d'utiliser une base de données légère directement sous Python (sans avoir à installer de serveur dédié).
Références :
.db
contenant la base. Le curseur permet de donner des instructions au connecteur : base01
» ;
|
Créer une table dans la BD. |
|
Supprimer une table de la BD. |
C'est à la création de la table que l'on précise les attributs, leurs types et les contraintes. Le choix d'un type à un impact important sur la taille de la base de données et sa performance tandis que le choix des contraintes participe à maintenir l'intégrité des données.
On peut appliquer une contrainte (par exemple :
Les types de données MySQL sont bien plus nombreux que les types de variable que vous connaissez en python. Cette grande variété sert à optimiser la taille d'une base de données.
Type | Min | Max | Taille en octet |
---|---|---|---|
-2147483648 | 2147483647 | 4 | |
-128 | 127 | 1 | |
0 | 255 | 1 | |
-32768 | 32767 | 2 | |
0 | 65535 | 2 | |
-8388608 | 8388607 | 3 | |
0 | 16777215 | 3 | |
0 | 4294967295 | 4 | |
-9223372036854775808 | 9223372036854775807 | 8 | |
0 | 18446744073709551615 | 8 |
Type | Min négatif | Max négatif | 0 | Min positif | Max positif | Taille en octet |
---|---|---|---|---|---|---|
-3.402823466E+38 | -1.175494351E-38 | 0 | 1.175494351E-38 | 3.402823466E+38 | 4 | |
-1.7976931348623157E+308 | -2.2250738585072014E-308 | 0 | 2.2250738585072014E-308 | 1.7976931348623157E+308 | 8 |
Type | Taille en octet |
---|---|
255 au maximum | |
≤ 65532 au maximum | |
≤255 | |
≤65535 | |
≤65535 | |
≤16777215 | |
≤4294967295 |
Type | Min | Max | Précision | Taille en octet | Représentation |
---|---|---|---|---|---|
1 Janvier 1000 | 31 Décembre 9999 | jour | 3 | ||
1 Janvier 1000 00h00m00s | 31 Décembre 9999 23h59m59s | seconde | 8 | ||
-838h59m59s | 838h59m59s | 5 | |||
1901 | 2155 | année | 4 |
Une contrainte d'intégrité est une règle qui définit la cohérence d'une donnée ou d'un ensemble de données au sein d'une base de données, afin de garantir leurs pertinence et leur validité.
l'attribut ne peut pas avoir la valeur | |
contrainte de domaine : ici, avoir des valeurs entre | |
les n-uplets d'attributs doivent être uniques | |
contrainte de relation : les attributs sont mis en clé primaire | |
contrainte de référence : crée une clé étrangère les occurences sont mises à jour en cas de modification/suppression dans l'autre table ⚠ à écrire sur |
_
et pas d'espaces !
#
.
pour insérer des données dans la table | |
Si vous ajouter des valeurs à toutes les colonnes de la table, il est possible de simplifier l'instruction en omettant le nom des attributs. Attention cependant à bien respecter l'ordre de ces attributs tels qu'ils ont été créés dans la table. | |
pour modifier des données ; par exemple : on peut remplacer par la condition est optionnelle. | |
pour supprimer des données ; Toutes les lignes seront supprimées sinon. |
Remarque : Les conditions s'écrivent de la même manière qu'en python, sauf le test d'égalité qui est
un simple
Les fichiers CSV ci-dessous contiennent toutes les données à injecter dans la BD. Écrire la requête SQL permettant d'injecter au moins un enregistrement dans chaque table.
Données : employes.csv ; succursales.csv ; fournisseurs.csv Schémas relationnels :Attention : Avec SQLite, il est impossible de modifier une table pour insérer une clé étrangère. Les clés étrangères doivent être crées au niveau de la déclaration des tables.
pour ajouter un attribut | |
pour modifier le type ou les contraintes d'un attribut | |
pour modifier le nom d'un attribut | |
pour supprimer un attribut | |
pour créer une clé étrangère Attention : impossible avec SQLite. | |
pour supprimer une clé étrangère. Attention : impossible avec SQLite. | |
pour supprimer une table : ⚠ MySQL exige d'effacer les clés étrangères avant, pas SQLite |
sqlite3.IntegrityError: FOREIGN KEY constraint failed
.
.csv
) en ayant activé les clés étrangères avant ?
Elle permet d'afficher des résultats de manière approfondie.
Affiche une liste de résultats concernés par une condition (optionnelle) classés dans un certain ordre (ascendant : | |
Le mot-clé | |
Le mot-clé |
Compte le nombre d'enregistrements | |
|
Récupèrent le max et le min sur un ensemble d'enregistrements |
|
Récupèrent la somme et la moyenne sur un ensemble d'enregistrements |
nom prénom
triés par ordre alphabétique
Définition : Si X et Y sont deux ensembles, on note X×Y l'ensemble de tous les couples de valeurs (x,y) ou x est un élément de X et y un élément de Y.
Exemple : Pour X={a,b,c} et Y={u,v}, on a X×Y={(a,u), (b,u), (c,u), (a,v), (b,v),(c,v)}.
Remarque : Un produit cartésien peut être représenté par un tableau :
X×Y | u | v |
---|---|---|
a | ||
b | ||
c |
Exemple :