• Aucun résultat trouvé

Info 7 - Ini$a$on aux bases de données

N/A
N/A
Protected

Academic year: 2022

Partager "Info 7 - Ini$a$on aux bases de données"

Copied!
10
0
0

Texte intégral

(1)

Info 7 - Ini$a$on aux bases de données

Cours d’informa$que Pour Tous - PTSI 2 - Lycée Vauvenargues

1. Généralités et intérêts des bases de données

Une bibliothèque souhaite réaliser un programme informa6que pour gérer les emprunts de livres.

Une première méthode est de réaliser un fichier de type tableur, qui peut prendre l’aspect suivant.

Les logiciels de type tableur possède de nombreuses fonc6ons perme@ant de saisir ou de modifier des données dans un ensemble, d’en extraire des informa6ons selon une mul6tude de critères, d’obtenir des données chiffrées sur la totalité ou une par6e de la base. Cependant, il y a plusieurs inconvénients au tableur :

- Algorithme de recherche peu efficace : la recherche d'un élément dans le tableau demande de lire tout le tableau ce qui peut être long si le fichier fait plusieurs milliers de lignes. Ex : quel sont les livres emprunter depuis 1 mois par M. Castel ? - Sensibilité à la casse : si je cherche M. castel je ne trouve personne. Dois-je

cherche Madame Bovary ou Mme Bovary ? Certains logiciels de tableur perme@ent de vérifier les données saisies par les u6lisateurs. Mais ce contrôle reste assez sommaire,

- Nombre de lignes limité : bien qu’il soit théoriquement possible de saisir des données dans toutes les lignes d’une feuille de calcul (plus d’un million avec Excel 2010 !), il serait déraisonnable de dépasser quelques dizaines de milliers de lignes. En effet, les logiciels de tableur travaillent en mémoire vive. Au plus pe6t bug ou à la moindre coupure de courant, toutes vos modifica6ons seraient perdues (ou alors il faudrait sauvegarder fréquemment, ce qui peut prendre beaucoup de temps !), - Pas d’intégrité référen$elle : la suppression d’une ligne d’un tableur ne donne lieu à aucune vérifica6on de cohérence. Elle

sera supprimée même si celle-ci possède des liens avec des lignes présentes dans d’autres tables (ceci peut être évité à l’aide d’un programme interne mais qui peut être lourd à me@re en œuvre…),

(2)

La seconde méthode consiste à créer une base de données – BDD – cons6tuée des 5 tables suivantes. Ce@e méthode est d’autant plus efficace que le nombre de données est important.

La créa6on d’une BDD et la recherche d’informa6ons – ou requête - dans une BDD - sont réalisées à l'aide d'un Système de Ges6on de Bases de Données, noté SGBD. Les SGBD sont basés sur l'algèbre rela$onnelle ce qui permet d'éviter des incohérences dans les données (doublon...) et assure l’efficacité des recherches.

Le langage SQL - Structured Query Language (pour langage de requête structuré) est un langage perme@ant de communiquer avec une base de données. La suite de ce cours présente les principales fonc6ons associées à ce langage.

Les SGBD basés sur le langage SQL les plus u6lisés sont MySQL, Oracle Database, Microsoa SQL serveur, PostgreSQL ou encore SQLite, système que nous u6liserons en TP.

Remarques sur l’intégrité référen$elle

Un SGBD offre l’intégrité référen6elle. Il interdit la suppression d’une ligne qui possède encore des liens avec des lignes présentes dans d’autres tables. Par exemple, on ne peut pas supprimer un emprunteur s’il est en possession de livres non rendus.

De plus, lors de l’ajout d’une donnée, la fonc6onnalité d'intégrité référen6elle fait en sorte que le logiciel refusera de saisir dans une table secondaire une donnée qui ne se trouve pas dans la table principale à laquelle elle est liée.

Enfin, la mise à jour en cascade fera en sorte qu'une modifica6on dans une table principale se reflétera automa6quement dans une table secondaire. Ainsi, une correc6on apportée au nom d'un emprunteur dans la table appropriée sera faite

automa6quement dans les tables qui y sont liées et, par conséquent, dans les requêtes u6lisant ces tables.

Inconvénient d’une BDD

