Examen de Base de Données A4 25944 22 février 2003 Le polycopié et les notes de cours sont autorisés. Le corrigé. 1 (1 pt) Quelle est la différence entre le produit cartésien et la jointure entre deux tables. Solution : La jointure est un produit cartésien qui s effectue sur deux tables qui ont au moins un attribut commun, on dit que la jointure se fait sur ces attributs. Les tuples du résultat sont ceux pour lesquels les attributs de jointure sont égaux. 2 (6 pts) Relation des Employés (EMP) EMP(N E, ENOM, PROF, DATEEMB, SAL, COMM, N D) N E :numéro d'employé, clé ENOM :nom de l'employé PROF :profession (directeur n'est pas une profession) DATEEMB :date d'embauche SAL :salaire COMM :commission (un employé peut ne pas avoir de commission) N D :numéro de département auquel appartient l'employé Relation des Départements (DEPT) DEPT(N D, DNOM, DIR, VILLE) N D :numéro de département, clé DNOM :nom du département DIR :directeur du département VILLE :lieu du département (ville) 1
Opérations Algébriques Soit l'exemple suivant : EMP N E ENOM PROF DATEEMB SAL COMM N D 10 Joe Ingénieur 1.10.93 4000 3000 3 20 Jack Technicien 1.5.88 3000 2000 2 30 Jim Vendeur 1.3.80 5000 5000 1 40 Lucy Ingénieur 1.3.80 5000 5000 3 DEPT N D DNOM DIR VILLE 1 Commercial 30 New York 2 Production 20 Houston 3 Développement 40 Boston Exercice 2-A : (1,5 pts) Calculer, σ SAL<5000 (EMP) :(donnez la table résultat) N E ENOM PROF DATEEMB SAL COMM N D 10 Joe Ingénieur 1.10.93 4000 3000 3 20 Jack Technicien 1.5.88 3000 2000 2 Exercice 2-B : (1,5 pts) Calculer, EMPbis = ρ N E N E1 (π N E,COMM(EMP)) EMPbis N E1 COMM 10 3000 20 2000 30 5000 40 5000 Exercice 2-C :(le signe est celui de la jointure) (2 pts) Calculer, π N E,SAL (EMP) EMPbis SAL=COMM N E SAL N E 1 COMM 20 3000 10 3000 30 5000 30 5000 40 5000 40 5000 30 5000 40 5000 40 5000 30 5000 2
Exercice 2-D : (1, pt) Quelle est l'expression de l'algèbre relationnelle qui permettrait d'obtenir le nom des employés qui travaillent à New York. π ENOM ( EMP (σ VILLE='New York' (DEPT))) EMP.N D=DEPT.N D 3 (6 pts) Dans la ville de Taloche pour rendre la circulation fluide et libérer les trottoirs des piquets, aucune voiture ne peut stationner sur les axes de circulations automobiles ou piétonnes. Des places de parking existent en sous-sol ou à l air libre dans des zones réservées, elles sont la propriété de certains habitants. Les propriétaires de véhicules louent une place de parking pour un certain nombre de mois, ils y conservent leurs véhicules. Lors des déplacements en ville, les habitants peuvent stationner sur des emplacements ad hoc (toujours propriétés d habitants) pour un certain tarif horaire. L association des propriétaires de parkings de la ville de Taloche dispose d une base de données relationnelle pour la gestion des revenus de ces parkings, les relations suivantes sont établies. Habitant ( idhab, nom, adr, datearrivée ) Véhicule ( N v, idhab, dateachat, prix, km ) Parking ( idpark, localisation, n, surface ) Propriétaire (idpark, idhab, dateachat, prix ) Louer ( N v, idhab, idpark, nbmois ) Stationner (N v, idhab, idpark, nbheures) Les clés sont soulignées, les clés étrangères ne sont pas précisées. 3
Question 3-A Donnez les requêtes CREATE des relations : Habitant (1 pt), Véhicule (1 pt), Louer (2 pts). Sans oublier de préciser les contraintes. Ni les clauses ON DELETE et ON UPDATE. Solution : CREATE TABLE Habitant ( idhab INTEGER(6), nom VARCHAR(25) NOT NULL, adr VARCHAR(35) NOT NULL, datearrivée INTEGER(4) NOT NULL, PRIMARY KEY idhab) CREATE TABLE Véhicule ( N v VARCHAR(9), idhab INTEGER(6), dateachat INTEGER(4) NOT NULL, prix INTEGER(5), km INTEGER(6), PRIMARY KEY( N v, idhab), FOREIGN KEY (idhab) REFERENCES Habitant ON DELETE CASCADE) CREATE TABLE Louer ( N v VARCHAR(9), idhab INTEGER(6), idpark INTEGER(4), nbmois INTEGER(5) NOT NULL, PRIMARY KEY( N v, idhab, idpark), FOREIGN KEY (N v, idhab) REFERENCES Véhicule, FOREIGN KEY (idpark) REFERENCES Véhicule ON UPDATE CASCADE) 4
(2 pts) Véhicule N v dateachat prix km 1,N Louer nbmois Stationner datedebut Parking idpark, localisation n surface 1,1 Posséde Propriétaire DateAchat prix Habitant idhab nom adr datearrivée 4 (7 pts) Requête SQL : 4-1 (0,5 pt)donnez le nom et l adresse de tous les habitants de Taloche arrivés aprés 1985. SELECT nom, adr FROM Habitant WHERE datearrivée > 1985; 5
4-2 (0,5 pt) Donnez le nom et l adresse de tous les habitants de Taloche classés par ordre alphabétique. SELECT nom, adr FROM Habitant ORDER BY nom; 4-3 (0,5 pt) Combien de véhicules existent dans la ville de TALOCHE ; SELECT COUNT(*) FROM Véhicule; 4-4 (1 pt) Donner l année et le nombre de véhicule par année d achat. SELECT dateachat, COUNT(*) FROM Véhicule GROUP BY dateachat ; 4-5 (1 pt) Quel est le nom, la date d achat, la localisation et le n de parking des habitants qui en ont achetés après 1998. SELECT nom, dateachat, localisation, n FROM Habitant H, Propriétaire PR, Parking P WHERE H.idHab=PR.idHab AND PR.idPark=P.idpark AND dateachat>1998; 4-6 (2 pts) Donner le nom, l adresse des habitants qui disposent d un véhicule mais qui ne sont pas propriétaire de parking. SELECT nom, adr FROM Habitant H, véhicule V WHERE H.idHab=V.idHab And H.IdHab NOT IN (SELECT idhab FROM Propriètaire) ; 4-7 (1,5 pt) Quels habitants ont stationné. SELECT DISTINCT( idhab ), nom FROM Habitant H, Véhicule V, Stationner S WHERE H.idHab=V.idHab AND V.N v=s.n v; 6