Bonsoir John,
Envoyé par
johnny3
sauf si ma logique est erronée, si l'on a:
- RES1 = tous les réalisateurs qui sont aussi acteurs. 3 possibilités: ils ont réalisé des films sans jouer dedans, ils ont joué dans des films sans les réaliser, ou ils ont réalisé et joué dans tout ou partie de leurs films.
- RES2 = tous les réalisateurs qui sont acteurs dans leurs propres films,
- RES1 - RES2, on obtient les réalisateurs qui ont joué dans au moins 1 de leurs propres films, ceux qui ont joué dans des films sans y jouer et ceux qui ont joué dans des films sans les réaliser.
Êtes-vous d'accord?
Pas précisément.
Je n’ai pas le mode d’emploi pour la lecture de vos expressions, du genre :
projection(LESFILMS.réalisateur; sélection(acteur=réalisateur; jointure(LESFILMS.titre LESACTEURS.titre; LESFILMS; LESACTEURS))
Mais peu importe. Soit RESx l’ensemble des réalisateurs qui n’ont jamais joué dans un de leurs propres films.
Considérons le cas de Roger qui a réalisé le film "Johnny transpire" mais qui n’a jamais été acteur (tant dans ses propres films que dans ceux des autres),
donc Roger est un élément de RESx.
Vous dites que RES1 est l’ensemble des réalisateurs qui sont aussi acteurs :
Roger n’est donc pas élément de RES1 et par conséquent de RES1 - RES2.
Roger étant élément de RESx, RES1 - RES 2 n’est pas égal à RESx.
La formule permettant de produire RES1 est manifestement à revoir.
En notation Tutorial D, voici comment on peut écrire la chose :
1 2 3 4 5
| WITH
LESFILMS {Réalisateur, Titre} AS P1,
LESACTEURS {Acteur, Titre} AS P2,
(P2 RENAME Acteur AS Réalisateur) AS P3,
(P1 MINUS P3) {Réalisateur} AS RES1 : RES1 |
Explications :
WITH est un mot-clé permettant de déclarer une liste d’opérations relationnelles (séparées par des virgules) et dont l’objet est de faciliter la rédaction et la lecture d’expressions complexes.
1) L’expression
LESFILMS {Réalisateur, Titre} AS P1
correspond à l’opération suivante :
Projection de la relation LESFILMS sur les attributs Réalisateur et Titre ; le résultat est une relation appelée P1.
2) L’expression
LESACTEURS {Acteur, Titre} AS P2
correspond à l’opération suivante :
Projection de la relation LESACTEURS sur les attributs Acteur et Titre ; le résultat est une relation appelée P2.
3) L’expression
P2 RENAME Acteur AS Réalisateur
correspond à l’opération suivante :
Changer le nom de l’attribut Acteur de la relation P2 en Réalisateur ; le résultat (au moins conceptuellement parlant) est une relation appelée P3.
Ce changement de nom est nécessaire, à cause de l’opération de différence qui suit, car en Tutorial D, les relations opérandes des opérateurs relationnels UNION, INTERSECT, MINUS doivent être du même type, ce qui signifie que leurs attributs doivent avoir le même nom et être du même type.
4) L’expression
(P1 MINUS P3) {Réalisateur}
correspond au couple d’opérations suivantes :
Différence entre P1 et P3 puis projection du résultat sur l’attribut Réalisateur pour obtenir finalement RES1.
Exemple :
René a réalisé "Zorro arrive" sans y jouer, il a réalisé "La fête chez DVP" et il y a joué. Il a joué dans "Les rois du sport" qu’il n’a pas réalisé.
Raoul a réalisé "Les rois du sport" sans y jouer et il a joué dans "Johnny transpire" qu’il n’a pas réalisé.
Roger a réalisé "Johnny transpire" et n’a joué dans rien du tout.
Robert a réalisé "DVP en délire" et il y a joué.
Berthe a joué dans "La fête chez DVP" mais n’a rien réalisé.
P1 contient les tuples suivants :
<René, Zorro arrive>
<René, La fête chez DVP>
<Raoul, Les rois du sport>
<Roger, Johnny transpire>
<Robert, DVP en délire>
P2 et P3 contiennent les tuples suivants :
<René, La fête chez DVP>
<René, Les rois du sport>
<Raoul, Johnny transpire>
<Robert, DVP en délire>
<Berthe, La fête chez DVP>
P1 MINUS P3 donne :
<René, Zorro arrive>
<Raoul, Les rois du sport>
<Roger, Johnny transpire>
La projection sur l’attribut réalisateur donne RES1 :
<René>
<Raoul>
<Roger>
Intervient RES2 qui correspond à une projection sur l’attribut Réalisateur de la jointure naturelle des relations LESFILMS et LESACTEURS et qui permet de connaître les réalisateurs qui ont joué dans les films qu’ils ont réalisés :
<René>
<Robert>
RES1 MINUS RES2 donne :
<Raoul>
<Roger>
Raoul et Roger n'ont pas joué dans leurs propres films, mais ils ont pu jouer dans les films qu'ils n'ont pas réalisés.
Partager