Mini projet Base de donnée



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Bases de données relationnelles

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

CREATION WEB DYNAMIQUE

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Bases de Données relationnelles et leurs systèmes de Gestion

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

Cours Base de données relationnelles. M. Boughanem, IUP STRI

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

SQL Historique

Information utiles. webpage : Google+ : digiusto/

A QUOI SERVENT LES BASES DE DONNÉES?

Langage SQL : créer et interroger une base

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

DEVAKI NEXTOBJET PRESENTATION. Devaki Nextobjects est un projet sous license GNU/Public.

Le langage SQL (première partie) c Olivier Caron

Le Langage SQL version Oracle

Gestion de base de données

Compétences Business Objects

Le Langage De Description De Données(LDD)

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Introduction au Système de Gestion de Base de Données et aux Base de Données

Le langage SQL Rappels

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

TP Contraintes - Triggers

Olivier Mondet

16H Cours / 18H TD / 20H TP

A QUOI SERVENT LES BASES DE DONNÉES?

Bases de Données Avancées

Chapitre 5 LE MODELE ENTITE - ASSOCIATION

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

Devoir Data WareHouse

PHP 5. La base de données MySql. A. Belaïd 1

Modélisation de bases de données : Le modèle relationnel

Les bases de données

Création et Gestion des tables

1 Introduction et installation

Bases de Données Relationnelles. Le Modèle Relationnel

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Rappel sur les bases de données

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

I4 : Bases de Données

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Master Exploration Informatique des données DataWareHouse

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Vincent Augusto

CONCEPTION Support de cours n 3 DE BASES DE DONNEES

Objectifs du TP : Initiation à Access

UML et les Bases de Données

1 Modélisation d une base de données pour une société de bourse

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

TP3 : Creation de tables 1 seance

Corrigés détaillés des exercices

PROJET 1 : BASE DE DONNÉES REPARTIES

NF26 Data warehouse et Outils Décisionnels Printemps 2010

Intégrité sémantique dans les bases de données relationnelles

Introduction aux Bases de Données

Cours Bases de données 2ème année IUT

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Notes de cours : bases de données distribuées et repliquées

Administration des bases de données. Jean-Yves Antoine

OpenPaaS Le réseau social d'entreprise

INTRODUCTION : Données structurées et accès simplifié

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

FileMaker 13. Guide de référence SQL

Bases de données élémentaires Maude Manouvrier

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

Groupe 11 TABLE DES MATIERES

Intégrité des données

Auto-évaluation Oracle: cours de base

Systèmes d information et bases de données (niveau 1)

Partie 0 : Gestion des tablespace et des utilisateurs... 3

Pour les débutants. langage de définition des données

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

CATALOGUE FORMATIONS DOMAINE Bases de données

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

Modélisation et Gestion des bases de données avec mysql workbench

TD n 10 : Ma première Base de Données

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

Dossier I Découverte de Base d Open Office

MySQL / SQL EXEMPLES

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

1 Position du problème

Systèmes de Gestion de Bases de Données

Bases de données relationnelles & SQL

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

Optimisation SQL. Quelques règles de bases

Bases de données Outils de gestion

Conception des bases de données : Modèle Entité-Association

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

1/ Présentation de SQL Server :

Transcription:

Mini projet Base de donnée Professeur responsable : Etudiants I2 : Slimane Sébastien Yvonnick HAMMOUDI FRANÇOIS BRUNET 1

1. Introduction 3 2. Construction du schéma conceptuel entité-association 3 1) Liste des entités 3 2) Liste des attributs 3 3) Associations entre entités 5 4) Caractéristiques des associations 5 5) Construire le schéma Entité Association 6 6) Vérification du schéma obtenu 6 3. Modélisation en UML du système Agenda 7 7) Diagramme des cas d utilisations du système de gestion des Agendas 7 8) Diagramme de classe UML équivalent 8 1. Diagramme de classe UML 8 2. Richesse du formalisme et Différences entre diagrammes de classe UML et Entité Association 8 4. Passage du schéma conceptuel Entité-Association au schéma relationnel Logique. 9 9) En déduire l ensemble des relations formant le schéma relationnel de la base de données 9 10) Dessiner le diagramme logique de la base de donnée Agenda 11 5. Création, Mise à jour et Interrogation de la base de données «Agenda» 12 11) Création des tables de notre base de données 12 12) L insertion de tuples dans les différentes tables 14 13) Interrogation de la base de données : 15 3. Le nom, prénom, et département des employés dont on ignore l adresse électronique, ordonnés par département et nom. 15 4. Les séminaires futurs du département Informatique 15 5. Les activités personnelles dans l agenda de Monsieur Schang qui n ont pas été insérées par lui 17 6. Les conflits d horaires (entre activités personnelles et départementales) de Monsieur Percher 17 7. L agenda de Monsieur Boissinot le 09 Janvier 2006 18 8. Le jour où Monsieur Schang a le plus d activités personnelles 20 9. Les professeurs libres d électronique le 11 Janvier 2006 pour remplacer Monsieur Guitton de 13H30 à 15H30 20 10. Les personnes qui été absentes aux activités départementales d automatique 21 11. Le volume horaires des activités personnelles de Monsieur Genet le 10 Janvier 2006 22 12. Les supérieurs hiérarchiques de Monsieur Guitton dans le département électronique 23 6. Conclusion 23 2

1. Introduction Avec l avènement de l informatique, la mise en place d une stratégie de stockage des données s est vite avérée indispensable. Les premiers programmes informatiques stockaient des informations de manière linéaire, ce qui posait par la suite des problèmes pour effectuer des recherches et des calculs sur les informations enregistrées. Des chercheurs ont alors mis au point des modèles permettant de représenter sur informatique des éléments réels et de leur ajouter des attributs, de pouvoir les ranger, les trier. C'est Edgar F. Codd qui en juin 1970 rédigea un article décrivant un modèle de donnée relationnel. Ce modèle a par la suite servi de référence et IBM a développé un langage, le Structured English Query Language ("SEQUEL") pour mettre en œuvre le modèle de Codd. En 1979, Relational Software, Inc. (actuellement Oracle Corporation) présenta la première version commercialement disponible de SQL. Par la suite, le SQL sera normalisé par l ANSI et l ISO en 1986 et 1987. L objectif du mini-projet est de se familiariser à la modélisation d un Système de Gestion de Base de Donnée à partir d un cahier des charges. Celui-ci décrit les besoins pour la création d un système l emploi du temps d entreprise. Le modèle sera ensuite concrétiser par sa mise en place dans une base de donnée Oracle, afin que nous puissions nous familiariser avec les requêtes SQL. 2. Construction du schéma conceptuel entité-association 1) Liste des entités Département Agenda département Activité départementale Procès verbal Absences Employé Agenda Activités Alertes Activité Départementale et Verbale 2) Liste des attributs Département num nom numchef numagendadept Agendadept numagenda datemaj identifiant du département nom du département pointe sur le responsable du département pointe sur l agenda du département identifiant de l agenda de département date de dernière modification de l agenda 3

Activitésdept numact typed descript dateact hdébut hfin datecreation createur numagenda Procesverbal numprocesv resum Absent numemployé numactdept motif Employe numemploye nom prénom telintern email niveau numdept Agenda numagenda datecreation numemploye identifiant de l activité départementale réunion / séminaire / cours / mini projet description précise date de l activité heure de début de l activité heure de fin de l activité date de création de l activité créateur de l activité pointe sur l agenda auquel l activité appartient identifiant du procès verbal résumé de l activité pointe sur l employé absent pointe sur l activité motif de l absence identifiant de l employé nom de l employé prénom de l employé numéro de téléphone interne de l employé adresse email de l employé niveau hierarchique pointe sur le département de l employé identifiant de l agenda date de création de l agenda pointe sur l employé associé Activités numactivité identifiant de l activité typea réunion / séminaire / cours / mini projet description description précise dateact date de l activité hdébut heure de début de l activité hfin heure de fin de l activité datecreation date de création de l activité createur créateur de l activité visible activité professionnelle ou personnelle? numagenda pointe sur l agenda auquel l activité appartient Alertes type delais numactivité ActDeptVerbal numprocesv numprocesv type d alerte (email, sms etc ) delais d envoi du rappel avant l activité pointe sur l activité associée à l alerte pointe sur l activité départementale associée pointe sur le procès verbal associé 4

3) Associations entre entités Emploie Dirige Est_absent Possède Possède Peut_avoir Contient Contient Etablit Associations Entités liées Département, employé employé, département employé, activités employé, agenda département, agenda département activités, alertes agenda, activités Agenda département, activités départementales activités départementales, procès verbal 4) Caractéristiques des associations Association emploie Sans attributs propre, dimension 2. Elle relie un département et les employés qui y travaillent. Elle est de cardinalité I-N puisqu un employé donné n a qu un seul département. Association dirige Sans attributs propre, dimension 2. Elle relie un employé et le département qu il dirige. Elle est de cardinalité I-N car un chef peut avoir plusieurs départements. Association est_absent Sans attributs propre, dimension 2. Elle relie un employé et l activité départementale à laquelle il ne pourra assister. Elle est de cardinalité I-I puisqu un employé est absent ou non lors d une activité. Associations possède Sans attributs propre, dimension 2. Elle relie un employé et son, agenda, ou bien un département et son agenda. Elle est de cardinalité I-I puisqu un employé, un département n a qu un seul agenda. Association peut_avoir Sans attributs propre, dimension 2. Elle relie une activité personnelle et une alerte. Elle est de cardinalité I-N pour qu une activité puisse avoir plusieurs alertes différentes. Association contient Sans attributs propre, dimension 2. Elle relie un agenda et les activités qu il contient. Elle est de cardinalité I-N puisqu une activité n est placée que dans un seul agenda, personnel ou départemental et il peut y avoir plusieurs activités. Association établit Sans attributs propre, dimension 2. Elle relie une activité départementale et son procès verbal. Elle est de cardinalité I-I puisqu il n y a qu un procès verbal par activité départementale. Un employé peut être responsable de plusieurs départements. 5

5) Construire le schéma Entité Association 6) Vérification du schéma obtenu Nous avons simplifié la hiérarchie des employés en n utilisant pas une table à part entière, mais en stockant simplement un chiffre représentant le niveau de l employé en attribut de l entité employé. Le cycle présent entre les entités Employé, Département, Agenda Départemental, Activités Départementales est normal car la «fermeture» entre Employé et Activités Départementales est simplement du à la possibilité de signaler des absences. L attribut type a été supprimé du procès verbal puisque l on peut le retrouver grâce à l Activité Départementale à laquelle il est associé. 6

3. Modélisation en UML du système Agenda 7) Diagramme des cas d utilisations du système de gestion des Agendas 7

8) Diagramme de classe UML équivalent 1. Diagramme de classe UML 2. Richesse du formalisme et Différences entre diagrammes de classe UML et Entité Association On peut donc facilement observer que le schéma conceptuel Entité-Association est très proche du diagramme de classe du formalisme UML, les représentations des cardinalités sont simplement inversées, on notera la présence supplémentaire des types des attributs en UML. Enfin UML est un formalisme, ici nous ne comparons qu un seul de ses diagrammes, alors qu il nous a aussi servi à modéliser le cahier des charges dans le diagramme d activités. 8