La concep6on d'une BDD peut exiger beaucoup de réflexion et de planifica6on pour élaborer une structure de données et un système de rela6ons entre les tables qui perme@ra non seulement d'éliminer les redondances (redites d'informa6on), de me@re à jour les informa6ons facilement mais aussi de répondre à tous les besoins fonc6onnels. On peut sans difficulté créer plus d'une

(3)

douzaine de tables liées pour un même projet. Il est essen6el de consacrer du temps et le soin requis à la concep6on et à l'établissement d'une fonda6on logique et solide pour éviter des correc6ons et des modifica6ons de fond par la suite.

Ce@e par6e de créa6on de BDD fera l’objet du 2ème cours.

2. Base de données & Architecture logicielle

L'avantage majeur de l'u6lisa6on de bases de données est la possibilité de pouvoir être accédées par plusieurs u6lisateurs simultanément. Pour cela, on trouve principalement 2 types d’architecture logicielle pour traiter les BDD : l’architecture client- serveur et l’architecture trois-$ers – appelé aussi architecture à trois niveaux ou architecture à trois couches.

Dans l'architecture client-serveur plusieurs clients (un programme ou un opérateur humain) peuvent faire des modifica6ons en même temps, ce qui peut poser problème.

Dans l'architecture trois-$ers, le serveur applica$f - couche mé6er - décrit les opéra6ons que l'applica6on opère sur les données en fonc6on des requêtes des u6lisateurs effectuées au travers de la couche présenta6on. Les différentes règles de ges6on et de contrôle du système sont mises en œuvre dans ce@e couche mé6er qui gère les droits des différents clients et peut fournir une interface graphique (ex : Atrium). Par rapport à l’architecture client – serveur, les avantages sont :

- la mise à jour du serveur de base de données est uniquement possible à par6r du serveur applica6f (ex : réalisée une fois par jour à minuit pour Atrium),

- la sécurité des données, en supprimant le lien entre le client et les données. Le serveur applica6f a pour tâche, en plus des traitements de recherche, de vérifier l'intégrité et la validité des données avant de les envoyer dans la couche de données, - l’allègement du poste de travail client, de plus l’interface peut prendre de mul6ples face@es sans changer la finalité de

l'applica6on.

3. Vocabulaire associées aux BDD

Domaine : cela correspond au type (en6er, flo@ant, chaîne de caractère ou autre) des données qui seront stockées dans une colonne de la table considérée.

ASribut : couple nom : domaine qui permet de définir une colonne de la table.

Par exemple Titre:String ou Genre:Int.

Tuple : (ou n-uplet) ensemble ordonné de couples a@ribut/valeur, c’est donc une ligne d’une table.

Par exemple (auteur:1, 6tre:Salambô, genre:1)

Principe de l’architecture client - serveur Principe de l’architecture trois-$ers

couche présenta$on

couche mé$er couche accès aux données

(4)

Rela$on : ensemble de tuples, c’est donc une table en SQL.

Clé primaire : elle permet d’iden6fier de manière unique un enregistrement dans une table. On définit une clé primaire par table.

Deux lignes dis6nctes de la table ne peuvent pas avoir les mêmes valeurs pour les champs définis au niveau de la clé primaire. Si nécessaire, on crée une colonne (un a@ribut) id (pour iden6fiant) avec un numéro qui sera la clé primaire. En général, on souligne l’aSribut choisi pour clé primaire lors de la déclara$on d’une table dans un schéma rela$onnel.

Schéma rela$onnel : descrip6f qui associe à chaque rela6on (ou table) la liste de ses a@ributs. Par exemple, les schémas rela6onnels de la base de données de la bibliothèque sont :

LIVRES (id:en6er, auteur:texte, 6tre:texte, genre:en6er) AUTEURS (id:en6er, nom:texte, prénom:texte)

EMPRUNTS (qui:en6er, quoi:en6er, date:texte, rendu:texte) EMPRUNTEURS (id:en6er, nom:texte, prénom:texte, tel:en6er) GENRE (id:en6er, genre:texte)

Remarque : la table EMPRUNTS ne con6ent pas de clé primaire, même si en soi l’ensemble des 4 a@ributs devrait normalement cons6tuer une clé. Ses a@ributs pointent sur la clé primaire d’une autre table, ce qui permet d’établir des « jointures » entre les tables (voir le paragraphe suivant). Les a@ributs qui et quoi sont des clés étrangères car ils pointent vers les clés primaires d’autres tables.

4. Algèbre rela$onnelle et langage SQL

Dans ce paragraphe nous présentons les opérateurs de l'algèbre rela6onnelle ainsi que leur traduc6on dans le langage SQL.

Pour avoir plus de détails sur les commandes SQL vous pouvez consulter le site : h@p://sql.sh/

La projec$on

La projec6on consiste à extraire (c'est à dire afficher) des colonnes d'une table. La commande est : SELECT colonne1, colonne2 FROM nom_de_la_table

Pour extraire toutes les colonnes d’une table la requête est : SELECT * FROM nom_de_la_table

(5)

La sélec$on (ou restric$on)

La sélec6on consiste à extraire certaines lignes en fonc6on d'une contrainte. La contrainte peut être de toute sorte, comme une vérifica6on d’égalité (nom= 'France') ou une inégalité (surface<100).

En pra6que, la sélec6on s'accompagne d'une projec6on.

SELECT colonne1, colonne2 FROM nom_de_la_table WHERE contrainte

Le renommage

Il peut être pénible d’u6liser des colonnes définies de manière complexe à par6r d’autres colonnes (ou tout simplement nommées avec des noms qui ne sont pas très parlants). On définit donc l’opéra6on de renommage d’un a@ribut A en B.

Dans la requête précédente, on pourrait choisir de bap6ser densite la quan6té popula;on/surface.

Dans le langage SQL, on u6lise le mot-clé « AS ». Dans l’exemple suivant, on rajoute la clause « ORDER BY » qui permet de trier les résultats suivant l’ordre croissant (ascendant) « ASC » ou décroissant (descendant) « DESC »

(6)

SELECT colonne1, colonne2, colonne3 AS nvx_nom FROM nom_de_la_table

WHERE contrainte ORDER BY nvx_nom DESC

Le produit cartésien

Si l’on prend deux ensembles A = {1,2} et B = {3,4}, alors le produit cartésien A×B s’écrit {(1,3),(1,4),(2,3),(2,4)} c’est-à-dire que l’on prend chaque élément de A et on l’apparie à tous les éléments de B. Bien sûr, avec des ensembles de taille conséquente, le nombre d’éléments du produit cartésien croît très vite !

Supposons à présent que l’on dispose de deux tables etudiants et villes :

Le produit cartésien de ces deux tables est noté simplement en algèbre rela6onnelle etudiants × villes. Quant à la traduc6on en SQL, elle revient simplement à afficher toutes les colonnes depuis les deux tables.

On voit bien que dans cet exemple, le produit cartésien n’a pas énormément de sens car certains étudiants se retrouvent avec deux villes différentes. Il va donc falloir faire une sélec6on parmi les résultats précédents, ce qui correspond très exactement à l’ac6on de la jointure.

La jointure

La jointure revient à associer les lignes d’une table aux lignes d’une autre table en se basant sur la correspondance de valeurs dans deux colonnes.

table etudiants table villes

(7)

SELECT colonne1, colonne2 , colonne3 FROM table1

JOIN table2 ON table2.colonne2 = table1. colonne3

Les fonc$ons d’agréga$on

Elles perme@ent d’effectuer des opéra6ons sur les colonnes.

MIN( ) MAX( ) SUM( ) AVG( ) COUNT( )

Exemple : pour afficher le nom et l'année de naissance du plus jeune de la table étudiants SELECT nom, MAX(annee_de_naissance)

FROM etudiants

Le regroupement

Comme la sélec6on, le regroupement consiste à extraire certaines lignes en fonc6on d'une contrainte, sauf qu’avec un regroupement la contrainte peut u6liser les fonc6ons d’agréga6on. On u6lise alors la commande HAVING qui précise la (ou les) condi6ons associées au regroupement.

Exemple : pour compter le nombre d'étudiants par ville SELECT ville, COUNT(nom)

FROM etudiants GROUP BY ville

Exemple : pour afficher l'étudiant le plus jeune par ville SELECT ville, nom, annee_de_naissance FROM etudiants

GROUP BY ville HAVING MAX(annee_de_naissance) = annee_de_naissance etudiants.ville = villes.nomV

(8)

Les opérateurs usuels sur les ensembles

Le résultat d’une requête est toujours un ensemble de lignes. Ces lignes peuvent être arrangées avec les opérateurs ensemblistes que sont l’union, l’intersec6on et la différence. Pour illustrer ces trois concepts, considérons les deux tables suivantes :

Union A ∪ B

L’union de deux ensembles renvoie tous les éléments qui appar6ennent à l’un ou à l’autre de ces ensembles. Si un élément appar6ent aux deux à la fois, il n’est renvoyé qu’une seule fois. En langage SQL, on u6lise le mot-clé « UNION ».

Pour rassembler deux requêtes dis6nctes, elles doivent être compa6bles, c’est-à-dire renvoyer le même nombre de colonnes avec les mêmes types et dans le même ordre.

SELECT * FROM table1 UNION

SELECT * FROM table2

Intersec$on A ∩ B

L’intersec6on de deux ensembles renvoie tous les éléments qui appar6ennent à l’un et à

table2 table1

(9)

l’autre de ces ensembles. En langage SQL, on u6lise le mot-clé « INTERSECT »

Les deux requêtes doivent être compa6bles, c’est-à-dire renvoyer le même nombre de colonnes avec les mêmes types et dans le même ordre.

SELECT * FROM table1 INTERSECT

SELECT * FROM table2

Différence A − B (ou A\B)

La différence A − B de deux ensembles (aussi notée A\B) revient à renvoyer les éléments qui appar6ennent à A mais pas à B.

En langage SQL, le mot-clé u6lisé dépend du SGBD u6lisé. On u6lise soit le mot-clé

« MINUS » (MySQL, Oracle), soit le mot clé « EXCEPT » (PostgreSQL, SQLite). Là encore, les requêtes doivent être compa6bles (c’est-à-dire renvoyer le même nombre de colonnes avec les mêmes types et dans le même ordre).

SELECT * FROM table1 EXCEPT

SELECT * FROM table2

(10)

Synthèse sur les principales commandes SQL

Interroga$on de la base de données : la commande SELECT

SELECT colonne1, colonne2 AS alias, ... précise ce que je recherche FROM table, …

JOIN table2 ON table1.colonne1 = table2.colonne3 WHERE condi6on1 OR condi6on2 AND condi6on 3 GROUP BY expr, ... HAVING condi6ons

ORDER BY … ASC | DESC précise comment j’affiche le résultat

Opéra$on sur les tables et les lignes : CREATE Créa6on de tables ALTER Modifica6on de tables DROP Suppression de tables

INSERT Inser6on de lignes dans une table UPDATE Mise à jour de lignes dans une table DELETE Suppression de lignes dans une table

SELECT Précise les colonnes qui vont apparaître dans la réponse SELECT DISTINCT permet d'éviter les doublons, SELECT * affiche toutes les colonnes

FROM Précise la (ou les) table(s) intervenant dans l'interroga6on WHERE Précise les condi6ons à appliquer sur les lignes. On peut trouver :

- des comparateurs : =, >, <, >=, <=, !=, <>, - des opérateurs logiques : AND, OR, NOT,

- les prédicats: IN, NOT IN, LIKE, NULL, ALL, SOME, ANY, EXISTS JOIN...ON...=... Précise la table à joindre ainsi que les colonnes de jointure

GROUP BY Précise la (ou les) colonne de regroupement

HAVING Précise la (ou les) condi6ons associées à un regroupement

ORDER BY Précise l'ordre dans lequel vont apparaître les lignes de la réponse : - ASC : en ordre ascendant (par défaut),

- DESC: en ordre descendant

MIN(...) Renvoie la plus pe6te valeur de la colonne spécifiée.

MAX(...) Renvoie la plus grande valeur de la colonne spécifiée.

SUM(...) Renvoie la somme des valeurs de la colonne spécifiée.

COUNT(...) Renvoie le nombre de valeurs dans la colonne.

COUNT (DISTINCT colonne) élimine les doublons COUNT(*) Compte toutes les lignes de la table.

AVG(...) Renvoie la moyenne des valeurs de la colonne spécifiée.

précise dans quoi je le cherche

précise comment je le cherche, quel critère ?

Références

Documents relatifs

232-22 du code du sport, dans leur rédaction applicable à la date du 8 février 2010 à laquelle a été rendue la décision de l’organe disciplinaire de la Fédération

Appliquer le programme avec le nombre 2 en détaillant les étapes, et donner le résultat sous la forme du carré d'un nombre

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou

For any k &gt; 1, for any fixed query Q with no more than k product signs, for any input po-database D where each po-relation is a union of totally ordered relations, the dimension

STRATÉGIES D’INVESTISSEMENT POUR LES PERSONNES MORALES (IS) Société civile patrimoniale à l’IS et SCPI de rendement : une fausse bonne idée. 20

Pour l'ensemble des candidats à ce BTS (quelque soit le bac d'origine), le taux de réussite est de 92,3%.. Enfin, les titulaires de ce bac professionnel représentent 9,6% des

 Distribuée : le graphe global est construit au niveau de chaque site, donc chaque site reçoit tous les graphes locaux pour construire le graphe global.. 

Il ne reste qu'à fournir des chiffres, quelques joumaux et documents. On peut objecter que la correspondance développe le langage écrit. Mais d'une part, la langue