Vous êtes sur la page 1sur 99

M3ES Technologies de l'information et systèmes

d'information géographique
201 Séance 2-2

M o d è l e s d e d o n n é s e t l a n ga ge
SQL
P ro fes s eu r : D r D are s KOUA M E

Version : 02/02/2023
OBJECTIFS DU COURS
• concevoir un modèle de données
• manipuler des outils de consultation
de données

11/05/2022 2
M3ES

CONTENU
Unité 2 : Introduction aux bases de données
Unité 3 : Modèle entité-association
Unité 4 : Modèle et bases de données relationnels
Unité 1 : Introduction au langage SQL
Unité 5 : Base de données spatiales

11/05/2022 3
M3ES

Ressources
 chapitres 16 et 17 du livre sur les SIG de l'EPFL
 Stéphane Joost, Marc Soutter, Fernand Kouamé et Amadou Sall. Systèmes d'Information
Géographique Partie 1
https://www.researchgate.net/publication/320979981_Systemes_d%27Information_Geogra
phique_1

11/05/2022 4
Introduction aux
M3ES bases de données
201 UNITÉ 2
M3ES

Base de données (BD)


 Une base de données est un ensemble d’informations structurées stockées
(mémorisées) sur un support permanent, typiquement dans un dispositif
informatique

 Est-ce qu’un ensemble de fichiers correspond à la définition d’une BD ?


 quels sont les limites d’un tel système ? 1

11/05/2022 6
M3ES

Système de gestion de bases de données (SGBD)


 Un SGBD est un ensemble de logiciels qui permet de mettre en œuvre une BD
informatique
 Le SGBD permet notamment de
 définir la structure des données
 introduire des données, les modifier, les consulter

11/05/2022 7
M3ES

Utilisateurs d’un SGBD


 Utilisateur occasionnel
 non spécialiste des BD qui utilise des interfaces graphiques
 Utilisateur régulier
 utilise le langage SQL pour exécuter des requêtes
 Programmeur d’application
 écrit des applications pour les différents utilisateurs 1
 Administrateur de base de données
 informaticien chargé de concevoir et d’administrer la BD 2

11/05/2022 8
M3ES

Fonctionnalités d’un SGBD


1. Contrôler ou supprimer la redondance d’information
2. Permettre le partage des données
3. Gérer les autorisations d’accès
4. Offrir des interfaces d’accès multiples
5. Représenter des relations complexes entre les données
1
6. Vérifier les contraintes d’intégrité imposées aux données contenues dans la BD
7. Gérer les transactions et assurer la reprise après une panne 2

11/05/2022 9
M3ES

Évolution des SGBD


 Les systèmes anciens étaient de type hiérarchique et réseau
 Les systèmes les plus utilisés aujourd’hui sont des SGBD relationnels (SGBDR),
fondés sur le modèle relationnel
 quelques logiciels principaux : Oracle, DB2 (IBM), SQL Server (Microsoft), MySQL,
PostgreSQL, SQLite
 Depuis quelques années, apparition 1
 des SGBD orienté objets relationnels (SGBDOR) qui supportent de nouvelles fonctionnalités
orientées objet
 du mouvement « NoSQL » de bases de données orientées documents (MongoDB, CouchDB, 2
Cassandra)
3

11/05/2022 10
Modèle entité-
M3ES association
201 UNITÉ 3
M3ES

Processus de conception d’une base de données


 Construire le modèle Entité/Association (E/A)
 il décrit les données à l’aide de types d’entités et d’associations
 il est indépendant de la manière dont les données seront implantées dans la base : on parle
de modèle (schéma) conceptuel

 Traduire le modèle E/A en modèle relationnel 1


 le modèle relationnel décrit la manière dont les données sont structurées dans la BD : on
parle de modèle (schéma) logique de la BD
2

11/05/2022 12
M3ES

Processus de conception d’une base de données


 Exemple de données avec une entité :
 fichiers sur des attributs des pays (sur Teams)
 Exemple de données concernant plusieurs entités :
 enquête sur les déplacements de la région de Montréal Origine-Destination (petit extrait)

11/05/2022 13
M3ES

Modèle Entité-Association (E/A)


 Le modèle E/A est un schéma conceptuel (haut niveau d’abstraction)
 Sa popularité provient notamment de son caractère graphique
 Il consiste à représenter schématiquement le monde réel avec
 des types d’entités
 des types d’associations
 des attributs pour décrire les types d’entités ou d’association 1

11/05/2022 14
M3ES

Modèle Entité-Association (E/A)


 Une entité représente un objet matériel ou immatériel de l’univers extérieur. Elle
modélise un élément concret, ou abstrait, impliqué dans le système, et pourvu
d’existence propre indépendante du système.
 ex. : le conducteur Paul, la voiture Toyota Yaris de Paul, l’accident au coin de St Denis et
Rachel avec un vélo
 Une association relie deux ou plusieurs entités. Elle modélise un lien
