Modify relationnal algebra course
This commit is contained in:
parent
a61170161e
commit
f069304b46
1 changed files with 51 additions and 2 deletions
|
@ -188,7 +188,7 @@ t[acteur] = "Jay" \land s[acteur] = "Silent Bob" ) \\} \\)
|
||||||
\\( \\{
|
\\( \\{
|
||||||
t | \exists s \in p(s[titre] = t[titre]
|
t | \exists s \in p(s[titre] = t[titre]
|
||||||
\land s[\text{nom_cinemas}] = "UCG"
|
\land s[\text{nom_cinemas}] = "UCG"
|
||||||
\land {\not} {\exists} u \in p( u[\text{nom_cinemas}] = "Megarama"
|
\land {\neg} {\exists} u \in p( u[\text{nom_cinemas}] = "Megarama"
|
||||||
\land u[titre] = t[titre]
|
\land u[titre] = t[titre]
|
||||||
\\} \\)
|
\\} \\)
|
||||||
|
|
||||||
|
@ -200,8 +200,57 @@ t | \exists \in p(\exists u \in f((s[\text{nom_cinemas}] = "UGC"
|
||||||
\land t[realisateur] = u[realisateur]
|
\land t[realisateur] = u[realisateur]
|
||||||
\\} \\)
|
\\} \\)
|
||||||
|
|
||||||
## Retour sur la notion de clé
|
### Retour sur la notion de clé
|
||||||
|
|
||||||
comme nous lavons abordé précédement, une clé est nécessaire pour identifier des
|
comme nous lavons abordé précédement, une clé est nécessaire pour identifier des
|
||||||
*n_uplets* de façon unique sans pour autant en donner toutes leurs valeurs et
|
*n_uplets* de façon unique sans pour autant en donner toutes leurs valeurs et
|
||||||
respecter leurs unicité.
|
respecter leurs unicité.
|
||||||
|
|
||||||
|
Plus formellement
|
||||||
|
|
||||||
|
* \\(X \text{ clé de } R(U) \textit{ avec } X \subseteq U \textit{ ssi } \forall
|
||||||
|
r:R(U) \\)
|
||||||
|
* \\(\forall t_1, t_2 \in r \\)
|
||||||
|
* \\(t_1\[X\] = t_2\[X\] \implies t_1 = t_2 \\)
|
||||||
|
* \\(\neg \exists Y \subset X \implies t_1[Y] = t_2[Y] \implies t_1 = t_2\\)
|
||||||
|
|
||||||
|
### Expression saine
|
||||||
|
|
||||||
|
Il est possible d'écrire en calcul algébrique des requêtes qui retourne un
|
||||||
|
relation infinie. Un exemple parlant avec les numéros de comptes :
|
||||||
|
|
||||||
|
* Soit \\(Numcompte(Num)\\)) avec l'instance \\(n\\)
|
||||||
|
* Et la requête \\(\\{ t | \neg t \in n \\}\\) représentant les numéros de
|
||||||
|
comptes non rencencés.
|
||||||
|
* si on considère que \\( Dom(Num) = IN \\) alors la réponse à la question est
|
||||||
|
infinie.
|
||||||
|
|
||||||
|
Un requête est saine si **quel que soit l'instance de la base** dans laquelle on
|
||||||
|
l'évalue, elle retourne **une réponse finie**.
|
||||||
|
|
||||||
|
## Calcul relationnel par domaine
|
||||||
|
|
||||||
|
Le calcul relationnel par domaine est un langage de requête non procédural. Il
|
||||||
|
ne fournit que la description de la requête et pas les méthodes pour la
|
||||||
|
résoudre. Elle prend la forme suivante:
|
||||||
|
|
||||||
|
\\(\\{ < x_1, x_2, ... , x_n> | P(x_1, x_2, ... , x_n)\\}\\)
|
||||||
|
|
||||||
|
* \\(< x_1, x_2, ... , x_n>\\) représente les variables de domaine résultant
|
||||||
|
* \\(P(x_1, x_2, ... , x_n)\\}\\) représente la formule similaire à ce que l'on
|
||||||
|
trouve dans la logique des prédicats
|
||||||
|
|
||||||
|
Si on reprends notre exemple des cinémas, la requête permettant de trouver les
|
||||||
|
films proposé à l'UGC est
|
||||||
|
|
||||||
|
\\(\\{ \<t\> | \exists <nc, t, h> \in p(nc = "UGC"\\}\\)
|
||||||
|
|
||||||
|
## Relation entre les trois langages
|
||||||
|
|
||||||
|
Toute requête exprimée en algèbre peut être exprimée par le calcul et toute
|
||||||
|
requête saine du calcul peut être expriméeapt une requête de l'algèbre. Les
|
||||||
|
trois langages sont donc **équivalent d'un point de vue de la puissance
|
||||||
|
d'expression**.
|
||||||
|
|
||||||
|
L'algèbre est un langage procédural (quoi et comment) alors que le calcul ne
|
||||||
|
l'est pas (seulement quoi).
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue