From f069304b461421f9226d562574b340a9f7bde6b8 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Fri, 18 Feb 2022 01:34:26 +0100 Subject: [PATCH] Modify relationnal algebra course --- .../3-algebre_relationnelle/index.md | 53 ++++++++++++++++++- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/content/bdd_avancees/3-algebre_relationnelle/index.md b/content/bdd_avancees/3-algebre_relationnelle/index.md index b7e5973..45d5d24 100644 --- a/content/bdd_avancees/3-algebre_relationnelle/index.md +++ b/content/bdd_avancees/3-algebre_relationnelle/index.md @@ -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 + +\\(\\{ \ | \exists \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).