4. Passage du schéma conceptuel Entité-Association au schéma relationnel Logique. 9) En déduire l ensemble des relations formant le schéma relationnel de la base de données D après le schéma conceptuel Entité-Association, on a crée pour chaque entité une table. Ainsi les premières tables qui ont été crées sont les tables : - Département - Employé - Agenda - Activités - Alertes - Agenda Départemental - Activités Départementales - Procès Verbal Les clés primaires sont de type un nombre pour éviter de se soucier si une clé est belle et bien unique. Les cardinalités N-I : Puis pour des raisons de cardinalités, lorsque l association binaire un à plusieurs est traduit par un report de clé. En effet la clé primaire de l entité participant côté N est ajoutée à l autre entité en tant que clé étrangère. Les associations Activités-Alertes, Agenda-Activités, Département-Employé, Agenda Départemental-Activités Départementales ont toutes des cardinalités N-I ce qui implique que les clés primaires des premières entités seront des clés étrangères dans les deuxièmes entités. Nom des entités Entité avec cardinalité N Entité avec cardinalité I Clé primaire Clé primaire Clé étrangère Activités-Alertes numactivite Type, Delais, numactivite numactivite Agenda-Activités numagenda numactivité numagenda Département- num numemployé numdept Employé Agenda Départemental- Activités Départementales numagenda numact numagenda Pour l entité Alertes, on a décidé de mettre les trois attributs en clé primaire. De cette façon, on peut envoyer une alerte de n importe quel type et n importe quel délai pour une activité donnée. Les cardinalités I-I : Pour chaque association de ce type, on n a pas crée de table supplémentaire sauf pour le procès verbal. Ainsi on a simplifié notre base de données et on a fait des choix pour prendre 9

les clés primaires d une table et la mettre en clé étrangère sur l autre entité de l association. On évite d avoir des redondances au niveau des clés. Nom des entités Entité avec cardinalité N Entité avec cardinalité I Clé primaire Clé primaire Clé étrangère Employé-Agenda numemployé numagenda numemploye Employé- numemployé Num numchef Département Agenda numagenda numact numagenda Départemental- Département Activités Départementales- Procès Verbals numact numprocesv Les associations Employé-Agenda, Employé-Département et Agenda Départemental- Département sont de type I-I. Les clés primaires des premières entités deviennent des clés étrangères dans les secondes entités. On a décidé qu à partir de l Employé on peut accéder à l Agenda de celui-ci. Il en va de même pour accéder à l Agenda Départemental, il faut passer par le Département. Apres avoir créé l Employé, on peut avoir le numéro du chef du Département. Par contre, l association Activités Départementales-Procès Verbaux à nécessiter la création d une nouvelle entité appeler ActDeptVerbal. Cette nouvelle entité est la liaison entre l Activités Départementales et le Procès Verbal. Normalement cette entité aurait eu le même traitement que les précédentes. Mais après une multitude de test sous oracle, les mises à jour de l attribut numprocesv dans Activités Départementales ne marchaient pas, d où la création d une entité supplémentaire. Nom des entités Entité de cardinalité I Entité intermédiaire ActDeptVerbal Clé primaire Clé étrangère et primaire Activités Départementale s-procès Verbaux Clé étrangère et primaire Entité de cardinalité I Clé primaire numact numact numprocesv numprocesv Les cardinalités N-N : L association Employé-Activités Départementales nécessite la création d une table intermédiaire Absent qui fait le lien entre ces deux entités. Les deux clés primaires deviennent des clés étrangères et aussi des clés primaires. Nom des entités Employé- Activités Départementales Entité de cardinalité N Entité intermédiaire Absent Entité de cardinalité N Clé primaire Clé étrangère et primaire Clé étrangère et primaire Clé primaire numemployé numemployé numactdept numactdept 10

L association Employé-Employé n a pas nécessité une nouvelle table. En contre partie un nouvel attribut fut créé dans l Entité Employé qui se nomme niveau. Ainsi on peut savoir le supérieur hiérarchique par rapport au plus grand nombre contenue dans cet attribut. 10) Dessiner le diagramme logique de la base de donnée Agenda 11

