£ \newcommand{\cC}{{\cal C}} \newcommand{\cT}{{\cal T}} \newcommand{\cE}{{\cal E}} \newcommand{\cP}{{\cal P}} \newcommand{\cB}{{\cal B}} \newcommand{\cU}{{\cal U}} \newcommand{\cA}{{\cal A}} \newcommand{\cL}{{\cal L}} \newcommand{\cG}{{\cal G}} \newcommand{\cH}{{\cal H}} \newcommand{\cS}{{\cal S}} \newcommand{\cN}{{\cal N}} \newcommand{\cD}{{\cal D}} \newcommand{\C}{\mathbb{C}} \newcommand{\N}{\mathbb{N}} \newcommand{\E}{\mathrm{E}} \newcommand{\R}{\mathbb{R}} \newcommand{\P}{\mathrm{P}} \newcommand{\Q}{\mathbb{Q}} \newcommand{\U}{\mathbb{U}} \newcommand{\Z}{\mathbb{Z}} \newcommand{\L}{\mathbb{L}} \newcommand{\1}{\mathbb{1}} \newcommand{\puiss}{e\thinspace \mbox{\small -}} \newcommand{\esp}{\thinspace} \newcommand{\tr}{{}^t \negthinspace} £

Linux,
shell,
et TPs

Système d'exploitation (OS)

Ensemble de programmes qui dirige l'utilisation des capacités d'un ordinateur par des logiciels applicatifs (Wikipedia)

  1. Application : Enregistre fichier.pdf dans ~/Downloads/"
  2. OS : Calcule la taille de fichier.pdf, détermine l'allocation mémoire
  3. Disque dur : Effectue la copie en mémoire selon les instructions données par l'OS
  4. OS : Notifie l'application appelante quand la copie est achevée
Note : l'OS effectue également des tâches plus haut niveau (gestion des utilisateurs ...etc).

Un peu d'histoire

Unix est un ancien système d'exploitation (OS), écrit en langage C au début des années 1970.

Philosophie :
  • "The power of a system comes more from the relationships among programs than from the programs themselves" (Brian Kernighan & Rob Pike)
  • "Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface" (Doug McIlroy)
Possible référence : The Art of Unix Programming par Eric S. Raymond (inventeur du KISS principle : Keep It Short and Simple).
Unix a inspiré divers systèmes d'exploitation modernes dont :
  • FreeBSD
  • OS X (Apple)
  • Android (Google) ; basé sur le noyau Linux
  • ...
  • Linux : un noyau (coeur de l'OS, dialoguant avec le matériel), en général associé au projet GNU (divers utilitaires) ; nombreuses variantes :

Les commandes de base

Le dialogue avec la machine peut se faire de deux façons :
  1. Par l'intermédiaire d'applications (souvent graphiques)
  2. En ligne de commande
La première méthode a l'avantage d'être plus visuelle et intuitive, mais est également plus limitée. On privilégie en général la seconde pour des tâches spécifiques, personnalisées.

L'arborescence des fichiers

Sous Linux, tout est considéré comme un fichier.
En résumé :
  • Le répertoire sur lequel vous travaillez (et avez vos divers fichiers de configuration) est /home/loginlogin désigne votre nom d'utilisateur.
  • Tous les autres répertoires (/etc, /usr, /dev, ...) sont réservés au système, et contiennent les programmes et librairies, des fichiers de configuration globaux, mais aussi des fichiers spéciaux pour les périphériques (disques durs, clés USB, imprimantes, ...)
Pour plus de précisions

Naviguer dans les fichiers

pwd #affiche le répertoire courant

cd .. #remonte dans le répertoire parent

cd rep1 #descend dans le répertoire "rep1"
#Le point "." est un raccourci pour le répertoire courant.
#On peut donc aussi écrire cd ./rep1

cd / #va à la racine

cd #raccourci pour revenir dans le répertoire de travail
   #(équivalent à cd /home/login)

#Le tilde est un alias pour /home/login. On peut donc écrire
cd ~/rep1
#au lieu de cd /home/login/rep1

Quelques commandes


ls [rep1] #liste les fichiers dans le répertoire courant [dans rep1]
ls -a[l] #liste aussi les fichiers cachés [en affichant les tailles et dates]

cp [-r] source destination #copie source vers destination [récursivement]
mv source destination #déplace source vers destination

mkdir folder #crée le répertoire folder
rm [-r[f]] fichiers #supprime [récursivement] les fichiers

touch file #crée ou met à jour file

ps -e #liste les processus en cours
kill -9 pid #arrête le processus d'identifiant pid
On peut régler les droits d'accès à un fichier (ou répertoire) à trois niveaux :
  1. Le propriétaire du fichier
  2. Le groupe auquel appartient le propriétaire
  3. Le reste du monde
Exemples :
  • /tmp est accessible à tout le monde en lecture/écriture
  • En général, le /home/login n'est accessible qu'au propriétaire
Plus d'informations
#Changer les droits d'accès ou le propriétaire :
chmod [-R] masque fichiers 
chown [-R] user:group fichiers
Page Wikipedia sur chmod

Transferts de fichiers

Analogue de la commande cp :

scp [-r]
    [login1@machine1:]/chemin/vers/fichiers1
    [login2@machine2:]/chemin/vers/fichiers2

Commande plus efficace pour mettre à jour un répertoire,
ou copier des fichiers de grande taille ou nombreux :

rsync -azP --delete [...]
    [login1@machine1:]/chemin/vers/fichiers1
    [login2@machine2:]/chemin/vers/fichiers2

Plus d'informations sur l'outil rsync
Voir aussi le manuel (man rsync ...)

Organisation des TP

Les TPs s'effectuent sur une machine distante, d'adresse IP 192.168.31.236.
Celle-ci n'est accessible que depuis les salles de TP (pas chez vous).
Au cas où vous souhaiteriez poursuivre certains TP chez vous, il suffit de récupérer les données et d'installer PostgreSQL.

Deux configurations sont envisageables :
  1. tout effectuer sur la machine distante 192.168.31.236 (en ligne de commande)
  2. écrire les réponses sur les ordinateurs de la salle TP, puis les envoyer

Votre login = première lettre du prénom suivie de première lettre du nom, suivie du rang alphabétique en cas d'ex-aequos (parmi ces ex-aequos).
Exemples : Samy BEN LEMRID £\rightarrow£ sb,
Exemples : Anaïs CHERCHALI £\rightarrow£ ac1 (avant Arnaud COULOMB)

Mot de passe envoyé par email (modifiable via la commande passwd)

Éditeurs en mode console

nano

Éditeur de texte simple, dans le terminal (donc utilisable sur 192.168.31.236).

nano <fichier> ouvre fichier en lecture/écriture.
Ensuite (^X signifie Ctrl + X) :

  • ^g affiche l'aide
  • ^r inclut le contenu d'un fichier
  • ^a (resp. ^e) retourne en début (resp. fin) de ligne
  • ^w (^\) recherche (et remplace) un motif
  • ^d supprime le caractère courant (sur le curseur)
  • ^k supprime la ligne courante. Elle peut être réinsérée avec ^u
  • ^o (resp. ^x) sauvegarde un fichier sans quitter (resp. en quittant) nano
Les principales commandes

vim

Éditeur proposant trois modes :
  • commande (le mode par défaut)
  • édition (après avoir tapé 'i')
  • "last-line" (après avoir tapé ':')
À tout moment on revient au mode commande en tapant Esc.
avantages / inconvénients

+ configurable, extensible (plugins), bonne coloration syntaxique par défaut

 - nécessite l'apprentissage de commandes pas toujours intuitives

Exemples :
  • en mode commande, dd supprime une ligne
  • :wq quitte vim en sauvegardant, :q! quitte sans sauvegarder

Navigateurs en mode console

elinks

Navigation

  • g : ouvrir la barre d’adresse
  • flèches haut/bas : aller au lien suivant (précédent)
  • ^n, ^p : se déplacer ligne par ligne de haut en bas
  • flèche gauche : page précédente

Divers

  • ^r : recharger la page en cours
  • / (slash) : rechercher dans la page
  • q (resp. Q) : quitter elinks (resp. sans confirmation)

Page elinks sur la doc Ubuntu

w3m

Navigation

  • K, J : scroll d'une ligne vers le haut/bas
  • TAB, ^u : aller au lien suivant/précédent
  • B : page précédente
  • R : recharger la page

Divers

  • /,? : recherche avant/arrière
  • ^h : voir l'historique
  • q, Q : quitter (avec ou sans confirmation)

Résumé des commandes
Voir aussi l'aide en ligne...

Quelques commandes utiles

Redirections

Une commande renvoit en général sa sortie sur l'écran.
On peut préférer envoyer sa sortie dans un fichier :

ps -eF > processes.txt #liste des processus en cours

(>> au lieu de > ajoute en fin de fichier)

On peut aussi changer l'entrée d'une commande :

R --vanilla --slave < script.R [> sortie]

Attention : il y a deux types de sorties,

En général on ne se proccupe que de la première, mais
pour certaines commandes il faut rediriger les deux :

valgrind programme > sortie.txt 2> erreurs.txt
#ou > fichier.txt 2>&1 : tout dans le même fichier

Exemple : rendre un programme "silencieux"

command >/dev/null 2>&1

Page wiki sur les redirections

Pipes

Pipe (ou tube, ou pipeline)

Mécanisme permettant de chaîner des processus de sorte que la sortie d'un processus (stdout) alimente directement l'entrée (stdin) du suivant. [Wikipedia]

Exemples :
  • locate fichier | less : liste les occurrences de fichier
  • cat fichier | shuf : affiche une permutation des lignes du fichier
  • man rsync | grep "\-z" : recherche une option dans le manuel de rsync
  • ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/'
    affiche l'adresse IP

Wildcards

Raccourcis pour désigner un ensemble de fichiers.
  • * : n'importe quelle chaîne de charactères (éventuellement vide)
  • ? : n'importe quel caractère
  • [] : un intervalle de caractères
  • {} : un ensemble d'expressions : wildcards, noms de fichiers, dossiers ...
Exemples :
  • ls -d ~/.[!.]* : les fichiers cachés ([!.] = "tout sauf un point")
  • ls file?? : les fichiers dont le nom commence par "file" suivi d'exactement deux caractères
  • ls -d [a-f]* : les fichers/dossiers commençant par une lettre de a à f
  • cp {*.txt,*.pdf} folder/ : copie tous les fichier texte et pdf dans folder/

Manipulations de texte

Chercher un motif dans un fichier :
grep motif fichier
Remplacer une chaîne de charactères dans un texte :
sed -i 's/recherche/substitut/g' fichier
Récupérer la seconde colonne dans un fichier CSV :
awk -F"," '{print $2}' fichier
Transformer les 'c' en 'h' :
echo "coucou" | tr 'c' 'h'

Exemple de session

#Connexion sur la machine des TPs
ssh auder@192.168.31.236

#Récupération de la liste des logins
m1im_users=`awk -F"\t" '{print $1}' ~/login_name_email`

#Code pour la création des comptes
cat accounts.sh | grep init_students -A5
#	'init_students' )
#	for username in $m1im_users; do
#		createUnixUser $username
#		createDbUser $username tpbd
#	done

#Lancement de psql avec redirection des erreurs
psql 2> error.txt
Alias (dans ~/.bashrc)

Mémorise une commande complexe sous un nom simple.

Exemples :

Quelques alias utiles

Prompt

Le texte affiché à gauche dans le terminal

À retenir :

Personnalisation possible. Un article complet

Introduction aux
bases de données

Introduction

Définition (large)

"Une base de données est une collection de données persistantes,
utilisées par les applications d’une entreprise."

Deux (trois) choix à faire :
  1. Modèle d'organisation des données ?
  2. Logiciel pour traiter les données ?
  3. Implémentation physique du modèle de données ?

Modèle de données

Comment organiser les données ?

En ligne dans un fichier texte : OK pour quelques lignes, laborieux au-delà.

Exemple : /etc/passwd sous Linux stocke des informations relatives aux utilisateurs.

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/usr/bin/nologin
daemon:x:2:2:daemon:/:/usr/bin/nologin
mail:x:8:12:mail:/var/spool/mail:/usr/bin/nologin
ftp:x:14:11:ftp:/srv/ftp:/usr/bin/nologin
http:x:33:33:http:/srv/http:/usr/bin/nologin
uuidd:x:68:68:uuidd:/:/usr/bin/nologin
dbus:x:81:81:dbus:/:/usr/bin/nologin
nobody:x:99:99:nobody:/:/usr/bin/nologin
(...)
Dans un tableau (type Excel)

+ plus lisible qu'un fichier texte, accès en ligne ou colonne

 - difficile de stocker une structure (hiérarchique, composition ...).

Exemple (où un tableau est adapté) : les notes des étudiants

Dans un arbre : adapté à certains types de données

Arbre généalogique
Compétition à élimination directe

...Moins à d'autres : ensemble des villes du monde ?

Dans un graphe : adapté à certains types de données

Réseau social
Réseau de villes

En fait on peut adapter la plupart des données à un modèle graphique,
car elles sont de plus en plus interconnectées ; un article intéressant

Le modèle relationnel

La base de données est composée d'un ensemble de tables (les relations) dans lesquelles sont placées les données ainsi que les liens. Chaque ligne d'une table est un enregistrement. [Wikipedia]

+ très répandu, suffisant dans la plupart des cas

 - pas de notion de voisinage (comme dans un graphe)

Historique :

  1. 196x : BdD hiérarchiques (exemple : Registre Windows)
  2. 1970 : article fondateur des BdD relationnelles (E.F. Codd)
  3. 1975 : modèle entité-association (E/A ; P. Chen)

Pensez une BdD relationnelle comme un ensemble de feuilles Excel :

Table "wind" de PostgreSQL
Un schéma SQL

Le schéma résume plusieurs "feuilles Excel" (les tables) par leur nom et leurs attributs (colonnes)

Ces tables sont liées par des attributs spéciaux (cf. suite du cours)

Base de données relationnelle = ensemble de tables

Table = matrice contenant des échantillons d'une entité

Rangées : individus

Colonnes : attributs

Illustration du contenu d’une BD relationnelle

Remarque : certaines colonnes font référence à d'autres tables.

Exemple : médiathèque

Objets modélisés (attributs non exhaustifs)

Adhérent
  • Nom, prénom.
  • Adresse, email.
  • Date de naissance.
Ressources
  • Livres : BD, romans [...]
  • Audio : CD [...]
  • Video : DVD, BlueRay [...]
Méta-infos
  • Catégories : aventure, comédie ...
  • Indice de popularité : compteur "j'aime/j'aime pas".

Requêtes (non exhaustives)

Utilisateur
  • Recherche par mot-clé (titre, auteur, ...), par catégorie ...
  • (Sous-)Tri par date/popularité/pertinence.

  • Emprunter la ressource Y (ID ?)
  • Mettre de côté la ressource Y (ID ?)
"Administrateur" :
  • Trouver tous les médias en retard ; avec plus de n jours de retard.
  • Trouver tous les médias en court d'emprunt par X (ID ?).
  • Trouver tous les médias en court d'emprunt par X et en retard.

Relations (non exhaustives)

Emprunt
  • Emprunteur (ID ?)
  • Ressource (ID ?)
  • Date.
Mise de côté (pour 3-6-12-24h)
  • Emprunteur (ID ?)
  • Ressource (ID ?)
  • Date.
Contraintes :
  • Médias empruntés pour 2 semaines maximum.
  • Un article mis de côté et non emprunté ne peut être réservé à nouveau par le même client pendant 24 heures.

Illustration d'une modélisation

Gestion de la base de données (non exhaustive ...)

Actions :
  • Enregistrement de nouveaux clients ?
  • Suppression de comptes ? Et/ou "mise en veille".
  • Notifications en cas de dépassement de la durée d'emprunt.
Contraintes :
  • La base doit revenir au dernier état stable après une coupure d'électricité par exemple.
  • n requêtes "simultanées" (conflictuelles...) doivent s'exécuter "séquentiellement".

Agence de voyage

Objets modélisés (draft)

Clients
  • Nom, prénom.
  • Adresse, email.
  • Date de naissance.
  • Numéro de CID, passeport.
Itinéraires
  • Identifiant, description ...
  • Succession d'étapes.
  • Tarif.
Étapes
  • Lieu de départ.
  • Lieu d'arrivée.
  • Transport.
  • Hébergement.
Lieux
  • Coordonnées GPS.
  • Type (aéroport, gare, autre).
  • Description.
Transports
  • Type : avion, train, bus, ...
  • Date et heure de départ.
  • Date et heure d'arrivée.
  • (Tarif.)
"Hébergements" (ou activités...)
  • Type : hôtel, chambre d'hôtes, ...
  • Date (et heure) d'arrivée.
  • Date (et heure) de départ.
  • (Tarif.)

Requêtes (non exhaustives)

Client
  • Recherche par étapes, par type de transport, d'hébergement ...
  • (Sous-)Tri par date/popularité/pertinence.

  • Réserver un voyage.
  • Mettre de côté un voyage.
"Administrateur" :
  • Trouver tous les clients passant par Moscou entre deux dates.
  • Chercher les clients ayant réservé un voyage de plus de 15 jours.
  • Chercher les clients réservant en moyenne plus de 2 voyages/an.

Relations (non exhaustives)

Voyage
  • Client.
  • Itinéraire.
  • Date (de la réservation).
  • (Tarif.)
Mise de côté (pour 24h)
  • Client.
  • Itinéraire.
  • Date (de la demande).
  • (Tarif.)

Contraintes d'intégrité : arrivée transport £\simeq£ arrivée hébergement,
Contraintes d'intégrité : cohérence des lieux (graphe) ...

Illustration d'une modélisation

Gestion de la base de données (non exhaustive ...)

Actions :
  • Enregistrement de nouveaux clients ? Suppression de comptes ?
  • Envoi de notifications par email ? Publicité (ciblée) ?
  • Mise à jour permanente des disponibilités et tarifs.
Contraintes :
  • La base doit revenir au dernier état stable après une coupure d'électricité par exemple.
  • n requêtes "simultanées" (conflictuelles ...) doivent s'exécuter "séquentiellement".
  • Minimiser le risque de perte de données (réplication ...).

Bilan

Beaucoup de problèmes "du monde réel" peuvent se traduire par des interactions entre différents acteurs.

Dans une base de données,

On distingue les points de vue

Plan du cours

Abbréviation : BdDR = Base de Données Relationnelle

  1. Algèbre relationnelle : origines mathématiques des BdDR
  2. La langage SQL : comment interroger une BdDR
  3. Conception des BdDR par la méthode MERISE
  4. Le langage PL/pgSQL pour dynamiser les bases
  5. Structure interne d'une BdDR, optimisation de requêtes

Algèbre relationnelle

Motivations

L'algèbre relationnelle introduite par E. F. Codd en 1970 définit les bases mathématiques des requêtes SQL.

L'algèbre relationnelle...

Définitions

"Mathématisation" d'une base de données...

Base de données = ensemble (fini) de tables.

Table = ensemble (fini) de relations.

Relation = n-uplet d'attributs.

Attribut = triplet (nom, type, valeur), ou
Attribut = valeur + header (nom, type) ;
Attribut = exemple : ("Vitesse", réel, 55.1)

Schéma = ensemble des headers (nom, type).

Remarque : les noms doivent être distincts, mais l'ordre n'importe pas :
Remarque : (attribut£_1£, attribut£_2£) £\equiv£ (attribut£_2£, attribut£_1£).

Opérateurs sur les attributs

Opérations usuelles entre entiers, réels, booléens... ; p.ex. :

£o(nom_1,nom_2,\dots)£ réalise l'opération ligne par ligne.

Utilisation :

  • filtres sur les tables (sélections).
  • résultats de requêtes.
Exemples
Nom volHeure départHeure arrivée
AF195210201425
EZS139220452150
TO356617151905
££\longrightarrow££
HA - HD
0405
0105
0150
ABC
123
213
316
££\longrightarrow££
£A < B \vee C > 5£
TRUE
FALSE
TRUE

Opérateurs sur les tables

Fonctions prenant en paramètre une ou plusieurs tables,
et renvoyant toujours une table (éventuellement vide).

Exemple : (jointure sur numéro client)

PrénomDate de naissanceNuméro client
Pauline25/10/19911
Matthieu15/12/19902
Vincent15/03/19853
Amandine10/06/19824
Numéro clientPoints
1150
3170
5140
7160

££\Downarrow££

PrénomDate de naissanceNuméro clientPoints
Pauline25/10/19911150
Vincent15/03/19853170

Opérateurs intra-tables

Projection

Restriction sur les colonnes :
£\pi[C_1,\dots,C_k](T)£ ne garde que les colonnes £C_1£ à £C_k£ de la table £T£.

Exemple : £\pi[nom,capitale](Pays)£

Équivalent SQL : SELECT

Sélection

Filtre sur les rangées :
£\sigma[C](T)£ ne garde que les rangées de £T£ vérifiant la condition £C£.

Exemple : £\sigma[surface < 100](Pays)£

Équivalent SQL : WHERE

Exercice

Requête = £\pi_{nss,nom}(\sigma_{age < 30 \vee prenom='Solange'}(Personnes))£

nssnomprénomâge
12AymardSerge45
18AymardHélène28
45FenouilSolange35
Personnes
nssnom
18Aymard
45Fenouil
Résultat
Renommage

Il faut renommer un attribut s'il entre en conflit avec des attributs d'autres tables.
Syntaxe : £\alpha[£nom_attribut : nouveau_nom£](T)£

Exemple :
£\alpha[£nom : nom_pays£](\pi[nom,capitale](\sigma[surface < 100](Pays)))£

Équivalent SQL : AS

Agrégation

Opérateur sur une (voire plusieurs) colonne : AVG(nom1 x nom2).

Retourne en général un scalaire (1 ligne 1 colonne).

Exemples :

où £T£ est une table pouvant résulter d'une opération complexe.

Exercices

Quelle opération transforme la table ?

ABC
123
233
311
451
££\Rightarrow££
ZBC
233
311

£\alpha[A:Z](\sigma[B=C](T))£

ABC
123
214
342
431
££\Rightarrow££
AC
13
32

£\pi[A,C](\sigma[A < B](T))£

Opérateurs inter-tables

Opérations ensemblistes

Soient deux tables £T_1(A_1,\dots,A_n), T_2(A_1,\dots,A_n)£ (même attributs).
On note £\mathcal T£ l'espace des n-uplets d'attributs.

Mots-clés PostGreSQL : UNION, INTERSECT, EXCEPT.

Exemple/exercice :

AB
ab
yz
bb
£T_1£
AB
uv
yz
£T_2£
Produit cartésien

Soient deux tables £T_1(A_1,\dots,A_n), T_2(B_1,\dots,B_m)£.

Définition :
£T_1 \times T_2 = \{ t = (t_1, t_2) / t_1 \in \mathcal T_1, t_2 \in \mathcal T_2 \}£.
Les lignes de £T_1£ sont concaténées avec celles de £T_2£.
Équivalent SQL : SELECT ... FROM T1, T2.

Exemple/exercice :

AB
ab
yc
bb
£T_1£
CDE
cvy
bzu
£T_2£
Jointure

Soient deux tables £T_1(A_1,\dots,A_n), T_2(B_1,\dots,B_m)£.
Soit une condition £\mathcal C£ portant sur les valeurs d'attributs.

Définition :
£T_1 \underset{\mathcal C}{\bowtie} T_2 = \{ t = (t_1, t_2) / t_1 \in \mathcal T_1, t_2 \in \mathcal T_2, \mathcal C(t_1,t_2) \}£.
On ne retient que les lignes concaténées qui vérifient £\mathcal C£.
Notation alternative : £\bowtie[\mathcal C](T_1,T_2)£.

Exemple/exercice :

AB
11
22
33
£T_1£
CDE
123
234
£T_2£

£\mathcal C \equiv A \neq C£ ?
£\mathcal C \equiv B = D£ ?
£\mathcal C \equiv A > C£ ?

Remarque : si £C£ n'est pas indiquée, une jointure naturelle est réalisée.

Illustration
cinema=> select * from role;

idfilm | idacteur |   nomrole
-------+----------+--------------
     2 |        5 | Ripley
     5 |       11 | Sean Archer
     5 |       12 | Castor Troy
     6 |       14 | Ichabod Crane
    17 |       11 | Vincent Vega
cinema=> select * from artiste;

idartiste |    nom    |  prenom
----------+-----------+----------
        3 | Hitchcock | Alfred
        5 | Weaver    | Sigourney
       10 | Woo       | John
       11 | Travolta  | John
       14 | Depp      | Johnny

Jointure sur "idacteur = idartiste" :

cinema=> select * from artiste join role on idartiste=idacteur;

idartiste |   nom    |  prenom   | idfilm | idacteur |   nomrole
----------+----------+-----------+--------+----------+--------------
        5 | Weaver   | Sigourney |      2 |        5 | Ripley
       11 | Travolta | John      |     17 |       11 | Vincent Vega
       11 | Travolta | John      |      5 |       11 | Sean Archer
       14 | Depp     | Johnny    |      6 |       14 | Ichabod Crane
Exercice
ENOENOMPROFDNO
10JoeIngénieur3
20JackTechnicien2
30JimVendeur1
40LucyIngénieur3
Employés (E)
DNODNOMVILLE
1CommercialNew York
2ProductionHouston
3DéveloppementBoston
Départements (D)

Obtenir les numéros des employés travaillant à Boston.

£\pi_{ENO}(\sigma_{VILLE='Boston' \wedge E\_DNO=D\_DNO}(E \times D))£, ou
£\pi_{ENO}\left(E \underset{E\_DNO=D\_DNO}{\bowtie} \sigma_{VILLE='Boston'}(D)\right)£

Division

Soient deux tables £T_1(A_1,\dots,A_n), T_2(A_{i_1},\dots,A_{i_k})£ avec £i_j \in [ 1,n ]£.

Définition (£T_2 \subset T_1£) :
£T_1 \div T_2£ = sous-ensemble (maximal) de £T_1£ noté £T'_1£ vérifiant £T'_1 \times T_2 \subset T_1£.
Sous-ensemble de £T_1£ qui concaténé à tout £T_2£ donne un sous-ensemble de £T_1£.

Exemple/exercice :

ABCD
abcd
abef
ghcd
ijkl
£T_1£
CD
cd
ef
£T_2£

£T_1 \div T_2 =£ ?

Exemple

Dividende : T_ENTREPOT

VILLE_ETPRAYON_ETP
PARISboisson
PARISfrais
PARISconserve
LYONboisson
LYONconserve
LYONdroguerie
MARSEILLEboisson
MARSEILLEfrais
MARSEILLEconserve
MARSEILLEdroguerie
ANGERSboisson
ANGERSfrais
ANGERSdroguerie
TOULOUSEboisson
TOULOUSEfrais
TOULOUSEconserve
TOULOUSEdroguerie

Diviseur : T_RAYON

RAYON_RYN
boisson
frais
conserve
droguerie

Question : quels sont les entrepôts qui approvisionnent tous les rayons ?

Résultat : T_RESULTAT

VILLE_ETP
MARSEILLE
TOULOUSE

Représentation arborescente

Une requête est une expression composée d'opérations de l'algèbre relationnelle. Elle permet d'élaborer les réponses à la plupart des questions que l'on peut poser à une base de données relationnelle.

Représentation sous forme d'arbre relationnel
  • Les feuilles sont étiquetées par les opérandes.
  • Les noeuds sont étiquetés par les opérateurs et leurs paramètres.

Exemple : £\pi[Nom](\sigma[IdCours='Algo'](\bowtie(CEN,ENAT)£

Extensions aux données incertaines

(Au moins...) Deux types d'incertitudes envisageables.

Applications :

Voir la page wikipedia.

Bilan

L'algèbre relationnelle a également un intérêt mathématique : cadre formel pouvant servir de point de départ à certaines extensions.

Remarque

Les tables sont en fait des multi-ensembles de n-uplets car des doublons apparaissent naturellement dans un résultat. On ne cherche pas à les éliminer systématiquement, car

  • ils peuvent être utiles (comptage p.ex.) ;
  • cela aurait un coût non négligeable.

/