Aller au contenu

Chapitre 2 - Révision : Bases de données relationnelles


  • Relation = table (lignes × colonnes)
  • Attribut = colonne (avec un nom et un domaine/type)
  • Enregistrement = ligne (n-uplet de valeurs)
  • Domaine = type de l'attribut (INT, VARCHAR, FLOAT, DATE, etc.)
  • Schéma = structure d'une relation (nom + attributs + domaines + clés)

TypeRôle
Clé primaireIdentifie de manière unique chaque enregistrement (unique, non NULL)
Clé étrangèreFait référence à la clé primaire d'une autre table (lien entre tables)

ContrainteSignification
DomaineChaque valeur respecte le type de son attribut
EntitéLa clé primaire est unique et non nulle
RéférenceToute clé étrangère correspond à une clé primaire existante

AnomalieProblème
RedondanceInformation dupliquée → incohérence possible
InsertionImpossible d'ajouter sans données annexes
SuppressionPerte d'informations involontaire
Mise à jourOubli de modifier toutes les copies

Solution : normaliser en décomposant en plusieurs tables liées par des clés étrangères.


ServiceDescription
PersistanceDonnées conservées sur disque, survivent aux pannes
Accès concurrentsPlusieurs utilisateurs simultanés, sans conflit
EfficacitéOptimisation des requêtes, index, cache
SécurisationAuthentification, droits d'accès, audit

-- Sélection de colonnes
SELECT col1, col2 FROM Table;
SELECT * FROM Table;
-- Filtre
SELECT * FROM Table WHERE condition;
-- Sans doublons
SELECT DISTINCT col FROM Table;
-- Tri
SELECT * FROM Table ORDER BY col ASC; -- croissant
SELECT * FROM Table ORDER BY col DESC; -- décroissant
-- Agrégation
SELECT COUNT(*) FROM Table;
SELECT AVG(col), MIN(col), MAX(col), SUM(col) FROM Table;
-- Jointure (combiner deux tables)
SELECT t1.col, t2.col
FROM Table1 t1
JOIN Table2 t2 ON t1.cle = t2.cle_etrangere;

Ordre des clauses : SELECT → FROM → JOIN → WHERE → ORDER BY


-- Insertion
INSERT INTO Table (col1, col2) VALUES (val1, val2);
-- Modification
UPDATE Table SET col = nouvelle_valeur WHERE condition;
-- Suppression
DELETE FROM Table WHERE condition;

OpérateurSignification
=, <>Égal, différent
<, >, <=, >=Comparaison
BETWEEN a AND bEntre a et b
LIKE 'motif'Motif (% = tout, _ = 1 car.)
IN (a, b, c)Appartient à l'ensemble
IS NULL / IS NOT NULLVide / non vide
AND, OR, NOTCombinaison logique

import sqlite3
conn = sqlite3.connect("base.db")
c = conn.cursor()
c.execute("SELECT * FROM Table WHERE col = ?", (valeur,))
resultats = c.fetchall()
conn.commit() # après INSERT/UPDATE/DELETE
conn.close()

Utiliser ? pour les paramètres (protection contre l'injection SQL).