Les bases de données en un éclair

  1. Intoduction

    Les données dont on dispose sur un système biologique peuvent être volumineuses, de différentes natures et présenter des relations complexes entre elles.

    Il est nécessaire de pouvoir à la fois représenter leur structure, c'est à dire les modéliser, et d'autre part les stocker sur un périphérique informatique.

    L'objectif des bases de données est de founir un outil permettant la représentation formelle de la structure des données et des capacités de stocker les données et de les interroger (faire des requêtes) sans avoir à se préoccuper des aspects pratiques de ce stockage sur les périphiques (Disques).

    Ce cours est une introduction très rapide (1h30) aux bases de données, il sera complété par un TP (sous postgres), il ne faut bien entendu pas voir là un cours structuré de base de données!

  2. Notion de table et de relation

    Supposons que l'on s'intéresse aux conditions météo un jour donné, plus précisément nous allons noter:

    Le jour d'observation
    un entier le nombre de jours depuis le début
    la température
    un décimal
    la vitesse du vent
    un décimal
    les conditions
    une chaîne de caractère: soleil, nuage, pluie

    Les données vont s'organiser suivant une table de la manière suivante:

    jourtempératureventcondition
    11810soleil
    21615nuage
    31020pluie
    4175nuage
    52015soleil

    Cette table définit une relation entre les domaines jour, température, vent et condition. Chaque ligne de la table est un n-uplet de la relation (avec ici n=4).

  3. SGBD relationnels

    Nés en 1970 ils permettent la définition et la manipulation de relations sous forme de tables. La présentation théorique de ces systèmes dépasse largement l'objectif de ce cours introductif. Nous vous renvoyons par exemple aux cours de licence ou de master de la filière MIV. Ici nous ne verrons que l'aspect pratique de la création de table et de leur interrogation.

    Comment créer notre table meteo:

    CREATE TABLE meteo (
    jour INTEGER,
    temperature FLOAT,
    vent FLOAT,
    condition CHAR(10)
    );

    Bien entendu il faut ensuite "remplir" les tables. Vous verrez cette opération en TD. Nous nous concentrerons ici sur les requêtes.

  4. Requêtes sur une table

    La requête la plus simple consiste à retrouver toutes les données de la table. La syntaxe est la suivante:

    SELECT * * représente toutes les colonnes
    FROM meteo on indique la table sur laquelle porte la requete
    ; on termine la requête par ;

    On peut sélectionner certaine colonnes

    SELECT jour , temperature
    FROM meteo;

    Une question simple: Quels sont les jours pour lesquels la température a dépassé 17°?

    SELECT *
    FROM meteo
    WHERE temperature > 17; WHERE est suivie d'une condition de sélection

    Que fait cette requête?

    SELECT *
    FROM meteo
    WHERE temperature > 16 AND condition = "nuage";

  5. Pourquoi plusieurs tables?

    Supposons que l'on dispose de plusieurs stations expérimentales sur lesquelles on réalise du piégage de mulots. Ces mulots sont pesés et relachés (on suppose la population suffisamment grande pour que la probabilité de recapturer le même mulot soit négligeable). Les stations sont "bois joli", "mare fétide" et "haie lugubre" (vous les trouverez facilement sur une carte IGN de la région!). Chaque mulot capturé est désigné par un code unique. On peut stocker ces données dans une nouvelle table "capture":

    jourstationcodepoids
    1mare fetidemOO120
    1bois jolimOO222
    2bois jolimOO319
    3haie lugubremOO417
    3mare fetidemOO518
    4haie lugubremOO620

    Question pourquoi faire deux tables et pas une seule en "fusionnant" les tables meteo et capture?

    jourstationcodepoidsjourtempératureventcondition
    1mare fetidemOO12011810soleil
    1bois jolimOO22211810soleil
    2bois jolimOO31921615nuage
    3haie lugubremOO41731020pluie
    3mare fetidemOO51831020pluie
    4haie lugubremOO6204175nuage

    Le fait qu'il faisait soleil le premier jour est écrit deux fois, de même que la pluie du troisième jour

    Le temps du 5e jour est perdu

    On a là les effets classiques de la redondance

    Vous verrez plus tard des critères qui permettent de déterminer quand une telle redondance apparaît. Pour l'instant utilisez votre bon sens, cela suffira sur les exemples auxquels vous serez confrontés.

    Maintenant nous avons deux tables comment les utiliser pour connaître par exemple les mulots capturés un jour de soleil dans la station "bois joli".

  6. requêtes sur plusieurs tables

    La requête devra associer les deux tables pour reconstituer la table "fusionnée" indiquée ci-dessus. Ce processus s'appelle une jointure. L'association des lignes de chacune des deux tables passe par l'identité des valeurs d'une colonne de la première table avec celles d'une colonne de la deuxième table. Ici il faut que le jour de la météo soit le même que celui de la capture.

    SELECT meteo.jour , code il faut préciser la table en cas d'ambiguité
    FROM meteo , capture Il faut préciser toutes les tables utilisées
    WHERE meteo.jour = capture.jour il faut préciser la table en cas d'ambiguité
    AND condition = "soleil" AND station= "bois joli";

  7. Encore un effort: quelques petits calculs!

    J'aimerais connaître le poids moyen des mulots pour toutes les stations.

    SELECT station, AVG(poids) AVG est une fonction d'agrégat
    FROM capture
    GROUP BY station; indique comment regrouper les lignes pour calculer