Introduction à l'utilisation d'OrientDB

Complémentaire : Grateful Dead Concerts

Exploitation de la base de données de démonstration

OrientDB est fournit avec une base de données de démonstration, permettant ainsi de se familiariser avec l'environnement et d'effectuer quelques requêtes. Nous allons donc utiliser cette base de donnée pour cet exercice.

Cette base contient les chansons chantées et écrites par le groupe de rock américain Grateful Dead, ainsi qu'un grand nombre d'artiste les ayant interprétées.

Elle est représentée par le modèle suivant :

Une chanson possède un nom, un type de chanson et le nombre de fois où elle a été chantée.

Un artiste possède seulement un nom.

Une chanson et un artiste sont liés par les relations "sung_by" et "written_by". Une chanson peut également être suivie d'une autre chanson lors d'un concert, cette relation est représentée par "followed_by".

Question

Compter le nombre de chanson enregistrées dans la base de données

Indice

Les nœuds peuvent être de type 'artist' ou 'song', il faut donc filtrer en fonction de cette propriété.

Solution
1
SELECT count(*) FROM V WHERE type="song"
2

Question

Récupérer la liste des rid des chansons chantées par l'artiste Welnick

Indice

Les chansons chantées par un artiste sont représentées par la relation "sung_by". C'est un arc entrant, partant d'une chanson vers l'artiste.

Il faut utiliser la fonction in('nom_relation')

Solution
1
SELECT in('sung_by') FROM V WHERE name="Welnick" AND type="artist"
2

Question

Modifier la requête précédente pour exploiter la liste de rid et afficher les chansons de façon explicite

Indice

Il faut utiliser la fonction expand()

Solution
1
SELECT expand(in('sung_by')) FROM V WHERE name="Welnick" AND type="artist"

Question

Même question que précédemment, mais en utilisant le mot-clé TRAVERSE

Indice

Il faut procéder par sous-requête. D'abord, récupérer les informations de l'artiste Welnick.

Indice

Ensuite, il faut appliquer le TRAVERSE à ce résultat

Solution
1
TRAVERSE in('sung_by') FROM (SELECT * FROM V WHERE name="Welnick" AND type="artist")
2

Question

Quelle différence notez-vous entre les deux résultats précédents ?

Solution

En utilisant TRAVERSE, le noeud représentant l'artiste Welnick reste présent dans les résultats.

En utilisant la méthode avec expand(), ce noeud n'est pas présent.

Conseil

L'utilisation de TRAVERSE est préférable lors de la visualisation du graphe, afin de visualiser les relations entre les résultats et le noeud sur lequel on a effectué le TRAVERSE.

Si l'on souhaite avoir la liste des résultats seuls, alors l'utilisation de expand() est plus facile et répond mieux aux attentes.

Question

Afficher les chansons chantées par Welnick sous forme de graphe

Indice

Pour visualiser les résultats sous forme de graphe, il faut se rendre dans l'onglet "Graph" d'OrientDB Studio

Solution

Il suffit d'utiliser la requête précédente

Question

Afficher le nom des artistes qui ont écrit les chansons chantées par Welnick

Indice

Il faut une nouvelle fois procéder par sous requête.

D'abord, il faut récupérer les chansons chantées par Welnick.

Indice

Depuis ce résultat, il faut sélectionner les arcs sortants "written_by"

Solution
1
SELECT expand(out('written_by')) FROM (SELECT expand(in('sung_by')) FROM V WHERE name="Welnick" and type="artist")
2

Question

Afficher les chansons chantées par au moins 2 artistes différents

Indice

Il faut sélectionner les noeuds de type "song"

Indice

Sur ces noeuds, il faut utiliser la fonction out('sung_by') pour récupérer les chanteurs. La fonction out() peut également être utilisé dans une clause WHERE.

Indice

La fonction size() peut être utilisée directement avec la fonction out() pour connaître le nombre de résultat

Solution
1
SELECT * FROM V WHERE type="song" AND out('sung_by').size() > 1
2

Question

Depuis la vue sous forme de graphe, ajoutez un nouveau noeud "Artist" avec votre prénom. Ensuite, ajouter un lien de façon à ce que la chanson "HEY BO DIDDLEY" ait déjà été chantée par vous-même.

Indice

Lors de l'ajout du noeud, il ne faut pas oublier de préciser le type de ce noeud.

Indice

Pour ajouter un lien, il faut cliquer sur un noeud, puis sur l'icône lien et enfin sélectionner le noeud destination.

Attention au sens de la relation !

Question

Afficher le nom des artistes qui ont chanté au moins 3 fois des chansons écrites par Hunter. Il faut également faire apparaître, pour chaque artiste, le nombre total de chansons chantées écrites par Hunter.

Indice

Il faut d'abord récupérer toutes les chansons écrites par Hunter, puis les chanteurs de ces chansons.

Indice

Depuis ce résultat, il ne faut garder que le nom des artistes, et pour chacun d'eux compter le nombre de chansons chantées.

Indice

Sur le résultat précédent, il ne faut garder que les chanteurs qui ont chantées au moins 3 fois les chansons.

Il faut penser à entourer la requête précédente de parenthèse, afin de l'exécuter comme sous-requête.

SELECT * FROM (requête précédente) WHERE ...

Solution
1
SELECT * FROM (SELECT name, count(*) AS nb FROM (SELECT expand(in('written_by').out('sung_by')) FROM V WHERE name="Hunter") GROUP BY name) WHERE nb > 2
2
PrécédentPrécédentFin
AccueilAccueilImprimerImprimer Sébastien Laidoum, Lucas Willemot, Clémence Geffray, 2014-2016 (Contributions : Stéphane Crozat, les étudiants de l'UTC) Paternité - Partage des Conditions Initiales à l'IdentiqueRéalisé avec Scenari (nouvelle fenêtre)