Institut Galilée Année 2018-2019 INFO2 TP BD Cinema en SQL3 Objectif : Utiliser l’objet-relationnel introduit dans SQL3 On désire implémenter la base de données Cinéma en SQL3. 1 Création de types et de tables 1. Créez un type adresse_type avec un numéro de rue, un nom de rue et un nom de ville. NB : Il faut terminer la définition du type par une ligne finale qui ne contient qu’un ”/”. Ne terminez pas la définition par un ” ;”. Si vous avez des erreurs de compilation d’un type, vous pouvez faire afficher une description des erreurs en tapant ”show errors” dans sqlplus. 2. Créez un type person_type avec les informations associées (nom, prénom, date de naissance, date de décès, pays) 3. Créez les types movie_type, review_type et review_aggregator_type. 4. Créez les tables person, movie, review_aggregator et review associées à ces 4 types (person_type, movie_type et review_type). N’oubliez pas les contraintes d’intégrité (au moins les clés primaires). 5. Utilisez describe pour voir les descriptions des types et tables que vous venez de créer. 2 Ajout et modification de données, requêtes 1. Ajoutez des données dans les quatre tables (person, movie, review_aggregator et review) en utilisant les mêmes données que celles de la base en SQL2. 2. Vérifiez qu’il s’agit bien de tables objets et non de tables relationnelles en consultant les tables user_tables et user_object_tables. 3. Ecrire les requêtes suivantes : (a) Listes des personnes avec toutes les informations associées (b) Nombre de films par genre (c) Liste des films dont le budget est supérieur à 20 millions 4. Mettez à jour le nombre de critique (113) du film Star wars pour l’agrégateur Rotten Tomatoes. 1 3 Héritage et tables imbriquées On désire définir les types acteur_type et realisateur_type. Ceux-ci hériteront du type person_type. On utilise le principe d’une décomposition par distinction. 1. Le type person_type doit être modifié (la clause NOT FINAL doit être ajoutée pour permettre l’héritage - spécialisation du type). On désire également pouvoir respecter la contrainte de totalité (une personne peut être un acteur et un réalisateur). Comme un type ne peut être modifié si des tables ou d’autres types l’utilisent, vous devez donc supprimer la table person avant de modifier le type person_type. Proposez une nouvelle définition du type person_type 2. Créez (i) un type movie_ref_type ayant comme attribut movie_id (identifiant d’un film) et (ii) le type movies_type correspondant au type d’une table imbriquée dont chaque enregistrement est du type movie_ref_type, c’est-à-dire un identifiant de film. 3. Créez un type actor_type qui hérite de person_type et qui possède l’attribut starring défini comme une table imbriquée d’identifiants de film. 4. Créez un type director_type qui hérite de person_type et qui possède l’attribut directs défini comme une table imbriquée (nested table) d’identifiants de film. 5. Créez les tables actor et director. 6. Ecrivez les procédures permettant d’assurer la contrainte de totalité sur les tables actor et director (un réalisateur peut jouer dans un film et notamment son propre film). Testez les procédures avec des insertions. 7. Insérez des données dans les tables actor et director. 8. Affichez la liste des acteurs avec toutes les informations associées (notamment les films dans lesquels ils jouent). 4 Collections On désire définir une liste finie de revues (au plus 2). 1. Créer le type review_type composé d’un score, d’un nombre de critique et du nom de l’agrégateur de revues. 2 2. Créer le type reviews_type en utilisant des tableaux pré-dimensionnés (VARRAY) 3. Insérez des données dans la nouvelle table cinema en utilisant les données de la base en SQL2. 4. Modifiez le type movie_type et la table movie de manière à disposer d’un attribut review. Cet attribut est une table imbriquée (nested table) composée de trois attributs review_aggregator, score_pct et critic_number. 5. Insérez des données dans la nouvelle table movies en utilisant les données de la base en SQL2. 6. Affichez les films dont le scores de Rotten Tomatoes est supérieur ou égale à 90. 3