5. Création, Mise à jour et Interrogation de la base de données «Agenda» 11) Création des tables de notre base de données La création des tables s est obtenue par le schéma relationnel logique fait en partie 3. On a crée les tables avec la commande : CREATE TABLE nomdelatable (les attributs que l on a besoin) ; Les tables ne peuvent pas être crées dans n importe quel ordre puisqu elles sont reliés entre elles par des clés primaires et/ou étrangères. En effet si la table ne contient pas de clé étrangère, elle peut être crée en première. Ainsi les tables PROCESVERBAL et AGENDADEPT ont été crées en première. Par contre, la table DEPARTEMENT a deux clés étrangères qui sont numagenda et numchef appartenant respectivement aux tables AGENDADEPT et EMPLOYE. C est pourquoi dans la table DEPARTEMENT l attribut numchef n est pas une clé étrangère pour le moment puisque la table EMPLOYE n a pas été encore crée. Apres la création de la table EMPLOYE on applique une commande qui permet de mettre la clé numchef en clé étrangère dans la table DEPARTEMENT. On fait de même avec les autres tables en prenant garde sur les clés étrangères. Ainsi notre fichier createtableagendadept.sql nous sert a crée les tables nécessaire pour faire notre base de données. DROP TABLE PROCESVERBAL cascade constraints; DROP TABLE AGENDADEPT cascade constraints; DROP TABLE DEPARTEMENT cascade constraints; DROP TABLE EMPLOYE cascade constraints; DROP TABLE ACTIVITESDEPT cascade constraints; DROP TABLE AGENDA cascade constraints; DROP TABLE ABSENT cascade constraints; DROP TABLE ACTIVITES cascade constraints; DROP TABLE ALERTES cascade constraints; DROP TABLE ACTDEPTVERBAL cascade constraints; CREATE TABLE PROCESVERBAL (NumProcesV NUMBER(8), resum VARCHAR(1024) NOT NULL, PRIMARY KEY (NumProcesV)); CREATE TABLE AGENDADEPT (numagenda NUMBER(8), datemaj DATE NOT NULL, PRIMARY KEY (numagenda)); CREATE TABLE DEPARTEMENT (num NUMBER(8), nom VARCHAR(40) NOT NULL,numChef NUMBER(8), numagendadept NUMBER(8) NOT NULL, PRIMARY KEY (num), FOREIGN KEY (numagendadept) References AGENDADEPT); CREATE TABLE EMPLOYE (numemploye NUMBER(8), nom VARCHAR(30) NOT NULL, prenom VARCHAR(20), telintern VARCHAR(14), email VARCHAR(40),niveau 12

NUMBER(8), numdept NUMBER(8) NOT NULL, PRIMARY KEY (numemploye), FOREIGN KEY (numdept) References DEPARTEMENT); ALTER TABLE DEPARTEMENT ADD constraints deptforeign FOREIGN KEY (numchef) References EMPLOYE; CREATE TABLE ACTIVITESDEPT (numact NUMBER(8), typed VARCHAR(20) NOT NULL, descript VARCHAR(1024), dateact DATE NOT NULL, hdebut DATE, hfin DATE, datecreation DATE, createur VARCHAR(20) NOT NULL, numagenda NUMBER(8) NOT NULL, PRIMARY KEY (numact), FOREIGN KEY (numagenda) References AGENDADEPT); CREATE TABLE ACTDEPTVERBAL (numact NUMBER(8), numprocesv NUMBER(8), PRIMARY KEY (numact, numprocesv), FOREIGN KEY (numact) References ACTIVITESDEPT, FOREIGN KEY (numprocesv) References PROCESVERBAL); CREATE TABLE AGENDA (numagenda NUMBER(8), datecreation DATE, numemploye NUMBER(8) NOT NULL,PRIMARY KEY (numagenda), FOREIGN KEY (numemploye) References EMPLOYE); CREATE TABLE ABSENT (numemploye NUMBER(8), numactdept NUMBER(8), motif VARCHAR(1024), PRIMARY KEY (numemploye, numactdept), FOREIGN KEY (numemploye) References EMPLOYE,FOREIGN KEY (numactdept) References ACTIVITESDEPT); CREATE TABLE ACTIVITES (numactivite NUMBER(8), typea VARCHAR(30) NOT NULL, description VARCHAR(1024), dateact DATE NOT NULL, hdebut DATE, hfin DATE, datecreation DATE, createur VARCHAR(20) NOT NULL, visible NUMBER(1), numagenda NUMBER(8) NOT NULL, PRIMARY KEY (numactivite), FOREIGN KEY (numagenda) References AGENDA); CREATE TABLE ALERTES (type CHAR(8), delais DATE, numactivite NUMBER(8), PRIMARY KEY (type,delais,numactivite), FOREIGN KEY (numactivite) References ACTIVITES); 13

12) L insertion de tuples dans les différentes tables Pour les même raison que précédemment, il faut insérer les tuples avec un certains ordres. En outre l AGENDADEPT a été inséré avant l insertion du DEPARTEMENT. Les commandes pour l insertion de l AGENDADEPT et du DEPARTEMENT: INSERT INTO AGENDADEPT VALUES (un chiffre, une date); INSERT INTO AGENDADEPT VALUES (seqagendadepartement.nextval, to_date(sysdate,'dd-mm-yyyy')); INSERT INTO DEPARTEMENT VALUES (un chiffre, nom du departement, numero du chef, le chiffre de l agenda du departement); INSERT INTO DEPARTEMENT VALUES (seqdepartement.nextval, 'Informatique', NULL, seqagendadepartement.currval); Pour des raisons de commodités, des séquences sont crées pour ne pas se soucier du numéro. Ce ci se fait par la commande : DROP SEQUENCE seqagendadepartement; CREATE SEQUENCE seqagendadepartement increment by 1 start with 1; Ensuite, un employé est inséré tout en faisant attention à l ordre dans lesquels sont mis les tuples. La logique veut que l on met les insertions dans cet ordre : L insertion d un employé: INSERT INTO EMPLOYE VALUES (seqemploye.nextval, 'ALBERS', 'Patrick', '02.41.86.67.22', NULL, 10, seqdepartement.currval); L insertion de l agenda de l employé: INSERT INTO AGENDA VALUES (seqagenda.nextval, sysdate, seqemploye.currval); L insertion d une activité de l employé: INSERT INTO ACTIVITES VALUES (seqactivites.nextval, 'cours', 'faire le chapitre 4 du langage C','10-JAN-06', to_date('7:45','hh24:mi'), to_date('9:45','hh24:mi'), '03-DEC-05','PLAINCHAULT', 1, seqagenda.currval); L insertion d une alerte: INSERT INTO ALERTES VALUES ('email', to_date('5:30','hh24:mi'), seqactivites.currval); L insertion d une activité du département de l employé: INSERT INTO ACTIVITESDEPT VALUES (seqactivitedept.nextval, 'formation', 'les maintenances du reseaux de l eseo', '12-JAN-06', to_date('14:15','hh24:mi'), to_date('16:15','hh24:mi'), '15-NOV- 05','PLAINCHAULT', seqagendadepartement.currval); L insertion d un procès verbal en rapport avec une activité du département: INSERT INTO PROCESVERBAL VALUES (seqprocesv.nextval,'determination des personnes responsables des permanances'); L insertion d une table pour faire la liaison avec ACTIVITESDEPT et PROCESVERBAL: INSERT INTO ACTDEPTVERBAL VALUES (seqactivitedept.currval, seqprocesv.currval); L insertion d un absent à l activité département: INSERT INTO ABSENT VALUES (2,seqActiviteDept.currVal,'malade'); Les séquences sont incrémentées de un lorsque l on ajoute à la fin de celle-ci.nextval et donnent la valeur courante lorsque l on met à la fin de la séquence.currval. 14

