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!
Supposons que l'on s'intéresse aux conditions météo un jour donné, plus précisément nous allons noter:
Les données vont s'organiser suivant une table de la manière suivante:
jour | température | vent | condition |
---|---|---|---|
1 | 18 | 10 | soleil |
2 | 16 | 15 | nuage |
3 | 10 | 20 | pluie |
4 | 17 | 5 | nuage |
5 | 20 | 15 | soleil |
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).
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.
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";
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":
jour | station | code | poids |
---|---|---|---|
1 | mare fetide | mOO1 | 20 |
1 | bois joli | mOO2 | 22 |
2 | bois joli | mOO3 | 19 |
3 | haie lugubre | mOO4 | 17 |
3 | mare fetide | mOO5 | 18 |
4 | haie lugubre | mOO6 | 20 |
Question pourquoi faire deux tables et pas une seule en "fusionnant" les tables meteo et capture?
jour | station | code | poids | jour | température | vent | condition |
---|---|---|---|---|---|---|---|
1 | mare fetide | mOO1 | 20 | 1 | 18 | 10 | soleil |
1 | bois joli | mOO2 | 22 | 1 | 18 | 10 | soleil |
2 | bois joli | mOO3 | 19 | 2 | 16 | 15 | nuage |
3 | haie lugubre | mOO4 | 17 | 3 | 10 | 20 | pluie |
3 | mare fetide | mOO5 | 18 | 3 | 10 | 20 | pluie |
4 | haie lugubre | mOO6 | 20 | 4 | 17 | 5 | nuage |
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".
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";
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