Ce sujet s’inspire du sujet 9 du bac de NSI 2022
On souhaite gérer un club de tennis en ligne avec la possibilité de réserver un terrain à un créneau horaire. Le site ne gère que des réservations pour des matchs en simple. Voici la structure de la base de données :
joueurs | ||||
---|---|---|---|---|
id_joueur | nom_joueur | prenom_joueur | login | mdp |
1 | Dupont | Alice | alice | 1234 |
2 | Durand | Belina | belina | 5694 |
3 | Caron | Camilia | camilia | 9478 |
4 | Dupont | Dorine | dorine | 1347 |
matchs | |||||
---|---|---|---|---|---|
id_match | date | id_creneau | id_terrain | id_joueur1 | id_joueur2 |
1 | 2020-08-01 | 2 | 1 | 1 | 4 |
2 | 2020-08-01 | 3 | 1 | 2 | 3 |
3 | 2020-08-02 | 6 | 2 | 1 | 3 |
4 | 2020-08-02 | 7 | 2 | 2 | 4 |
5 | 2020-08-08 | 3 | 3 | 1 | 2 |
6 | 2020-08-08 | 5 | 2 | 3 | 4 |
terrains | ||
---|---|---|
id_terrain | nom_terrain | surface |
1 | stade | terre battue |
2 | gymnase | synthétique |
3 | hangar | terre battue |
creneaux | |
---|---|
id_creneau | plage_horaire |
1 | 8h-9h |
2 | 9h-10h |
3 | 10h-11h |
4 | 11h-12h |
5 | 12h-13h |
6 | 13h-14h |
7 | 14h-15h |
8 | 15h-16h |
9 | 16h-17h |
10 | 17h-18h |
11 | 18h-19h |
12 | 19h-20h |
Donner la clé primaire de la relation matchs.
La relation matchs a-t-elle une ou des clés étrangères ? Si oui quelles sont-elles ?
Question en plus : Reprendre le script ci-dessous (ANNEXE 1),
Ecrire une requête qui renvoie les prénoms des joueurs dont le nom est ‘Dupont’.
Ecrire une requête qui modifie le mot de passe de Dorine Dupont, son nouveau mot de passe étant 1976.
Question en plus : Difficulté supplémentaire : on ne connait pas le
prochain identifiant (id_joueur
), notre script SQL doit
calculer le prochain identifiant ; Rechercher le plus grand
id_joueur
dans la table, et l’instruction
INSERT
utilisera l’identifiant suivant.
Modifier le script ci-dessous pour calculer l’identifiant suivant
:
SET @id_max = (... requête qui recherche le plus grand id_joueur);
SELECT @id_max;
INSERT joueurs VALUES (@id_max+1,....
Utiliser cet identifiant pour ajouter le prochain joueur
2.. Par lecture et analyse des relations de la base de donnée.
Les élèves qui passaient le bac devaient répondre en recherchant les
informations dans les données des relations (tables) ci-dessus.
Question en plus : Ecrire les requêtes qui répondent aux questions ci-dessus
Ajouter quelques enregistrements
INSERT INTO matchs VALUES
7 ,'2020-08-08', 6 ,2 ,2 ,1),
(8 ,'2020-08-08', 7 ,3 ,2 ,1),
(9 ,'2020-08-08', 7 ,2 ,3 ,2); (
+------------+------------+------------+------------+
| date_match | id_creneau | nom_joueur | nom_joueur |+------------+------------+------------+------------+
2020-08-01 | 3 | Durand | Caron |
| 2020-08-08 | 7 | Caron | Durand |
| +------------+------------+------------+------------+
aide : pour réaliser cette requête, il est possible de faire une jointure un peu particulière avec la table (relation) matchs
INNER JOIN joueurs AS J1 ON J1.id_joueur=matchs.id_joueur1
INNER JOIN joueurs AS J2 ON J2.id_joueur=matchs.id_joueur2
+---------------+------------+
| prenom_joueur | nom_joueur |+---------------+------------+
| Alice | Dupont |
| Belina | Durand |+---------------+------------+
aide : pour réaliser cette requête, il est possible de faire une jointure un peu particulière avec la table (relation) matchs
INNER JOIN joueurs ON joueurs.id_joueur=matchs.id_joueur1 OR joueurs.id_joueur=matchs.id_joueur2
DROP TABLE IF EXISTS xxxx;
DROP TABLE IF EXISTS xxxx;
DROP TABLE IF EXISTS xxxx;
DROP TABLE IF EXISTS xxxx;
CREATE TABLE joueurs (
INT,
id_joueur VARCHAR(255),
nom_joueur VARCHAR(255),
prenom_joueur VARCHAR(255),
login VARCHAR(255)
mdp
);
INSERT INTO joueurs VALUES
1,'Dupont','Alice','alice','1234'),
(2,'Durand','Belina','belina','5694'),
(3,'Caron','Camilia','camilia','9478'),
(4,'Dupont','Dorine','dorine','1347');
(
CREATE TABLE matchs (
INT,
id_match DATE,
date_match INT,
id_creneau INT,
id_terrain INT,
id_joueur1 INT
id_joueur2
);
INSERT INTO matchs VALUES
1 ,'2020-08-01', 2, 1, 1, 4),
(2 ,'2020-08-01', 3 ,1 ,2 ,3),
(3 ,'2020-08-02', 6 ,2 ,1 ,3),
(4 ,'2020-08-02', 7 ,2 ,2 ,4),
(5 ,'2020-08-08', 3 ,3 ,1 ,2),
(6 ,'2020-08-08', 5 ,2 ,3 ,4);
(
CREATE TABLE terrains (
INT,
id_terrain VARCHAR(255),
nom_terrain VARCHAR(255)
surface
);
INSERT INTO terrains VALUES
1,'stade','terre battue'),
(2,'gymnase','synthétique'),
(3,'hangar','terre battue');
(
CREATE TABLE creneaux (
INT,
id_creneau VARCHAR(255)
plage_horaire
);
INSERT INTO creneaux (id_creneau,plage_horaire) values
1,'8h-9h'),
(2,'9h-10h'),
(3,'10h-11h'),
(4,'11h-12h'),
(5,'12h-13h'),
(6,'13h-14h'),
(7,'14h-15h'),
(8,'15h-16h'),
(9,'16h-17h'),
(10,'17h-18h'),
(11,'18h-19h'),
(12,'19h-20h'); (
Utiliser le fichier looping ci-joint et modifier le pour obtenir le bon MLD
CONSTRAINT uk_table UNIQUE (col1, col2, col);
doc unique key - doc index key
ANNEXE :
https://formations.imt-atlantique.fr/bd_ihm/fr/normalisation/normal_forms/