Base de données
Florent Capelli
| Personnes | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
On manipule les relartions via des opérateurs :
R ∪ S : les lignes qui sont à la fois dans R et S.
| Personnes1 | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| Personnes2 | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 4 | LaMalice | Denis | 8 |
| Personnes1 ∪ Personnes2 | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| 4 | LaMalice | Denis | 8 |
R \ S : les lignes qui ne sont que dans R.
| Personnes1 | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| Personnes2 | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 4 | LaMalice | Denis | 8 |
| Personnes1 \ Personnes2 | |||
| id | nom | prénom | âge |
|---|---|---|---|
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
R × S : on a les colonnes de R et de S et toutes les paires de tuples possibles.
| Personnes | |||
| idPersonnes | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| Langages | |
| idLangages | nomLangage |
|---|---|
| 1 | C |
| 2 | Haskell |
| Personnes × Langages | |||||
| idPersonnes | nom | prénom | âge | idLangages | nomLangage |
|---|---|---|---|---|---|
| 1 | Cooper | Alice | 22 | 1 | C |
| 1 | Cooper | Alice | 22 | 2 | Haskell |
| 2 | Moran | Bob | 54 | 1 | C |
| 2 | Moran | Bob | 54 | 2 | Haskell |
| 3 | Prade | Caroline | 32 | 1 | C |
| 3 | Prade | Caroline | 32 | 2 | Haskell |
σF(R) : on ne sélectionne que les tuples de R qui satisfont une formule F.
| Personnes | |||
| idPersonnes | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| σage > 30(Personnes) | |||
| idPersonnes | nom | prénom | âge |
|---|---|---|---|
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
R⋈x = x′S souvent utilisé est un raccourci à σx = x′(R(x,y)×S(x′,y′))
ΠC(R) : on ne garde que les attributs (colonnes) c ∈ C dans R
| Personnes | |||
| idPersonnes | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| Πnom, prénom(Personnes) | |
| nom | prénom |
|---|---|
| Moran | Bob |
| Prade | Caroline |
ρA → B(R) : on renomme l’attribut (colonne) A de R en B.
| Personnes | |||
| idPersonnes | nom | prénom | âge |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
| ρnom → lname(ρprénom → fname(ρâge → age(Personnes))) | |||
| idPersonnes | lname | fname | age |
|---|---|---|---|
| 1 | Cooper | Alice | 22 |
| 2 | Moran | Bob | 54 |
| 3 | Prade | Caroline | 32 |
SELECT id, nom, prénom
FROM ((SELECT id,nom,prénom,âge as x FROM Personnes1) UNION (SELECT id,nom,prénom,âge as x FROM Personne2))
WHERE x>30Πid, nom, prénom(σx > 30(ρâge → x(Personnes1∪Personnes2)))
pareil que
R(id,nom,prénom) ≡ ∃x.((P1(id,nom,prénom,x)∨P2(id,nom,prénom,x))∧x>30)
dans une interprétation où le prédicat P1 correspond à la table Personnes1 et P2 correspond à la table Personnes2.
Toute expression de l’algèbre relationnelle peut s’écrire en logique du premier ordre avec seulement des quantificateurs existentiels!
| LPO | A.R | Prédicat | Nom de Relation |
|---|---|
| Interprétation d’un prédicat | Relation / Table |
| Variables | Attributs | ∨ | ∪ |
| S(x) ∧ ¬T(x) | S \ T |
| ∧ | ⋈ |
| ∃x.S(x,y,z) | Πy, zS(x,y,z) |
| S(x,y,z) ∧ F(x,y,z) | σF(S) |
| Renommer variable libre | ρ |
Contraintes de base de données :
Une base de données respectant des contraintes peut être vue comme un modèle fini d’une théorie encodant ces contraintes !