informationnel mettant en jeu une ou plusieurs entités. Chaque association ne 1
doit modéliser qu’une seule information et ne peut donc avoir qu’un seul sens
dans le système. 2
 ex. : Paul a eu un accident en voiture avec un vélo au coin de St Denis et Rachel
 Un attribut (propriété) sert à décrire une entité ou une association 3
 ex. : la plaque d’immatriculation de la voiture, le numéro du permis de conduire de Paul
4

11/05/2022 15
M3ES

Modèle Entité-Association (E/A)


 On établit une distinction entre les occurrences (entité particulière d’un type
particulier) et les types (classe d’entités particulières ayant des propriétés
analogues)
 Conducteur, Accident et Voiture sont des types
 Paul est une occurrence du type Conducteur
 il y a une association entre Conducteur et Voiture (posséder, conduire)
1
 On indique les types d’entités et d’associations et d’autres informations, en
particulier les cardinalités
 ex. : un conducteur peut avoir plusieurs voitures, une voiture peut avoir plusieurs passagers 2

 Le modèle est “générique” : il ne comprend que les types (entités, associations),


pas les occurrences 3

11/05/2022 16
M3ES

Étapes de la construction du modèle E/A


 Définir les différents types d’entités
 Définir les propriétés des types d’entités
 Déterminer l’identifiant de chaque type d’entité
 Définir les associations avec leurs propriétés éventuelles
 Déterminer les cardinalités de chaque type d’association
1

11/05/2022 17
M3ES

Attributs
 Un attribut (ou propriété) permet de décrire une entité. Un attribut peut être :
 obligatoire ou facultatif
 mono-valué ou multi-valué
 simple ou composé

 L’identifiant d’un type d’entité est une propriété (ou un ensemble de propriétés)
1
qui caractérise de manière unique chaque occurrence du type d’entité. C’est une
propriété obligatoire dans chaque entité.
2

11/05/2022 18
M3ES

Associations
 La dimension (l’arité ou le degré) d’un type d’association est le nombre
d’occurrences d’entités concernées par une association de ce type

 La cardinalité minimum (maximum) du type d’entité X pour le type d’association


A est le nombre minimum (maximum) de fois qu’une occurrence du type d’entité
X participe au type d’association A 1
 ex. : 1 à n voitures peuvent être impliquées dans un accident, une voiture peut être
impliquée dans 0 à m accidents
2

11/05/2022 19
M3ES

Associations
 On définit la fonctionnalité du type d’association A d’après les cardinalités
maximum de X et Y pour A
 un à un (1-1) : à toute occurrence de X ne correspond qu’une occurrence de Y et
réciproquement
 un à plusieurs (1-n) : à toute occurrence de X correspondent plusieurs occurrences de Y et à
toute occurrence de Y une seule de X
 plusieurs à plusieurs (m-n) : à toute occurrence de X correspondent plusieurs occurrences de 1
Y et réciproquement

11/05/2022 20
M3ES

Notation “crow’s foot”

(Source)
4

11/05/2022 21
M3ES

Exercices
Constuire un modèle E/A pour
 représenter les données de l’enquête OD
 représenter des accidents de la route, les usagers impliqués et leurs véhicules

11/05/2022 22
M3ES

Solution

11/05/2022 23
M3ES

Solution

11/05/2022 24
Modèle et bases de
M3ES données relationnels
201 UNITÉ 4
M3ES

Modèle relationnel
 Proposé en 1970 par Edgar F. Codd (Prix Turing)
 Il définit comment les données sont structurées (tables, clés, etc.)
 Il fournit des opérateurs permettant de manipuler les données :
l’algèbre relationnelle
 théorie fondée sur des notions mathématiques (théorie des ensembles, calcul des prédicats)
(voir notes)
1
 SQL est un langage hybride partiellement inspiré de l’algèbre relationnelle
2

11/05/2022 26
M3ES

Modèle relationnel
 Il est fondé sur le concept central de relation
 Deux terminologies différentes sont utilisées
 terminologie formelle : relation, attribut, n-uplet
 terminologie informelle : table, colonne/champ, ligne (ou rangée)

11/05/2022 27
M3ES

Modèle relationnel
 Le modèle relationnel peut être décrit par les trois aspects suivants :
 l’aspect structure indique comment les données du modèle relationnel de BD sont
structurées
 l’aspect intégrité spécifie les contraintes d’intégrité liées à la définition des données
 l’aspect manipulation fournit les opérateurs permettant de manipuler les données définies
par les structures
 Une base de données relationnelle (BDR) est définie par : 1
 son schéma qui est fixe
 son contenu ou extension qui varie dans le temps 2

11/05/2022 28
M3ES

Schéma d’une BDR


Le schéma d’une BDR est défini par
 un ensemble de domaines
 un ensemble de schémas de relations
 un ensemble de contraintes d’intégrité

11/05/2022 29
M3ES

Domaine
 Chaque domaine d’une BDR est identifié par un nom
 Un domaine peut être vu comme un type avec :
 une spécification des valeurs admissibles
 des opérateurs de comparaison
 d’autres opérations définies sur le domaine

11/05/2022 30
M3ES

Schéma d’une relation


 Le schéma d’une relation (table) décrit la structure (persistante) de la relation
 Chaque attribut (colonne, champ) de la relation est caractérisé par son nom et
son domaine
 Chaque n-uplet (ligne) est une observation avec une valeur pour chaque attribut

11/05/2022 31
M3ES

Exemple
Id Country Car MPG Weight Drive_Ratio Horsepower Displacement Cylinders
0U.S. Buick Estate Wagon 16.9 4.36 2.73 155 350 8
Ford Country Squire
1U.S. Wagon 15.5 4.054 2.26 142 351 8
Chevy Malibu
2U.S. Wagon 19.2 3.605 2.56 125 267 8
Chrysler LeBaron
3U.S. Wagon 18.5 3.94 2.45 150 360 8
4U.S. Chevette 30 2.155 3.7 68 98 4
5Japan Toyota Corona 27.5 2.56 3.05 95 134 4
6Japan Datsun 510 27.2 2.3 3.54 97 119 4
7U.S. Dodge Omni 30.9 2.23 3.37 75 105 4
8Germany Audi 5000 20.3 2.83 3.9 103 131 5 1
9Sweden Volvo 240 GL 17 3.14 3.5 125 163 6
10Sweden Saab 99 GLE 21.6 2.795 3.77 115 121 4
11France Peugeot 694 SL 16.2 3.41 3.58 133 163 6

12U.S.
Buick Century
Special 20.6 3.38 2.73 105 231 6
2
13U.S. Mercury Zephyr 20.8 3.07 3.08 85 200 6
14U.S. Dodge Aspen 18.6 3.62 2.71 110 225 6
15U.S. AMC Concord D/L 18.1 3.41 2.73 120 258 6 3
Chevy Caprice
16U.S. Classic 17 3.84 2.41 130 305 8
17U.S. Ford LTD 17.6 3.725 2.26 129 302 8
Mercury Grand
18U.S. Marquis 16.5 3.955 2.26 138 351 8 4
19U.S. Dodge St Regis 18.2 3.83 2.45 135 318 8
20U.S. Ford Mustang 4 26.5 2.585 3.08 88 140 4
https://archive.ics.uci.edu/ml/datasets/Auto+MPG
11/05/2022 32
M3ES

Exemple
 Revenons aux données des pays: quel est le problème de la structure des
données ? Peut-on facilement ajouter de nouvelles données ?

11/05/2022 33
M3ES

Contrainte d’intégrité
 Une contrainte d’intégrité est un énoncé invariant dans le temps qui doit
être satisfait par tous les états de la BDR
 Une contrainte d’intégrité peut aussi porter sur deux états successifs de la BD
(contrainte de transition)
 Une contrainte peut porter sur une ou plusieurs relations
1

11/05/2022 34
M3ES

Clé primaire
 Dans une relation, on doit pouvoir identifier chaque n-uplet de manière unique :
ceci est possible grâce à la clé primaire de la relation qui prend un valeur unique
pour chaque n-uplet
 Une clef primaire peut être constituée de plusieurs attributs et est alors appelée
clef primaire composite
 L’intégrité d’entité exige que : 1
 chaque relation possède une clé primaire déclarée (et une seule)
 aucun composant de la clé primaire ne peut prendre la valeur “NULL”
2

11/05/2022 35
M3ES

Clé externe
 Motivation : Pour faire référence, dans un n-uplet d’une relation R, à un n-uplet
d’une autre relation R’, on utilise la technique de clé externe. Pour cela, on
désigne dans R un ensemble d’attributs (appelé clé externe) qui fait référence à
la clé primaire de R’
 Pour représenter une référence non existante, on utilise la valeur “NULL”
 L’intégrité de référence exige que chaque valeur différente de “NULL” d’une clé 1
externe existe comme valeur de la clé primaire cible
2

11/05/2022 36
M3ES

Principes généraux du passage du modèle E/A au modèle relationnel

 Le critère est de minimiser le nombre de relations dans le modèle relationnel


résultant
 Un type d’entité X du modèle E/A correspond à une relation (table) du modèle
relationnel dont la clé primaire correspond à l’identifiant de X
 Un type d’association binaire m-n peut être représentée par une relation du
modèle relationnel dont la clé primaire est formée par les clefs primaires / 1
identifiants de toutes les entités participants dans A
 Un type d’association binaire 1-n peut être représentée par une clé externe du 2
modèle relationnel
 Un type d’association binaire 1-1 peut être représentée par une fusion de deux 3
relations du modèle relationnel
4

11/05/2022 37
M3ES

Exercices
 Construire le modèle relationnel pour les données de l’enquête OD et les
accidents de la route

11/05/2022 38
M3ES

Solution

11/05/2022 39
M3ES

Solution

11/05/2022 40
M3ES

Solution enquête déplacements

11/05/2022 41
M3ES