13) Interrogation de la base de données : 3. Le nom, prénom, et département des employés dont on ignore l adresse électronique, ordonnés par département et nom. La requête est la suivante : SELECT DISTINCT E.nom as nom_employe, E.prenom as prenom_employe, D.nom as nom_departement FROM Employe E, Departement D WHERE E.numDept = D.num -- Faire un lien entre le département et l employé AND E.email is NULL -- Vérifier les personnes qui n ont pas d adresses ORDER BY D.Nom ASC,E.nom ASC; -- Ordonner les départements et les noms des employés La réponse est la suivante : NOM_EMPLOYE PRENOM_EMPLOYE NOM_DEPARTEMENT ------------------------------ -------------------- --------------------- CHAUVEAU Eric Automatique GENTIL Remi Automatique GUITTON Damien Electronique ALBERS Patrick Informatique CAMP Olivier Informatique PERCHER Jean-Marc Informatique Messieurs Chauveau, Gentil Guitton, Albers, Camp et Percher n ont pas d adresses et sont ordonnés par département et nom par ordre croissant. 4. Les séminaires futurs du département Informatique La requête est la suivante pour les séminaires futurs dans l Agenda Départemental : SELECT DISTINCT Acd.dateAct as Seminaire_Depart,Acd.descript as Description FROM Departement D, AgendaDept Agd, ActivitesDept Acd WHERE upper( D.nom )= 'INFORMATIQUE' -- Sélectionner le département Informatique And D.numAgendaDept = Agd.numAgenda -- Faire le lien entre le Département et l Agenda Départemental And Agd.numAgenda = Acd.numAgenda -- Faire le lien entre l Agenda et l Activité Départemental And upper( Acd.typeD ) = 'SEMINAIRE' -- Sélectionner le type d Activité Départemental qui est le Séminaire And sysdate < Acd.dateAct -- Comparer les dates des Activités Départemental par rapport à la date d aujourd hui ORDER BY Acd.dateAct ASC; -- Ordonner par date d Activité Départemental La requête est la suivante pour les séminaires futurs dans l Agenda de l Employé : SELECT DISTINCT Ac.dateAct as SEMINAIRE, Ac.description as Description FROM Departement D, Agenda Ag, Activites Ac, Employe E WHERE upper( D.nom )= 'INFORMATIQUE' And D.num = E.numDept -- Faire le lien entre le Département et l Employé 15

And E.numEmploye = Ag.numEmploye -- Faire le lien entre l Agenda de l Employé et l Employé And Ag.numAgenda = Ac.numAgenda -- Faire le lien entre l Agenda et l Activité de l Employé And upper( Ac.typeA ) = 'SEMINAIRE' And sysdate < Ac.dateAct ORDER BY Ac.dateAct ASC; La réponse est la suivante pour les séminaires futurs dans l Agenda Départemental : SEMINAIRE DESCRIPTION --------------------------------------------------------------------------- 27-MAR-06 Utilisation de l informatique pour le biomedicale 28-MAR-06 Utilisation de l informatique pour le biomedicale 29-MAR-06 Utilisation de l informatique pour le biomedicale 30-MAR-06 Utilisation de l informatique pour le biomedicale 31-MAR-06 Utilisation de l informatique pour le biomedicale Du 27 Mars au 31 Mars 2006 se tiendra un séminaire sur l utilisation de l informatique pour le biomédicale, crée par le département. La réponse est la suivante pour les séminaires futurs dans l Agenda de l Employé : SEMINAIRE DESCRIPTION --------------------------------------------------------------------------- 13-FEB-06 administration reseau 14-FEB-06 administration reseau 15-FEB-06 administration reseau 16-FEB-06 administration reseau 17-FEB-06 administration reseau 20-FEB-06 administration reseau pour le second groupe 21-FEB-06 administration reseau pour le second groupe 22-FEB-06 administration reseau pour le second groupe 23-FEB-06 administration reseau pour le second groupe 24-FEB-06 administration reseau pour le second groupe Du 13 Février au 17 Février et du 13 Février au 17 Février se tiendra deux séminaires pour l administration réseau. Le premier est consacré pour un premier groupe de l administration et le deuxième pour un second groupe. 16

5. Les activités personnelles dans l agenda de Monsieur Schang qui n ont pas été insérées par lui La requête est la suivante : SELECT DISTINCT Ac.typeA as Act_de_SCHANG,Ac.dateAct as date_activite, to_char(ac.hdebut,'hh24:mi') as H_Debut,to_char(Ac.hFin,'hh24:mi') as H_Fin, Ac.createur as Createur FROM Employe E, Agenda A, Activites Ac WHERE upper( E.nom ) = 'SCHANG' AND E.numEmploye = A.numEmploye -- Sélectionner l Employé qui se nomme Schang -- Faire le lien entre l Agenda de l Employé et l Employé AND A.numAgenda = Ac.numAgenda -- Faire Faire le lien entre l Agenda et l Activité de l Employé AND upper(ac.createur) NOT LIKE 'SCHANG' -- Sélectionner les personnes qui créer des AND visible = 1 ORDER BY Ac.dateAct ASC; La réponse est la suivante : activités autres que monsieur Schang -- Ne prendre que les activités personnelles -- Ordonner par date d Activité ACT_DE_SCHANG DATE_ACTI H_DEB H_FIN CREATEUR ------------------------------ --------- ----- ----- -------------------- mini-projet 04-JAN-06 13:30 17:45 PLAINCHAULT cours 09-JAN-06 07:45 09:00 PLAINCHAULT cours 11-JAN-06 07:45 09:45 PLAINCHAULT cours 11-JAN-06 16:00 17:45 PLAINCHAULT mini-projet 12-JAN-06 13:30 17:45 PLAINCHAULT reunion 14-JAN-06 18:00 20:30 PERCHER mini-projet 18-JAN-06 13:30 17:45 PLAINCHAULT seminaire 20-FEB-06 08:30 17:30 PLAINCHAULT seminaire 21-FEB-06 08:30 17:30 PLAINCHAULT seminaire 22-FEB-06 08:30 17:30 PLAINCHAULT seminaire 23-FEB-06 08:30 17:30 PLAINCHAULT seminaire 24-FEB-06 08:30 17:30 PLAINCHAULT cours 08-SEP-06 07:45 09:30 PLAINCHAULT cours 10-DEC-06 16:20 17:35 PLAINCHAULT Certaines activités de Monsieur Schang n ont pas été crées par lui-même et sont répertoriées ci-dessus. Elles sont triées par le type d activité, la date, l heure de début, l heure de fin qui lui est associé et le créateur qui lui a mis une activité ce jour là. 6. Les conflits d horaires (entre activités personnelles et départementales) de Monsieur Percher La requête est la suivante : SELECT DISTINCT Ac.dateAct as act_personnelles, to_char(ac.hdebut,'hh24:mi') as MrPercher, to_char(ac.hfin,'hh24:mi') as problemes,acd.dateact as act_departementales, to_char(acd.hdebut,'hh24:mi') as MrPercher, to_char(acd.hfin,'hh24:mi') as problemes FROM Activites Ac, Agenda Ag, Employe E, Departement D, AgendaDept Agd, ActivitesDept Acd WHERE Ac.dateAct = Acd.dateAct -- Sélectionner les mêmes dates d Activités pour l Employé et le Département 17

