site de Fabien Torre, université de Lille


Notes de cours sur les bases de données

Présentation simplifiée des bases de données : modèle relationnel, formes normales, langage SQL.

Généralités sur les bases de données

L'objectif premier est le stockage de données mais un tel stockage peut facilement être réalisé par des fichiers quelconques, plus ou moins structurés. En général, on parle de SGBD (système de gestion de bases de données) lorsque les caractéristiques suivantes sont présentes :

  • langage de requêtes à disposition,
  • assurance de performances (réponse rapide aux requêtes),
  • disponibilité des données sans interruption,
  • garantie de l'intégrité des données,
  • possibilité multi-utilisateurs, gestion des accès concurrents.

Cela écarte d'emblée les systèmes de fichiers, les entrepôts de données, les archives, les bases documentaires, etc. Et cela conduit entre autre à exiger une localisation unique de chaque donnée.

Après les modèles conceptuels (entités-associations, merise, UML, etc.) et avant le passage à un modèle physique, les modèles logiques :

  • modèle hiérarchique,
  • modèle en réseau,
  • modèle relationnel.

Nous trouvons encore des traces de ces modèles (ainsi les formats XML empruntent beaucoup au modèle hiérarchique) mais le modèle relationnel est aujourd'hui le modèle le plus répandu : la majorité des systèmes de gestion de base de données existant est fondée sur ce modèle.

Le modèle relationnel

Généralités

Inventé en 1970, E.F. Codd, directeur de recherche du centre IBM de San José.

Basé sur la notion de relation pour modéliser des objets du monde réel... premier exemple :

PERSONNE(NSS,NOM,PRENOM)
VOITURE(NV,MARQUE,TYPE,PUISSANCE,COULEUR)
POSSEDE(NSS,NV,DATE,PRIX)

Vocabulaire du modèle relationnel :

  • relation ou table
  • attribut (ou champ) : colonne d'une relation caractérisée par un nom
  • tuple = une ligne = une occurence de la relation
  • colonne = attribut = nom et domaine de définition

Opérations principales de l'algèbre relationnelle :

  • produit cartésien  : R × S
  • jointure sous la condition C  : R ⋈ S
  • projection sur les attributs A : π(R)
  • sélection sous la condition C  : σ(R)

Dépendances fonctionnelles

Vocabulaire :

  • clé de relation : ensemble minimum d'attributs qui détermine tous les autres ; s'il y en a plusieurs, choix d'une clef primaire ;
  • clé étrangère = attribut qui fait référence à la clé d'une autre relation.
Dépendance fonctionnelle. Un attribut (ou groupe d'attributs) Y dépend fonctionnellement d'un attribut (ou groupe d'attributs) X si, étant donnée une valeur de X, il lui correspond une valeur unique de Y (et ceci quelque soit l'instant considéré). On le note X -> Y.

Exemples :

  • NV -> couleur
  • TYPE -> marque
  • TYPE -> puissance

On note que si Y contient tous les attributs d'une table, alors X est une clef de cette table.

Définition d'une relation

  • intitulé
  • noms et types des attributs
  • clé de la relation
  • clés étrangères
  • attributs pouvant ne pas être renseignés (et qui contiennent alors la valeur nulle)

Conception d'une base relationnelle

Motivations

En dehors des interrogations, les opérations courantes sur une base de données en fonctionnement sont essentiellement : l'insertion de nouvelles données, la modification de données présentes et leur suppression.

Chacun de ces traitements peut provoquer l'apparition d'incohérences dans la base (par exemple, une même personne avec deux dates de naissance différentes) ou la perte non voulue d'informations.

Ces problèmes révèlent une mauvaise organisation de la base de données et le risque doit donc être prévenu lors de la conception de cette base.

Conception de la base de données

Deux méthodologies sont courantes pour parvenir à un schéma viable de la base de données :

  • concevoir un modèle entité-association des données, puis le traduire dans le modèle relationnel ;
  • écrire directement le schéma de la base dans le modèle relationnel puis tester s'il est en forme normale.

Traduction d'un schéma entité-association dans le modèle relationnel

  • pour chaque entité du schéma, on définit une table ;
  • pour une association A -> B de type 1-1, on fusionne ;
  • pour une association A -> B de type 1-n, on ajoute un attribut à la table B pour recevoir les clefs de A ;
  • pour une association A -> B de type n-n, on crée une nouvelle table reprenant les clés de A et de B, plus éventuellement d'autres descripteurs de l'association (le couple constitué par les clefs de A et de B est une clef de la nouvelle table).

Formes normales

Objectif : éviter les redondances, celles-ci pouvant amener des incohérences, et qui en plus impliqueraient l'existence de valeurs nulles

Exemple : FILM(TITRE,ANNEE,NOMVEDETTE,PRENOMVEDETTE)

Première forme normale. Une relation est en première forme normale si tout attribut contient une valeur atomique.
AMI(NOM,PRENOMS)

à décomposer en

AMI1(NOM,PRENOM1) et AMI2(NOM,PRENOM2)

ou encore mieux pour éviter les valeurs nulles et autoriser plus de deux prénoms :

AMI(NOM) et PRENOMS(NOM,PRENOM)
Deuxième forme normale. Une relation est en deuxième forme normale si et seulement si : elle est en première forme, tout attribut n'appartenant pas à une clé ne dépend pas que d'une partie de cette clé.
FOURNISSEUR(NOM,ADRESSE,ARTICLE,PRIX)

clé : (NOM,ARTICLE)
dépendances : (NOM,ARTICLE) -> PRIX et NOM -> ADRESSE

à décomposer en

FOURNISSEUR(NOM,ADRESSE)
PRODUIT(ARTICLE,PRIX)
Troisième forme normale. Une relation est en troisième forme normale si et seulement si : elle est en deuxième forme, tout attribut n'appartenant pas à une clé ne dépend pas d'un attribut non clé.
VOITURE(NV,MARQUE,TYPE,PUISSANCE,COULEUR)
clé : NV
TYPE -> MARQUE et TYPE -> PUISSANCE

à décomposer en

VOITURE(NV,TYPE,COULEUR)
MODELE(TYPE,MARQUE,PUISSANCE)

Langage SQL (et pratique de MySQL)

Généralités

Un langage de manipulation de données doit permettre la modification d'une base : insertion, mise à jour et suppression.

Le langage SEQUEL (Chamberlain, IBM, 1976) est commercialisé en 1981 sous le nom de SQL.

Vocabulaire :

  • formulation d'une demande = requête
  • exécution de la requête = transaction

Création de la base : l'instruction CREATE

/* Table des quartiers */

CREATE TABLE quartiers (

       id           int NOT NULL auto_increment,
       nom_quartier text,

       PRIMARY KEY (id)
);

/* Tables des lieux */

CREATE TABLE lieux (

       id           int NOT NULL auto_increment,
       nom          text,
       ref_quartier int,
       description  text,

       PRIMARY KEY (id)
);

CREATE INDEX nomlieuidx ON lieux(nom);








Remplissage des tables : l'instruction INSERT

INSERT INTO quartiers VALUES (1,'Wazemmes');
INSERT INTO quartiers(nom_quartier) VALUES ('Vieux Lille');

INSERT INTO lieux VALUES ('Biplan',1,'Salle de spectacle');

Interrogation de la base : l'instruction SELECT

SELECT * FROM quartiers;
SELECT nom FROM lieux;
SELECT nom FROM lieux ORDER BY nom;
SELECT nom,description FROM lieux WHERE ref_quartier=1;
SELECT nom,description FROM lieux WHERE ref_quartier=1;

SELECT L.nom,Q.nom_quartier FROM lieux AS L,quartiers AS Q,
WHERE L.ref_quartier=Q.id;

SELECT L.nom,Q.nom_quartier FROM lieux AS L,quartiers AS Q,
WHERE L.ref_quartier=Q.id
ORDER BY L.nom;

SELECT COUNT(*) FROM lieux;

Suppressions : les instructions DROP et DELETE

DROP TABLE quartiers;
DELETE FROM lieux;
DELETE FROM lieux WHERE ref_quartier=1;

Mise à jour de la base : l'instruction UPDATE

UPDATE quartiers SET nom_quartier='Waazzeeeemmes !' WHERE ref_quartier=1;
Fabien Torre Valid HTML5! Valid CSS!
Accueil > Enseignement > Cours > Informatique de base > Bases de données
(contenu mis à jour )
site de Fabien Torre, université de Lille

Description

Survoler un lien de navigation pour lire sa description ici...