Cours "Modèles pour la persistance des objets"

Objet-relationnel

Home (Contact)

Objectif du TP :

Utiliser les nouvelles possibilités offertes par l'objet-relationnel introduit dans SQL 3.

Support de cours 1 Support de cours 2


Création de nouveaux types

  1. Créez un type adresse_type avec un numéro de rue, un nom de rue et un nom de ville.
    Le plus simple est d'utiliser SQL Developer ; si vous utilisez sqlplus, 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 ou dans SQL Developper (dans ce logiciel les erreurs s'affichent tout de suite dans la fenêtre de log du compilateur, le journal, en bas à gauche).
  2. Créez un type departement_type sur le même modèle que la table dept.
  3. Créez un type employe_type avec un matricule, un nom, une adresse (de type adresse_type), un salaire, une référence à un supérieur, une référence à un département.
  4. Créez les 2 tables departement et employe associées à ces 2 types. 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. Avec SQL Developer vous pouvez aussi utiliser le menu de gauche, noeud "Types".
  6. Faites afficher les noms de types dont vous disposez, en utilisant le dictionnaire des données.

Attention, les premières version d'Oracle Express Edition (la version gratuite d'Oracle) avaient des problèmes avec les types créés par l'utilisateur ; je n'ai pas testé les dernières versions. Par exemple il est possible qu'un simple "select * from employe" provoque une erreur.

Correction

creation.sql


Ajouter des données dans les nouvelles tables

  1. Ajoutez des données dans les nouvelles tables (au moins 2 départements et 3 employés). Attention, la version actuelle (fin 2010) de SQL Developer n'affiche pas toujours correctement les références. Pour vérifier, vous pouvez lancer un select qui renvoie les valeurs du type référencé, par exemple departement.numDept.
  2. Faites afficher pour chaque employé : le matricule, la ville où il habite, le nom de son supérieur, la ville où il travaille (celle de son département).
  3. Faites afficher le nom des employés du département 10 (ou d'un autre numéro).

Correction

ajout.sql

Modifier les données

  1. Changez le supérieur et le département d'un des employés.
  2. Mettez un des employés comme supérieur de tous les employés du département numéro 10.
  3. Essayez de mettre un employé dans un département qui a un numéro qui n'existe pas.

Correction

modification.sql

Array

  1. Créez un nouveau type personne_type avec un nom et un tableau de prénoms (au plus 4 prénoms).
  2. Créez la table personne correspondante (n'oubliez pas les contraintes d'intégrité).
  3. Faites afficher une description de personne avec la commande describe.
  4. Ajoutez des lignes dans la table personne.
  5. Affichez les noms et tous les prénoms que vous avez entrés.

Correction

array.sql

Héritage

  1. Créez un type travailleur_type qui hérite de personne_type. Ce nouveau type a seulement un attribut salaire en plus.
  2. Créez une table travailleur (n'oubliez pas les contraintes d'intégrité).
  3. Ajoutez quelques travailleurs dans cette table.
  4. Faites afficher des informations sur les travailleurs.

Correction

heritage.sql


JDBC

  1. Ecrivez une classe Departement en Java qui correspond à la table departement.
  2. Dans une méthode main, faites afficher les noms des employés avec la ville dans laquelle ils habitent et celle dans laquelle ils travaillent (le lieu de leur département), en utilisant l'interface Struct pour lire le département et l'adresse des employés.
  3. Modifiez la classe Departement de telle sorte qu'il soit facile de lire et d'écrire des lignes de la table pour les mettre dans des instances de la classe Departement. Utilisez pour cela l'interface SQLData.
    Faites afficher les noms des employés avec la ville dans laquelle ils travaillent en récupérant leur département en entier et en en extrayant ensuite le lieu du département. Y aurait-il un moyen plus simple pour récupérer le lieu ?
    Si vous avez des messages d'erreur du type "java.lang.ClassCasException: oracle.sql.STRUCT", c'est que le driver JDBC n'a pas fait correspondre le type departement_type avec la classe Departement. Faites alors afficher le nom des types que vous récupérez et corrigez votre code en conséquence.

Correction

Departement.java (avec Struct)

Une autre façon de traiter les références (avec Struct)

Departement.java (implémente SQLData)


Si vous avez déjà fini...

Écrivez les ordres SQL pour créer les tables objet-relationnelles correspondant à ce diagramme de classes UML.


Retour