Base de données cinématographique⚓︎
D'après 2022, Métropole, J1, Ex. 2
On pourra utiliser les mots clés SQL suivants : SELECT, FROM, WHERE, JOIN, ON, INSERT, INTO, VALUES, UPDATE, SET, AND
.
Nous allons étudier une base de données traitant du cinéma dont voici le schéma relationnel qui comporte 3 relations :
- la relation
individu (id_ind, nom, prenom, naissance)
- la relation
realisation (id_rea, titre, annee, type)
- la relation
emploi (id_emp, description, #id_ind, #id_rea)
Les clés primaires sont soulignées et les clés étrangères sont précédées d'un #
.
Ainsi emploi.id_ind
est une clé étrangère faisant référence à individu.id_ind
.
Voici un extrait des tables individu
et realisation
:
Extrait de individu
id_ind |
nom |
prenom |
naissance |
---|---|---|---|
105 |
'Hulka' |
'Daniel' |
'01-06-1968' |
403 |
'Travis' |
'Daniel' |
'10-03-1968' |
688 |
'Crog' |
'Daniel' |
'07-07-1968' |
695 |
'Pollock' |
'Daniel' |
'24-08-1968' |
Extrait de realisation
id_rea |
titre |
annee |
type |
---|---|---|---|
105 |
'Casino Imperial' |
2006 |
'action' |
325 |
'Ciel tombant' |
2012 |
'action' |
655 |
'Fantôme' |
2015 |
'action' |
950 |
'Mourir pour attendre' |
2021 |
'action' |
1. On s'intéresse ici à la récupération de données dans une relation.
1.a. Décrire ce que renvoie la requête ci-dessous :
SELECT nom, prenom, naissance
FROM individu
WHERE nom = 'Crog';
Réponse
La requête renvoie les nom, prénom et date de naissance de tous les individus qui portent Crog comme nom de famille. Dans la mesure où l'on ne fournit que des extraits des tables, on ne peut pas fournir le résultat de cette requête de façon certaine.
1.b. Fournir une requête SQL permettant de récupérer le titre et la clé primaire de chaque film dont la date de sortie est strictement supérieure à 2020.
Réponse
SELECT titre, id_rea
FROM realisation
WHERE annee > 2020;
2. Cette question traite de la modification de relations.
2.a. Dire s'il faut utiliser la requête 1 ou la requête 2 proposées ci-dessous pour modifier la date de naissance de Daniel Crog. Justifier votre réponse en expliquant pourquoi la requête refusée ne pourra pas fonctionner.
UPDATE individu
SET naissance = '02-03-1968'
WHERE id_ind = 688 AND nom = 'Crog' AND prenom = 'Daniel';
INSERT INTO individu
VALUES (688, 'Crog', 'Daniel', '02-03-1968');
Réponse
Compte tenu de l'extrait fourni de la table individu
, l'identifiant 688
est déjà utilisé pour un enregistrement et il ne peut pas y avoir de doublon pour les clés primaires, ainsi la requête 2 provoquera une erreur.
La requête 1 est correcte.
Bien que valide cette requête peut être simplifiée en n'utilisant que la clé primaire de la table :
UPDATE individu
SET naissance = '02-03-1968'
WHERE id_ind = 688;
2.b. Expliquer si la relation individu
peut accepter (ou pas) deux individus portant le même nom, le même prénom et la même date de naissance.
Réponse
Aucun des champs correspondant ne possède la contrainte UNIQUE
(hypothèse réaliste). Les deux individus n'auront donc pas le même identifiant ! Ainsi, oui, la relation individu
peut accepter deux tels individus.
3. Cette question porte sur la notion de clés étrangères.
3.a. Recopier sur votre copie les demandes ci-dessous, dans leur intégralité, et les compléter correctement pour qu'elles ajoutent dans la relation emploi
les rôles de Daniel Crog en tant que James Bond dans le film nommé 'Casino Impérial'
puis dans le film 'Ciel tombant'
.
INSERT INTO emploi
VALUES (5400, 'Acteur(James Bond)', ... , ... );
INSERT INTO emploi
VALUES (5401, 'Acteur(James Bond)', ... , ...);
Réponse
INSERT INTO emploi
VALUES (5400, 'Acteur(James Bond)', 688, 105);
INSERT INTO emploi
VALUES (5401, 'Acteur(James Bond)', 688, 325);
3.b. On désire rajouter un nouvel emploi de Daniel Crog en tant que James Bond dans le film 'Docteur Yes'
.
Expliquer si l'on doit d'abord créer l'enregistrement du film dans la relation realisation
ou si l'on doit d'abord créer le rôle dans la relation emploi
.
Réponse
Il faut d'abord créer l'enregistrement du film dans la relation realisation
, car l'identifiant du film doit être connu afin d'être utilisé comme clé étrangère dans la relation emploi
.
4. Cette question traite des jointures.
4.a. Recopier sur votre copie la requête SQL ci-dessous, dans son intégralité, et la compléter de façon à ce qu'elle renvoie le nom de l'acteur, le titre du film et l'année de sortie du film, à partir de tous les enregistrements de la relation emploi
pour lesquels la description de l'emploi est 'Acteur(James Bond)'
.
SELECT ...
FROM emploi
JOIN individu ON ...
JOIN realisation ON ...
WHERE emploi.description = 'Acteur(James Bond)';
Réponse
SELECT nom, titre, annee
FROM emploi
JOIN individu ON emploi.id_ind = individu.id_ind
JOIN realisation ON emploi.id_rea = realisation.id_rea
WHERE emploi.description = 'Acteur(James Bond)';
4.b. Fournir une requête SQL permettant de trouver toutes les descriptions des emplois de Denis Johnson (Denis est son prénom et Johnson est son nom).
On veillera à n'afficher que la description des emplois et non les films associés à ces emplois.
Réponse
SELECT description
FROM emploi
JOIN individu ON emploi.id_ind = individu.id_ind
WHERE prenom = 'Denis' AND nom = 'Johnson';