11/05/2022 42
M3ES

En résumé : base de données relationnelle


 Une BDR est constituée de plusieurs tables
 Une table est un ensemble de données organisées sous forme d’un tableau à
double entrée où les colonnes correspondent à des catégories d’information
(attributs) et les lignes à des enregistrements, ou entrées (élément, individu)
 chaque table a un nom unique dans une BD et chaque colonne a un nom unique dans une
table
 chaque colonne a un type de donnée associé 1
 chaque table a une clef primaire, qui doit avoir une valeur unique pour chaque ligne de la
table. Il est possible de créer une clef primaire en combinant les valeurs de plusieurs 2
colonnes, alors appelée clef primaire composite

11/05/2022 43
M3ES

En résumé : base de données relationnelle


 Modèle relationnel de la BD
 le schéma de la BD décrit sa structure : il est constitué du schéma de chacune des tables
 le schéma de chaque table contient la liste des colonnes et de leurs domaines (valeurs
possibles)
 Liens entre les tables : notion de clé externe
 toute l’information d’une BDR est contenue dans les tables
 il n’y a pas de références (pointeurs) entre tables ou entre lignes 1
 les liens entre les tables sont assurés par les clés externes : une clé externe est un attribut
(ou ensemble d’attributs) d’une table qui fait référence (le plus souvent) à la clé primaire 2
d’une autre table

11/05/2022 44
M3ES

Normalisation
 Hypothèse relationnelle impose respect d’un certain nombre de conditions pour
pouvoir être appliquée. Ce respect doit être effectif dès la phase de conception.
Ces conditions sont appélées conditions de normalisation ou formes normales
(Normal Form, NF en anglais). Ces conditions reposent sur la notion de
dépendance fonctionnelle (DF) entre propriétés.

 On dit que deux propriétés P1 et P2 sont en dépendance fonctionnelle (DF) de 2


P1 vers P2 si seulement si pour toute valeur de P1 il existe une valeur unique de
P2 associée: La connaissance de P1 détermine P2
3

11/05/2022 45
M3ES

Normalisation
 But : éviter la redondance de données au sein d’une même table, qui augmente
le risque de créer des anomalies (incohérences) lors de mises à jour

 Processus de normalisation : modification de la BD pour vérifier des formes


normales (définition formelle dans l’algèbre relationnelle) 1
 en pratique, on utilise la première, la deuxième et la troisième forme normale (1NF, 2NF,
3NF) 2
 cette opération implique le scindement de certaines tables, et souvent le dédoublement des
champs servant de clés au sein de la base de données
 la BD devient plus facile à gérer pour le SGBD (et les applications) 3

11/05/2022 46
M3ES

Première forme normale (1NF)


La première forme normale requiert
 qu’un même attribut ne contient pas plus d’une valeur (attribut atomique)
 que les colonnes soient uniques
 que chaque table a une clef primaire
 on évite par ex.
1
 de mettre tous les usagers impliqués dans un attribut de la table des accidents
 de mettre plusieurs déplacements par ligne (enregistrement)
2

11/05/2022 47
M3ES

Seconde forme normale (2NF)


La seconde forme normale requiert que tous les attributs d’une table soient
en rapport avec toute la clef primaire (et non seulement une partie). Cela permet
de gérer les relations “plusieurs à plusieurs” et revient à créer une table pour
chaque entité.
 ex. : dans la table commune de l’enquête OD, la clef primaire est une clef
composée des identifiants des ménages, personnes et déplacement, et les
attributs des ménages ou des personnes ne se rapportent qu’à une partie de la 1
clef primaire
2

11/05/2022 48
M3ES

Troisième forme normale (3NF)


La troisième forme normale requiert que tous les attributs d’une table soient liés
seulement à la clef primaire (et non les uns aux autres). Cela pousse
la simplification des tables en évitant les relations 1 à 1 où il y a des champs
descriptifs.
 Ex. : dans une table accidents, ajouter des informations en relation 1-1 avec des
colonnes (par exemple avec le lieu, comme le nombre d’habitants, etc.) va
mener à dupliquer de l’information qui n’est pas en rapport direct avec 1
les accidents
2

11/05/2022 49
M3ES

Exemple
 Modifier la table suivante représentant des informations d’accidents de la route
pour qu’elle suive les trois formes normales :

3
(Procédez dans l’ordre des formes normales et cherchez les redondances)
4

11/05/2022 50
M3ES

Solution

11/05/2022 51
M3ES

Exercice
Veuillez modifier la table suivante pour qu’elle suive les trois formes normales :

(Procédez dans l’ordre des formes normales et cherchez les redondances) 4

11/05/2022 52
M3ES

Solution

11/05/2022 53
M3ES

Dénormalisation
 Le résultat de la normalisation est une BD bien organisée qui devrait être facile à
maintenir
 Mais cela peut résulter en des accès lents aux données (recombinaison des
données lors des requêtes)
 “Dénormaliser” consiste à violer certaines formes normales pour que la BD
