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]
|
||||
\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).
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue