Modify relationnal algebra course

This commit is contained in:
Yorick Barbanneau 2022-02-18 01:34:26 +01:00
parent a61170161e
commit f069304b46

View file

@ -188,7 +188,7 @@ t[acteur] = "Jay" \land s[acteur] = "Silent Bob" ) \\} \\)
\\( \\{
t | \exists s \in p(s[titre] = t[titre]
\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]
\\} \\)
@ -200,8 +200,57 @@ t | \exists \in p(\exists u \in f((s[\text{nom_cinemas}] = "UGC"
\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
*n_uplets* de façon unique sans pour autant en donner toutes leurs valeurs et
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).