soient plus rapidement accessible ou pour des analyses 1

11/05/2022 54
M3ES Langage SQL
201 UNITÉ 1
M3ES

Algèbre relationnelle et langage SQL


 L’algèbre relationnelle est une théorie mathématique proche de la théorie
des ensembles qui définit des opérations qui peuvent être effectuées sur des
relations, des matrices (tables) contenant un ensemble de n-uplets
 Cela permet d’exprimer des requêtes portant sur une ou plusieurs tables de
la base de données
1

11/05/2022 56
M3ES

Le langage SQL
 SQL = Structured Query Language
 langage normalisé d’accès aux bases de données relationnelles
 supporté (de façon essentielle mais différente) par la plupart des SGBD
 plusieurs normes ANSI/ISO : SQL-86 (1986, 1989), SQL2 (1992), SQL3
(1999) puis SQL 2003, 2008 et 2011
 Avantages :
1
 simplicité d’utilisation
 déclarativité : l’utilisateur décrit le résultat et l’optimiseur de requêtes se 2
charge de définir un plan d’exécution efficace 3
 Remarque : SQL ne permet pas de formuler toutes les requêtes dont la
réponse peut être construite en utilisant un langage de programmation 4
traditionnel 5

11/05/2022 57
M3ES

Algèbre relationnelle et langage SQL


Les exemples de code SQL du cours ont été testés avec SQLite : il peut être
nécessaire de les adapter pour d’autres logiciels

11/05/2022 58
M3ES

Le langage SQL : ses différentes parties


 Le langage de définition des données (LDD) permet de définir des relations,
des vues et des contraintes d’intégrité
 CREATE TABLE, CREATE VIEW
 Le langage de manipulation des données (LMD) permet d’interroger une
base de données et de modifier son contenu
 SELECT
1
 INSERT, DELETE, UPDATE
 Le langage de contrôle des données (LCD) permet de contrôler la sécurité et 2
les accès aux données 3
 GRANT, REVOKE
4

11/05/2022 59
M3ES

Types SQL standard (domaines)


 Les types numériques comprennent :
 entiers : SMALLINT, INTEGER
 décimaux : FLOAT, REAL, DOUBLE PRECISION
 Les chaînes de caractères comprennent :
 CHAR ou CHAR(M) : chaîne de M caractères au maximum, stockée sur M caractères (M = 1 de
façon implicite)
 VARCHAR(M) : chaîne de M caractères au maximum, stockée sur un nombre effectif de caractères
précédés par un indicateur de longueur
1
 Les chaînes de bits et d’octets binaires comprennent :
 BIT ou BIT(N) : longueur fixe (N = 1 de façon implicite)
2
 BIT VARYING(N) : longueur variable
 Les types date et heure comprennent :
3
 DATE : date (jour, mois, an)
 TIME : heure (heure, minute, seconde, fraction de seconde)
4
 TIMESTAMP : date et heure
5

11/05/2022 60
M3ES

Opérateurs
 Égal =, différent <>, inférieur (ou égal) < <=, supérieur (ou égal) > >=
 Négation d’une condition NOT
 Intervalles BETWEEN <val1> AND <val2>
 Énumération IN (<val1>,<val2>,...)

11/05/2022 61
M3ES

Création d’un schéma de relation


SQL permet de créer un schéma de relation (une structure
de table) avec CREATE TABLE :

CREATE TABLE <nom_de_relation> (


<nom_d’attribut> <type_de_données> [NOT NULL]
[CHECK (<condition>)] [, ...]
[, PRIMARY KEY (<nom_d’attribut> [, ...] )]
[, UNIQUE (<nom_d’attribut> [, ...] ) [, ...] ] 1
[, FOREIGN KEY (<nom_d’attribut> [, ...] )
2
REFERENCES <nom_de_relation> [, ...] ]
[, CHECK (<condition>)] 3
);
4

11/05/2022 62
M3ES

Création d’une contrainte


Types de contraintes qu’on peut exprimer en SQL :

 PRIMARY KEY : clé primaire


 UNIQUE : clé candidate
 NOT NULL : attribut obligatoire
 FOREIGN KEY : clé externe
1
 CHECK : contrainte de vérification
 toute expression logique utilisable dans la clause WHERE d’une 2
requête, composée de conjonction (AND) et disjonction (OR) de
3
conditions sur les attributs
4

11/05/2022 63
M3ES

Table Accidents
CREATE TABLE Accidents (
id INTEGER PRIMARY KEY,
lieu VARCHAR(20),
date DATE,
heure TIME,
gravite CHAR
1
CHECK (gravite IN ("1","2","3","4","5","6")),
cout FLOAT); 2

11/05/2022 64
M3ES

Table Usagers
CREATE TABLE Usagers (
id INTEGER PRIMARY KEY,
nom VARCHAR(20),
sexe CHAR
CHECK (sexe IN ("h","f")),
datenaissance DATE);
1

11/05/2022 65
M3ES

Table Vehicules
CREATE TABLE Vehicules (
id INTEGER PRIMARY KEY,
marque VARCHAR(20),
modele VARCHAR(20),
type VARCHAR(20),
proprietaireID INTEGER,
1
FOREIGN KEY(proprietaireID) REFERENCES Usagers(id)
); 2

11/05/2022 66
M3ES

Table Implications
CREATE TABLE Implications (
accidentID INTEGER NOT NULL,
usagerID INTEGER NOT NULL,
vehiculeID INTEGER,
FOREIGN KEY(accidentID) REFERENCES Accidents(id),
FOREIGN KEY(usagerID) REFERENCES Usagers(id),
1
FOREIGN KEY(vehiculeID) REFERENCES Vehicules(id),
PRIMARY KEY(accidentID, usagerID) 2
);
3
Comment représenter si un usager impliqué dans un accident est le
4
conducteur ?
5

11/05/2022 67
M3ES

SQL
Fichier d’exemple de base de données d’accidents disponible sur
Teams

11/05/2022 68
M3ES

Exercice
Créer dans SQLitebrowser les tables pour l’enquête OD,
avec quelques attributs :

Ménages xdomi, ydomi, code postal, perslogi, autologi


Personnes age, sexe, p_mobil
Déplacements date/heure, motif
1

11/05/2022 69
M3ES

Suppression d’un schéma de relation


 SQL permet de supprimer un schéma de relation (une structure de table)
avec DROP TABLE

 L’extension de la relation (le contenu de la table) disparaît également lors


de la disparition de son schéma (sa structure)
DROP TABLE <nom_de_relation>;
1

 Il est possible de configurer la base de données pour empêcher la 2


suppression d’une table dont des colonnes sont référencées par d’autres 3
tables
4

11/05/2022 70
M3ES

Modification d’un schéma de relation


 SQL permet de modifier un schéma de relation (une structure de table) avec ALTER TABLE
 Modifier une structure de table avec ALTER TABLE :
 ajouter et supprimer une colonne,
 manipuler la valeur par défaut d’une colonne,
 ajouter, supprimer et manipuler une contrainte, etc.

ALTER TABLE <nom_de_relation>


ADD <nom_d’attribut> <type_de_données>; 1
ALTER TABLE <nom_de_relation>
ALTER <nom_d’attribut> <action>; 2
ALTER TABLE <nom_de_relation>
DROP <nom_d’attribut>; 3
ALTER TABLE <nom_de_relation>
DROP <nom_de_contrainte>; 4

11/05/2022 71
M3ES

Modification d’un schéma de relation


Exemples :

ALTER TABLE Accidents ADD meteo CHAR(20);


ALTER TABLE Usagers DROP nom;

Supprimer une colonne ne fonctionne pas dans SQLite


1

11/05/2022 72
M3ES

Création d’un index


SQL permet de créer (et supprimer) un index portant sur une colonne ou une liste
de colonnes d’une table
 Définition : un index portant sur les colonnes (A, B, C) de la table est un
ensemble d’éléments de la forme <valeur indexée, adresse de ligne>, ensemble
structuré comme un arbre (de recherche)
 Un SGBDR crée automatiquement un index sur la clé primaire de chaque table
1
et pour chaque clé candidate spécifiée par une contrainte UNIQUE
 Avantage : un index offre un chemin d’accès aux lignes d’une table 2
 Inconvénient : un index peut alourdir les mises à jour dans la table
3

11/05/2022 73
M3ES

Insertion ou suppression de lignes


 On peut insérer une ligne dans une table avec la commande INSERT, avec les valeurs
indiquées (ou le résultat d’un affichage avec SELECT)

INSERT INTO Accidents VALUES (1,"Montreal","2007-05-28",


"10:00:01", "1", 1000);

 On peut supprimer une ou plusieurs lignes d’une table avec DELETE. Il est possible de spécifier
une condition 1
 Exemple
2
DELETE FROM Accidents WHERE heure > "02:00:00";
3

11/05/2022 74
M3ES

Modification de lignes
 On peut modifier une colonne dans une ou plusieurs lignes d’une table avec la
commande UPDATE
 Une commande UPDATE permet de spécifier une condition
 La commande effectue la modification demandée (SET) pour la (les) ligne(s) qui
vérifie(nt) la condition indiquée
1
 Exemple
UPDATE Accidents SET cout = cout + 1500 2
WHERE gravite > 3;
3

11/05/2022 75
M3ES

Affichage des données


 On peut afficher les données d’une ou plusieurs tables avec la commande SELECT. La syntaxe de
base est :
SELECT <liste de colonnes affichées>
FROM <liste des tables concernées>
WHERE <condition>;

 Utilisation de ORDER BY <col> [ASC|DESC] pour trier les résultats


1
Exemple
SELECT * FROM Accidents WHERE lieu="Montreal"; 2
SELECT *, Accidents.cout*1.13 AS coutTaxes
FROM Accidents; 3
SELECT lieu, cout FROM Accidents
ORDER BY lieu, cout DESC; 4

