Télécharger

Transcription

Télécharger
Université Paul Sabatier
TP1 – SQL LDD/LMD
La société «DPP » veut mettre en place un service de partage d’histoires (blagues, contes,
citations, anecdotes) en ligne. Les utilisateurs peuvent écrire leurs propres histoires, partager avec
d’autres des histoires existantes, voter pour des histoires qu’ils aiment (avis positif, like) ou encore les
commenter, etc. La société a créé dans ce but une base de données dont le schéma est constitué par les
relations suivantes :
PROFILS(cprofile, prenom, nom, daten, pays, image, passe)
Relation décrivant les profils d’utilisateur.
§ cprofile : Code identifiant l’utilisateur
§ prenom : Prenom de l’utilisateur
§ nom : Nom de famille de l’utilisateur
§ daten : Date de naissance de l’utilisateur
§ pays : Pays de l’utilisateur
§ image : Adresse URL de la localisation de l’image photo du profil
§ passe : Mot de passe de l’utilisateur
HISTOIRES(chistoire, titre, texte, auteur#, type, date)
Relation décrivant les histoires.
§ chistoire : Code identifiant l’histoire
§ titre : Titre de l’histoire
§ texte : Contenu de l’histoire (maximum 600 caractères)
§ auteur : Code profil de la personne qui a créé l’histoire
§ type : Type de l’histoire (blague, conte, citation, anecdote)
§ date : Date et heure de création de l’histoire
AMITIES(cprofile1#, cprofile2#)
Relation décrivant les relations d’amitié entre les utilisateurs du site.
§ cprofile1 : Code identifiant du profil d’une des personnes en relation d’amitié
§ cprofile2 : Code identifiant du profil de la seconde personne en relation d’amitié
AVIS_POSITIFS(cprofile#, chistoire#, date)
Relation contenant les histoires aimées par les utilisateurs.
§ cprofile : Code identifiant du profil de la personne qui a voté
§ chistoire : Code identifiant l’histoire
§ date : Date de l’avis
COMMENTAIRES(cprofile#, chistoire#, date, commentaire)
Relation contenant les commentaires des utilisateurs pour les histoires.
§ cprofile : Code identifiant du profil de la personne qui a commenté
§ chistoire : Code identifiant l’histoire
§ date : Date du commentaire
§ commentaire : Texte du commentaire (maximum 200 caractères)
Q1. Créez les 5 relations avec les contraintes de clés primaires et étrangères (en écrivant la syntaxe
SQL).
Q2. Tentez de supprimer la relation HISTOIRES. Que constatez-vous ? Expliquez.
Q3. Insérez les données suivantes :
Y. Pitarch, K. Pinel-Sauvagnat, O. Teste
Université Paul Sabatier
PROFILS :
(1,’Homer’,’Simpson’,’1950-10-01’,’Etats Unis’,‘images/profile/homer.jpg’,’pw’)
PROFILS :
(2,’Marge’,’Simpson’,’1958-10-01’,’Etats Unis’, ’images/profile/marge.jpg’,’y’)
PROFILS :
(3,’Bart’,’Simpson’,’1975-10-01’,’Etats Unis’,’images/profile/bart.jpg’,’pw’)
HISTOIRES :
(1,'Le travail','Fils, si tu veux réellement quelque chose dans cette vie, tu
dois travailler pour ! Maintenant chut ! Ils vont donner les résultats du
loto!', 1,'citation','2014-03-10 11:08:02')
AMIS : (1,2)
AMIS : (1,3)
AVIS_POSITIFS : (3, 1,’2014-03-11’)
COMMENTAIRES (3,1, ’2014-03-11’,’J’’aime pas’)
Q4. « Marge Simpson a donné le commentaire « MDR » pour l’histoire intitulée « Le travail » le
17/03/2014. Effectuez l’insertion qui s’avère nécessaire pour stocker cette information dans votre base
de données.
Q5. Tentez d’insérer les données suivantes en expliquant les phénomènes observés.
PROFILS :
(1,’Assein’,’Marc’,’1989-09-04’, ’France’, ‘images/profile/marc.jpg’)
AMIS : (1,14)
Q6. Tentez de supprimer le profil de ’Homer Simpson’. Que constatez-vous ? Expliquez.
Q7. Donnez l’instruction SQL qui peut supprimer tous les commentaires avant 2012.
Q8. Créez une table HISTOIRES_HOMER(chistoire, titre, text, date,
type). Quelle est l’instruction qui peut insérer dans cette table toutes les histoires écrites
par l’utilisateur avec le code profil 1 (on suppose qu’il y a plus d’une histoire à insérer) ?
Q9. Ajoutez l’attribut NBLIKES INT(5) dans la table HISTOIRES_HOMER pour y mettre le
nombre d’avis positifs (« like ») qui ont été donnés sur chacune de ses histoires. Quelle est
l’instruction qui permet de mettre à jour la table ?
Y. Pitarch, K. Pinel-Sauvagnat, O. Teste
Université Paul Sabatier
ANNEXE LDD
Dans la suite, nous adoptons les symboles suivants :
{e1|e2|…|en} désigne une alternative entre les expressions e1, e2,…, en
[e] désigne une expression optionnelle e
LDD – CREATE
<creation_table>::=CREATE TABLE nom_table
(
<definition_attribut>,
<definition_attribut>,
...
<definition_contrainte>,
<definition_contrainte>,
...
) TYPE=InnoDB;
<definition_attribut>::=nom_attribut <type_attribut> [<definition_contrainte>]
<type_attribut>::={DECIMAL(n) | DECIMAL(n,m) | VARCHAR(n) | CHAR(n) | DATE}
<definition_contrainte>::=CONSTRAINT nom_contrainte
{
PRIMARY KEY (nom_attribut, nom_attribut,...)
| FOREIGN KEY (nom_attribut, nom_attribut,...)
REFERENCES nom_table(nom_attribut, nom_attribut,...)
|CHECK (nom attribut operande valeur
| NOT NULL
}
LDD – DROP
<supprimer_table>::=DROP TABLE nom_table;
LDD – ALTER
<modifier_table>::=ALTER TABLE nom_table
{
ADD <definition_attribut>
| ADD <definition_contrainte>
| DROP nom_attribut
| DROP CONSTRAINT nom_contrainte
};
Y. Pitarch, K. Pinel-Sauvagnat, O. Teste
Université Paul Sabatier
ANNEXE LMD
LMD – INSERT
<insérer_ligne>::=INSERT INTO nom_table VALUES (valeur, valeur,...);
LMD – DELETE
<supprimer_ligne>::=DELETE FROM nom_table
[WHERE <condition_selection>];
<condition_selection>::=nom_attribut <operateur> valeur
[{AND | OR} <condition_selection>]
<operateur>::={=| <>| >| >=| <| <=}
LMD – UPDATE
<modifier_ligne>::=UPDATE nom_table
SET nom_attribut = valeur, nom_attribut = valeur
[WHERE <condition_selection>];
Y. Pitarch, K. Pinel-Sauvagnat, O. Teste