Cours : Bases de données
Fiche de Cours : Bases de données (CPGE MPI - Deuxième année)
Section titled “Fiche de Cours : Bases de données (CPGE MPI - Deuxième année)”Cette fiche de cours aborde la théorie des bases de données relationnelles, les aspects algorithmiques fondamentaux (optimisation de requêtes, complexité), ainsi que la persistance et la gestion de la concurrence.
1. Le Modèle Relationnel
Section titled “1. Le Modèle Relationnel”Définitions fondamentales
Section titled “Définitions fondamentales”- Domaine () : Ensemble de valeurs atomiques (e.g., , ).
- Schéma de relation () : Un ensemble d’attributs . À chaque attribut est associé un domaine .
- Relation () : Un sous-ensemble de l’ensemble des tuples . C’est un ensemble, l’ordre des tuples n’importe pas.
- Clé candidate : Un sous-ensemble d’attributs tel que :
- Unicité : Dans toute instance valide de , deux tuples distincts ont des valeurs distinctes sur .
- Irréductibilité : Aucun sous-ensemble strict de ne possède la propriété d’unicité.
- Clé primaire : Une clé candidate choisie arbitrairement pour identifier de manière unique les tuples.
- Clé étrangère : Un ensemble d’attributs dans une relation dont les valeurs doivent correspondre aux valeurs d’une clé primaire dans une relation .
Intégrité et Dépendances Fonctionnelles (DF)
Section titled “Intégrité et Dépendances Fonctionnelles (DF)”- Définition (DF) : Soit un schéma, et . On note (lire ” détermine ”) si pour toute instance de et tous tuples :
- Axiomes d’Armstrong : Soit un ensemble de DF sur . La fermeture est déductible par les règles :
- Réflexivité : Si , alors .
- Augmentation : Si , alors (pour tout ).
- Transitivité : Si et , alors .
- Règles déduites : Union ( et ), Décomposition (), Pseudo-transitivité.
- Fermeture d’un ensemble d’attributs () : Algorithme en temps pour trouver tous les attributs déterminés par .
2. Algèbre Relationnelle
Section titled “2. Algèbre Relationnelle”L’algèbre relationnelle est un langage formel procédural.
Opérateurs fondamentaux
Section titled “Opérateurs fondamentaux”- Sélection () : Filtre les tuples vérifiant la condition .
- Projection () : Restreint les tuples aux attributs de l’ensemble .
- Produit cartésien () : Combine chaque tuple de avec chaque tuple de .
- Renommage () : Change le nom d’un attribut.
- Union () : Nécessite que et soient compatibles d’union (même schéma).
- Différence ensembliste () (Nécessite aussi la compatibilité d’union).
Opérateurs dérivés
Section titled “Opérateurs dérivés”- Intersection :
- Jointure naturelle () : Produit cartésien suivi d’une sélection sur l’égalité des attributs communs et d’une projection pour éliminer les doublons de colonnes.
- Theta-jointure ( et )
3. SQL (Structured Query Language) et Logique du Premier Ordre
Section titled “3. SQL (Structured Query Language) et Logique du Premier Ordre”Sémantique des requêtes SQL
Section titled “Sémantique des requêtes SQL”Une requête SQL s’exprime conceptuellement selon l’ordre d’évaluation suivant :
FROM(Produit cartésien et jointures)WHERE(Sélection )GROUP BY(Agrégation)HAVING(Filtrage sur les agrégats)SELECT(Projection )DISTINCT(Élimination des doublons)ORDER BY(Tri)
Théorème de Codd
Section titled “Théorème de Codd”Théorème (Codd, 1970) : L’algèbre relationnelle et le calcul relationnel (basé sur la logique du premier ordre) ont la même expressivité (pour les requêtes sûres, i.e., n’engendrant pas de relations infinies). SQL (sans récursion) est complet par rapport à l’algèbre relationnelle.
4. Optimisation des Requêtes et Complexité
Section titled “4. Optimisation des Requêtes et Complexité”Arbre de requête
Section titled “Arbre de requête”Une requête relationnelle est représentée sous forme d’un arbre syntaxique dont les feuilles sont les relations de base et les nœuds internes sont les opérateurs algébriques.
Règles de réécriture (Heuristiques d’optimisation)
Section titled “Règles de réécriture (Heuristiques d’optimisation)”Pour minimiser la taille des résultats intermédiaires :
- Pousse des sélections : Effectuer les sélections le plus bas possible dans l’arbre (au plus près des scans de tables).
- Pousse des projections : Effectuer les projections le plus tôt possible pour réduire la largeur des tuples.
- Commutativité et associativité : et sont associatifs et commutatifs. On privilégie les jointures réduisant le plus rapidement la cardinalité.
Algorithmes de Jointure (Complexité)
Section titled “Algorithmes de Jointure (Complexité)”Soient et deux relations de cardinalités respectives et .
- Nested Loop Join (Boucles imbriquées) :
- Principe : Pour chaque tuple de , parcourir .
- Complexité temporelle : en pire cas (sans index), si un index B-Arbre existe sur la clé de .
- Sort-Merge Join (Fusion-Tri) :
- Principe : Trier les deux relations sur l’attribut de jointure, puis les parcourir simultanément.
- Complexité temporelle : .
- Hash Join (Jointure par hachage) :
- Principe : Construire une table de hachage en mémoire sur la plus petite relation (), puis parcourir la seconde () pour sonder la table.
- Complexité temporelle : en moyenne (si la mémoire RAM est suffisante).
5. ACIDité, Transactions et Concurrence
Section titled “5. ACIDité, Transactions et Concurrence”Propriétés ACID
Section titled “Propriétés ACID”- Atoméricité : Tout ou rien. Les modifications d’une transaction sont validées (commit) ou annulées (rollback) en bloc.
- Cohérence : Une transaction amène la base d’un état valide à un autre état valide (respect des contraintes d’intégrité).
- Isolement : L’exécution concurrente de transactions donne le même résultat que si elles avaient été exécutées séquentiellement.
- Durabilité : Une fois validées, les données persistent même en cas de panne système.
Ordonnancement (Schedules) et Sérialisabilité
Section titled “Ordonnancement (Schedules) et Sérialisabilité”- Conflit : Deux opérations appartiennent à des transactions différentes, accèdent au même élément, et l’une d’elles au moins est une écriture (). Les types de conflits sont , , et .
- Sérialisabilité par conflit : Un ordonnancement est sérialisable par conflit s’il peut être transformé en un ordonnancement séquentiel par des permutations successives d’opérations non en conflit.
- Théorème du graphe de conflits : Un ordonnancement est sérialisable par conflit si et seulement si son graphe de sérialisabilité (sommets = transactions, arcs = conflits orientés de la première vers la seconde) est acyclique.
Méthodes et Savoir-Faire
Section titled “Méthodes et Savoir-Faire”- Traduire une requête SQL en Algèbre Relationnelle : Toujours décomposer en partant des clauses internes (
FROM/WHERE) vers les externes (SELECT). - Calculer la fermeture : Dresser la liste des DF applicables itérativement jusqu’à point fixe.
- Vérifier la 3NF (Troisième Forme Normale) : S’assurer que pour toute DF non triviale , soit est une super-clé, soit est composé d’attributs premiers (inclus dans au moins une clé candidate).
Pièges à Éviter (Attention aux erreurs classiques !)
Section titled “Pièges à Éviter (Attention aux erreurs classiques !)”- Attention aux valeurs NULL : En SQL,
NULLreprésente une valeur inconnue. Les comparaisons avecNULL(= NULL,<> NULL) évaluent àUNKNOWN(et nonTRUEouFALSE). Il faut utiliserIS NULLouIS NOT NULL. La logique à trois valeurs (True, False, Unknown) modifie le comportement des filtresWHERE. - Confusion entre Ensemble et Multiset (Bag) : En théorie, une relation est un ensemble (pas de doublons). En SQL, par défaut, les tables sont des multisets (les doublons sont autorisés). L’utilisation de
UNIONélimine les doublons (coûteux), tandis queUNION ALLles conserve. - Mauvaise application de la transitivité : Ne pas oublier que n’implique pas (symétrie fausse).
- Oubli des conditions de jointure : Omettre la clause de jointure dans un
FROMgénère un produit cartésien , ce qui conduit à une explosion combinatoire de la taille du résultat.