11/05/2022 76
M3ES

Création d’une vue


 Une vue consiste en un ensemble de lignes en provenance d’une ou plusieurs
tables de la base de données, qui est obtenu à l’aide d’une interrogation SQL (un
énoncé SELECT)
 Syntaxe pour créer ou supprimer une vue :

CREATE VIEW <nom_de_la_vue> AS <énoncé_SELECT>;


DROP VIEW <nom_de_la_vue>; 1

11/05/2022 77
M3ES

Exercice
Créer une vue des accidents excluant les accidents les plus graves (6)

11/05/2022 78
M3ES

Affichage des données de plusieurs tables


 Produit Cartésien (“cross/natural join”)

SELECT … FROM table1, table2;

 Exemple

SELECT * FROM Usagers, Vehicules;


1
 La jointure (“inner join”) effectue un produit Cartésien des lignes des deux tables pour
lesquelles certaines valeurs correspondent 2

 Exemple 3
SELECT * FROM Usagers, Vehicules
WHERE Usagers.id=Vehicules.proprietaireID; 4
SELECT * FROM Usagers INNER JOIN Vehicules
ON Usagers.id=Vehicules.proprietaireID; 5

11/05/2022 79
M3ES

Exercice
Afficher toutes les données (inc. des usagers et véhicules) liées à un accident

Filtrer pour les accidents de Montréal

11/05/2022 80
M3ES

Exemples avec les trois tables


SELECT date, heure, gravite, U.sexe, U.nom
FROM Accidents A, Usagers U, Implications I
WHERE A.id=I.accidentID AND U.id=I.usagerID;

SELECT date, heure, gravite, UI.sexe, UI.nom


FROM Accidents A INNER JOIN
(SELECT * FROM Usagers U INNER JOIN
Implications I ON U.id=I.usagerID) UI 1
ON A.id=UI.accidentID
2
SELECT date, heure, gravite, U.sexe, U.nom FROM Accidents A
3
INNER JOIN Implications I ON A.id=I.accidentID
INNER JOIN Usagers U ON U.id=I.usagerID 4

11/05/2022 81
M3ES

Jointure gauche
 Jointure gauche ou droite : extension de la jointure pour inclure les lignes de la
table de gauche ou de droite sans correspondances dans l’autre table
SELECT * FROM Usagers LEFT OUTER JOIN Vehicules
ON Usagers.id=Vehicules.proprietaireID;

SELECT * FROM Usagers RIGHT OUTER JOIN Vehicules


1
ON Usagers.id=Vehicules.proprietaireID;
2

11/05/2022 82
M3ES

Fonctions d’agrégation
{COUNT|SUM|MIN|MAX|AVG|VARIANCE|STDDEV}(<expr>)

 La fonction renvoie une seule ligne (** indique que les valeurs à NULL ne sont pas prises en
compte)
 COUNT(*) : nombre de lignes
 COUNT(<col>) : nombre de valeurs de la colonne **
 COUNT(DISTINCT<col>) : nombre de valeurs distinctes **
 AVG(<col>) : moyenne des valeurs de la colonne ** 1

 Exemples (sans groupement) 2

SELECT COUNT(*) FROM Usagers; 3


SELECT AVG (cout) FROM Accidents;
SELECT COUNT(DISTINCT lieu) FROM Accidents 4
WHERE date > "2008-01-01";
5

11/05/2022 83
M3ES

Select avec groupement


SELECT ... FROM ...
WHERE... GROUP BY <liste d’expressions>;

 Les lignes sont regroupées selon les agrégats de valeurs correspondant à la liste
d’expressions spécifiée. Les fonctions d’agrégation éventuelles s’appliquent à
chaque groupe.
 La clause SELECT ne peut contenir que des expressions de la liste donnée ou des 1
fonctions d’agrégation appliquées à d’autres expressions.
 Ce type de requête renvoie autant de lignes de résultat que de groupes. 2

3
 Exemples
SELECT lieu, MAX(cout) FROM Accidents 4
GROUP BY lieu;
5

11/05/2022 84
M3ES

Exercice
 Afficher le nombre d’accidents et la gravité de l’accident le plus grave dans
chaque ville
 Afficher le coût moyen des accidents par niveau de gravité (et par ville)

11/05/2022 85
M3ES

Select avec groupement et condition


SELECT ... FROM ... WHERE...
GROUP BY <liste d’expressions> HAVING <condition>;

 La clause HAVING filtre les groupes de lignes obtenus selon la condition


spécifiée
 Les expressions utilisées dans la clause HAVING peuvent contenir des critères
de regroupement ou des fonction d’agrégation 1

2
 Exemple
SELECT gravite, AVG (cout) FROM Accidents 3
GROUP BY gravite
HAVING MAX(cout)<2000; 4

11/05/2022 86
M3ES

Comparer
SELECT gravite, AVG (cout) FROM Accidents
GROUP BY gravite
HAVING MAX(cout)<2000;
et

