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