And Agd.numAgenda = Acd.numAgenda -- Faire le lien entre l Agenda et l Activité Départemental And Ag.numEmploye = E.numEmploye -- Faire le lien entre l Agenda de l Employé et l Employé And E.numDept = D.num -- Faire le lien entre le Département et l Employé And D.numAgendaDept = Agd.numAgenda -- Faire le lien entre le Département et l Agenda Départemental And Ag.numAgenda = Ac.numAgenda -- Faire le lien entre l Agenda et l Activité de l Employé And upper( E.nom )= 'PERCHER' -- Sélectionner l Employé qui se nomme Percher AND Ac.visible = 1 -- Ne prendre que les activités personnelles And (to_char(ac.hdebut,'hh24:mi') between to_char(acd.hdebut,'hh24:mi') and to_char(acd.hfin,'hh24:mi') or to_char(ac.hfin,'hh24:mi') between to_char(acd.hdebut,'hh24:mi') and to_char(acd.hfin,'hh24:mi') or to_char(acd.hdebut,'hh24:mi') between to_char(ac.hdebut,'hh24:mi') and to_char(ac.hfin,'hh24:mi') or to_char(acd.hfin,'hh24:mi') between to_char(ac.hdebut,'hh24:mi') and to_char(ac.hfin,'hh24:mi')); -- Sélectionner les horaires qui se chevauchent La réponse est la suivante : ACT_PERSO MRPER PROBL ACT_DEPAR MRPER PROBL --------- ----- ----- --------- ----- ----- 12-JAN-06 16:20 17:35 12-JAN-06 16:30 18:30 13-JAN-06 13:30 14:45 13-JAN-06 13:30 18:30 Les activités départementales et personnelles de Monsieur Percher ne sont pas en concordance le 12 Janvier 2006 et le 13 Janvier 2006. Ceci est vérifié par les horaires qui sont affichés à coté des dates. 7. L agenda de Monsieur Boissinot le 09 Janvier 2006 La requête est la suivante pour chercher les activités Départemental de Monsieur Boissinot le 09 Janvier 2006 : SELECT DISTINCT to_char(acd.hdebut, 'hh24:mi') as datedept, to_char(acd.hfin, 'hh24:mi') as BOISSINOT, Acd.typeD as TypeDept, Acd.descript as Description FROM Departement D, AgendaDept Agd, ActivitesDept Acd, Employe E WHERE upper( E.nom )= 'BOISSINOT' --Sélectionner l Employé qui se nomme Boissinot And D.numAgendaDept = Agd.numAgenda -- Faire le lien entre le Département et l Agenda Départemental And D.num = E.numDept -- Faire le lien entre le Département et l Employé And Agd.numAgenda = Acd.numAgenda -- Faire le lien entre l Agenda et l Activité Départemental And to_date('09-01-2006','dd-mm-yyyy')= Acd.dateAct; -- Sélectionner la date du 09-Janvier-2006 La requête est la suivante pour chercher les activités personnelles de Monsieur Boissinot le 09 Janvier 2006 : 18

SELECT DISTINCT to_char(ac.hdebut, 'hh24:mi') as dateact, to_char(ac.hfin, 'hh24:mi') as BOISSINOT, Ac.typeA as TypeAct, Ac.description as Description, Ac.visible as professionnel FROM Agenda Ag, Activites Ac, Employe E WHERE upper( E.nom )= 'BOISSINOT' --Sélectionner l Employé qui se nomme Boissinot And E.numEmploye = Ag.numEmploye -- Faire le lien entre l Agenda de l Employé et l Employé And Ag.numAgenda = Ac.numAgenda -- Faire le lien entre l Agenda et l Activité de l Employé And visible = 1 -- Ne prendre que les activités personnelles And to_date('09-01-2006','dd-mm-yyyy')= Ac.dateAct; La requête est la suivante pour chercher les activités non professionnels de Monsieur Boissinot le 09 Janvier 2006 : SELECT DISTINCT to_char(ac.hdebut, 'hh24:mi') as dateact, to_char(ac.hfin, 'hh24:mi') as BOISSINOT, Ac.typeA as TypeAct, Ac.description as Description, Ac.visible as personnel FROM Agenda Ag, Activites Ac, Employe E WHERE upper( E.nom )= 'BOISSINOT' And E.numEmploye = Ag.numEmploye And Ag.numAgenda = Ac.numAgenda And visible = 0 -- Ne prendre que les activités non professionnelles And to_date('09-01-2006','dd-mm-yyyy')= Ac.dateAct; La réponse est la suivante pour chercher les activités Départemental de Monsieur Boissinot le 09 Janvier 2006 : no rows selected Aucunes activités Départementales ne figurent dans l Agenda de Monsieur Boissinot le 09 Janvier 2006. La réponse est la suivante pour chercher les activités personnelles de Monsieur Boissinot le 09 Janvier 2006 : DATEA BOISS TYPEACT DESCRIPTION PROFESSIONNEL ----- ----- --------------------------------------------------------------- 09:10 10:25 cours Preparer le cours sur l electronique de Puissance 1 14:55 16:10 cours Commencer le chapitre 1 et finir les rappels 1 Monsieur Boissinot a deux activités personnelles le 09 Janvier 2006 qui sont des cours. Le 1 signifie que se sont des activités personnelles. La réponse est la suivante pour chercher les activités non professionnelles de Monsieur Boissinot le 09 Janvier 2006 : DATEA BOISS TYPEACT DESCRIPTION PERSONNEL ----------------------------------------------------- 18:00 medecin Probleme de voix 0 Monsieur Boissinot a deux activités personnelles le 09 Janvier 2006 qui sont des cours. Le 0 signifie que se sont des activités personnelles. 19

8. Le jour où Monsieur Schang a le plus d activités personnelles La requête est la suivante : SELECT DISTINCT Ac.dateAct, count(*) FROM Agenda Ag, Activites Ac, Employe E WHERE Ac.visible = 1 and upper( E.nom )= 'SCHANG' -- Ne prendre que les activités personnelles -- Sélectionner l Employé qui se nomme Schang And E.numEmploye = Ag.numEmploye -- Faire le lien entre l Agenda de l Employé et l Employé And Ag.numAgenda = Ac.numAgenda -- Faire le lien entre l Agenda et l Activité de l Employé GROUP BY Ac.dateAct -- Grouper les dates HAVING count(*)=(select max(count(*)) Compter le nombre de fois que les dates se répètent et chercher le maximum que les dates se répètent From Agenda Ag, Activites Ac, Employe E WHERE Ac.visible = 1 and upper( E.nom )= 'SCHANG' And E.numEmploye = Ag.numEmploye And Ag.numAgenda = Ac.numAgenda Group by Ac.dateAct); La réponse est la suivante : DATEACT COUNT(*) --------- ---------- 11-JAN-06 2 Le nombre de fois que Monsieur Schang a le plus d activités est le 11 Janvier 2006 avec deux activités personnelles. Il faut pour cette requête, une imbrication pour compter la première fois le nombre d activité dans une journée et ensuite récupérer le jour qui à le plus d activité. 9. Les professeurs libres d électronique le 11 Janvier 2006 pour remplacer Monsieur Guitton de 13H30 à 15H30 La requête est la suivante : SELECT DISTINCT E.nom as Pers_a_Re_le_11_01_de_13h30, Es.nom as a_15h30_par_m, Acs.typeA as qui_a, to_char( Acs.hDebut,'hh24:mi') as de, to_char( Acs.hFin,'hh24:mi') as a FROM Activites Ac, Agenda Ag, Employe E, Departement D, Activites Acs, Agenda Ags, Employe Es, AgendaDept Agd, ActivitesDept Acd WHERE Ag.numEmploye = E.numEmploye -- Faire le lien entre l Agenda de Guitton et Monsieur Guitton And Ags.numEmploye = Es.numEmploye -- Faire le lien entre l Agenda d un Employé lambda et l Employé lambda And E.numDept = D.num -- Faire le lien entre le Département d électronique et Monsieur Guitton And Es.numDept = D.num -- Faire le lien entre le Département et l Employé lambda 20

And Ag.numAgenda = Ac.numAgenda -- Faire le lien entre l Agenda et l Activité de Monsieur Guitton And Ags.numAgenda = Acs.numAgenda -- Faire le lien entre l Agenda et l Activité de l Employé lambda And upper( D.nom )= 'ELECTRONIQUE' -- Sélectionner le département d électronique And upper (E.nom ) = 'GUITTON' -- Sélectionner l Employé qui se nomme Guitton AND Ac.visible = 1 -- Ne prendre que les activités personnelles de And Acs.visible = 1 Monsieur Guitton -- Ne prendre que les activités personnelles de l Employé lambda And Ac.dateAct = to_date('11-01-2006', 'dd-mm-yyyy') -- Sélectionner la date du 09 Janvier-2006 pour Monsieur Guitton And Acs.dateAct = to_date('11-01-2006', 'dd-mm-yyyy') -- Sélectionner la date du 09 Janvier-2006 pour l Employé lambda And to_date('13:30','hh24:mi') not between Acs.hDebut and Acs.hFin -- Sélectionner l heure de début pour lequel l Employé lambda serait disponible And to_date('15:30','hh24:mi') not between Acs.hDebut and Acs.hFin; -- Sélectionner l heure de fin pour lequel l Employé lambda serait disponible La réponse est la suivante : PERS_A_RE_LE_11_01_DE_13H30 A_15H30_PAR_M QUI_A DE A ----------------------------- --------------- -------- ----- ----------- GUITTON BOUVIER cours 09:10 10:25 GUITTON LE DUFF cours 08:30 10:00 Il faut utiliser deux employés pour faire la comparaison avec Monsieur Guitton et un autre employé. Ici on considère que Monsieur Guitton a une autre activité personnelle le même jour et entre 13H30 et 15H30. Messieurs Bouvier et Le Duff sont disponibles aux heures requises. 10. Les personnes qui été absentes aux activités départementales d automatique La requête est la suivante : SELECT DISTINCT E.nom as Employe_absent, Ab.motif as raison_absence, Acd.dateAct as le, Acd.typeD, Pv.resum as resume_act FROM Departement D, AgendaDept Agd, ActivitesDept Acd, Employe E, Absent Ab, ProcesVerbal Pv, ActDeptVerbal Av WHERE upper( D.nom )= 'AUTOMATIQUE' And D.numAgendaDept = Agd.numAgenda -- Faire le lien entre le Département et l Agenda Départemental And Agd.numAgenda = Acd.numAgenda -- Faire le lien entre l Agenda et l Activité Départemental And E.numDept = D.num -- Faire le lien entre le Département et l Employé And Acd.numAct = Ab.numActDept -- Faire le lien entre les numéros d activités And Av.numAct = Acd.numAct départemental du département et de l absent -- Faire le lien entre la table ActDeptVerbal et ActivitésDept And Av.numProcesV = Pv.numProcesV -- Faire le lien entre la table ActDeptVerbal et ProcesVerbal 21