SELECT gravite, AVG (cout) FROM Accidents 1


WHERE cout <= 2000
GROUP BY gravite; 2

11/05/2022 87
M3ES

Sous-requêtes
 Dans conditions WHERE (retour d’une seule valeur)
SELECT * FROM Accidents
WHERE cout >
(SELECT AVG(cout) FROM Accidents
WHERE lieu="Montreal");
SELECT * FROM Accidents
WHERE lieu IN
(SELECT lieu FROM Accidents WHERE gravite >2); 1

2
 La condition EXISTS est vraie si la sous-requête retourne au moins une ligne
SELECT * FROM Vehicules V 3
WHERE EXISTS
(SELECT * FROM Usagers U 4
WHERE U.id=V.proprietaireID
AND U.sexe="h"); 5

11/05/2022 88
M3ES

Sous-requête dans la clause FROM


Remplacer une table dans la clause FROM par une sous-requête (qui peut être
nommée)
SELECT * FROM Vehicules V,
(SELECT * FROM Usagers WHERE sexe="h") UH
WHERE V.proprietaireID=UH.id
AND V.type IN ("velo","moto");
1

11/05/2022 89
Bases de données
M3ES spatiales
201 Unité 5
M3ES

Bases de données spatiales


 Les objets géométriques sont un type de données binaire (“blob”)
 Outils sous licence libre (“open source”) : PostGIS, SpatiaLite
 exemples de données GitHub

11/05/2022 91
M3ES

Fonctions spatiales
Ajout d’opérations (fonctions) spatiales : Reference List
 Créer un point : MakePoint(col_X,col_Y,SRID)
 Créer une ligne : MakeLine(Col_geom1,Col_geom2)
 Sortir les coordonnées d’une géométrie de point :
X(Col_geom), Y(Col_geom)
 Calculer la longueur d’une géométrie :
ST_Length(Col_geom) 1
 Calculer la surface d’une géométrie : 2
ST_Area(Col_geom)
 Créer un buffer : ST_Buffer(Col_geom,Valeur) 3
 Changer le système de projection : 4
Transform(Col_geometry,Nouveau_SRID)
5

11/05/2022 92
M3ES

Fonctions spatiales
Ajout d’opérations (fonctions) spatiales : Reference List
 geom3 = Intersection(geom1, geom2)
 geom3 = Difference(geom1, geom2)
 geom3 = GUnion(geom1, geom2)
 geom3 = SymDifference(geom1, geom2)
1

11/05/2022 93
M3ES

Fonctions spatiales
Ajout d’opérations (fonctions) spatiales : Reference List
 Égal Equals(geom1, geom2)
 Intersecte Intersects(geom1, geom2), Crosses(geom1, geom2)
 Adjacent Touches(geom1, geom2)
 Contient Contains(geom1, geom2), Within(geom1,geom2)
1
 Recouvre Overlaps(geom1, geom2)
2

11/05/2022 94
M3ES

Fonctions spatiales
Ajout d’opérations (fonctions) spatiales : Reference List
 Ajouter une colonne avec des objets spatiaux :
AddGeometryColumn(table, geom, srid, geometry type,
dimension model)
 Récupérer une colonne comme objet spatial :
RecoverGeometryColumn(table, geom, srid, geometry 1
type, dimension model)
2
 Types de géométries
3

11/05/2022 95
M3ES

Exemples de requêtes spatiales


SELECT A.PK_UID AS accidentID, G.PK_UID AS rueID,
MIN(DISTANCE(A.Geometry, G.Geometry)),
ST_length(G.Geometry) as longueur
FROM accidents0 A, geobase0 G
GROUP BY A.PK_UID
1

11/05/2022 96
M3ES

Exemples de requêtes spatiales


SELECT G.PK_UID, G.NOM_VOIE, count(*),
count(*)/ST_Length(G.Geometry) as taux
FROM (SELECT A.PK_UID AS accidentID,
G.PK_UID AS rueID,
MIN(DISTANCE(A.Geometry, G.Geometry)),
1
ST_length(G.Geometry) as longueur
2
FROM accidents0 A, geobase0 G
GROUP BY A.PK_UID) A, geobase0 G 3

WHERE A.rueID=G.PK_UID 4
GROUP BY G.PK_UID 5

11/05/2022 97
M3ES

Exemples de requêtes spatiales


CREATE TABLE acc_outremont(id integer,
gravite varchar)

SELECT AddGeometryColumn("acc_outremont", "geom",


2950, "POINT", "XY")
1
INSERT INTO acc_outremont
2
SELECT A.PK_UID, A.GRAVITE, A.Geometry
FROM accidents0 A, secteurs S 3

WHERE Contains(S.Geometry, A.Geometry) 4


AND S.SM13 = 121 5

11/05/2022 98
M3ES Merci.
Nicolas Saunier et Dares KOUAME
201 nicolas.saunier@polymtl.ca ;
dares.kouame@ensea.ed.ci

Vous aimerez peut-être aussi