And Ab.numEmploye = E.numEmploye -- Faire le lien entre l Agenda de l Employé et l Employé And sysdate > Acd.dateAct -- Comparer les dates des anciennes Activités Départemental par rapport à la date d aujourd hui ORDER BY Acd.dateAct ASC; -- Ordonner les dates d activités départementales La réponse est la suivante : EMPLOYE_ABSENT RAISON_ABSENCE LE TYPED RESUME_ACT --------------------------------------------------------------------------- CHAUVEAU Embouteillage sur la rocade 02-JAN-06 reunion Les copy sont totalement corrigees BOISSINOT Voyage d affaire 02-JAN-06 reunion Les copy sont totalement corrigees Messieurs Boissinot et Chauveau seront absent à la réunion de l activité départementale qui se tiendra le 05 Novembre 2005. Les raisons de leurs absences sont spécifiées ainsi que le résumé de ce qui s est passé durant l activité départementale. 11. Le volume horaires des activités personnelles de Monsieur Genet le 10 Janvier 2006 La requête est la suivante : SELECT sum(to_char(ac.hfin,'hh24')*60- to_char(ac.hdebut,'hh24')*60+to_char(ac.hfin,'mi')- to_char(ac.hdebut,'mi'))as vol_h_de_genet_le_10_01 FROM Agenda Ag, Activites Ac, Employe E WHERE upper( E.nom )= 'GENET' -- Sélectionner l Employé qui se nomme Genet And E.numEmploye = Ag.numEmploye -- Faire le lien entre l Agenda de l Employé et l Employé And Ag.numAgenda = Ac.numAgenda -- Faire le lien entre l Agenda et l Activité de Monsieur Genet And Ac.visible = 1 -- Ne prendre que les activités personnelles And to_date('10-01-2006','dd-mm-yyyy')= Ac.dateAct; -- Sélectionner la date du 10 Janvier 2006 pour Monsieur Genet La réponse est la suivante : VOL_H_DE_GENET_LE_10_01 ----------------------- 500 La somme du volume horaires dans une journée est faite dans le select. Tout d abord on commence par soustraire les heures de fin et de début en multipliant le résultat par 60 pour avoir le résultat en minutes. Puis on fait de même avec les minutes sans multiplier par 60. Finalement on somme toutes les minutes contenues dans une journée. On obtient ainsi 500 minutes d activités personnelles pour Monsieur Genet dans la journée du 10 Janvier 2006. 22

12. Les supérieurs hiérarchiques de Monsieur Guitton dans le département électronique La requête est la suivante : SELECT DISTINCT Es.nom as superieur_de_guitton, Es.niveau FROM Activites Ac, Agenda Ag, Employe E, Departement D, Activites Acs, Agenda Ags, Employe Es, AgendaDept Agd, ActivitesDept Acd WHERE Ag.numEmploye = E.numEmploye -- Faire le lien entre l Agenda de Guitton et Monsieur Guitton And Ags.numEmploye = Es.numEmploye -- Faire le lien entre l Agenda d un Employé lambda et l Employé lambda And E.numDept = D.num -- Faire le lien entre le Département d électronique et Monsieur Guitton And Es.numDept = D.num -- Faire le lien entre le Département et l Employé And Ag.numAgenda = Ac.numAgenda lambda -- Faire le lien entre l Agenda et l Activité de Monsieur Guitton And Ags.numAgenda = Acs.numAgenda -- Faire le lien entre l Agenda et l Activité de l Employé lambda And upper( D.nom )= 'ELECTRONIQUE' Sélectionner le département d électronique And upper (E.nom ) = 'GUITTON' -- Sélectionner l Employé qui se nomme Guitton AND E.niveau < Es.niveau -- Comparer les niveaux des personnes par rapport à Monsieur Guitton ORDER BY Es.niveau DESC,Es.nom ASC; -- Ordonner dans l ordre hiérarchique et par nom dans l ordre alphabétique La réponse est la suivante : SUPERIEUR_DE_GUITTON NIVEAU ------------------------------ ---------- MADELINE 1000 BOUVIER 500 LE DUFF 500 Il faut utiliser deux employés pour faire la comparaison avec Monsieur Guitton et les autres supérieurs hiérarchiques. On constate que Monsieur Guitton a trois supérieurs hiérarchiques qui sont Messieurs Madeline, Bouvier et Le Duff dont les deux derniers ont le même niveau hiérarchique. 6. Conclusion Nous avons pu ainsi mieux comprendre le fonctionne d une base de donnée, et les mécanismes mis en place pour en faciliter l utilisation, tel que les séquences, et aussi les triggers. Nous avons pu nous rendre compte que malgré les détails du cahier des charges, il nous restait à choisir la solution à employer dans certains cas. Nous avons abouti à un projet qui répond à l ensemble des exigences du cahier des charges. 23