DÉPARTEMENT D`INFORMATIQUE Faculté des Sciences
Transcription
DÉPARTEMENT D`INFORMATIQUE Faculté des Sciences
DÉPARTEMENT D’INFORMATIQUE Faculté des Sciences Université de Sherbrooke PROJET FINAL par MATHIEU LE RESTE PIERRE-ANTOINE DESHAIES GABRIEL PROVOST ALEXANDRE COMEAU-VERMEERSCH travail présenté à Marc Frapier dans le cadre du cours IFT187 Éléments de bases de données Sherbrooke NOVEMBRE 2014 Notre objectif principal est de créer un système d’hébergement et de partage de vidéos inspiré de la célèbre plateforme YouTube. Notre système comportera de nombreuses fonctionnalités regroupées en plusieurs catégories. Tout d’abord, notre système permettra aux visiteurs de se créer un compte. Ce compte leur permettra de se créer une chaîne afin de téléverser des vidéos, de commenter et noter les vidéos publiées sur le site, de s’abonner à d’autres chaînes et de consulter leur historique de visionnement. Ensuite, une vidéo sera associée à une chaîne et comportera plusieurs attributs dont principalement un nom, une description, et des commentaires. Afin de noter ou commenter une vidéo, il faut être connecté à son compte utilisateur. Quant à elle, une chaîne est associée au compte d’un utilisateur. Elle permet à un utilisateur de regrouper et publier ses vidéos sur la plateforme. Un utilisateur peut avoir plusieurs chaînes. Enfin, notre plateforme comportera des annonceurs avec plusieurs annonces qui seront diffusées avant et pendant les vidéos visionnées par les visiteurs. Description des entités Annonce Cette entité contient les annonces vidéos des annonceurs. Elle possède un attribut nommé “passable” qui permet à un utilisateur de passer cette annonce après 5 secondes. Lorsqu’un utilisateur clique sur l’annonce, il est redirigé vers l’URL contenu dans l’attribut “SiteWeb”. Annonceur Cette entité contient les annonceurs, c’est-à-dire les compagnies qui publient des message publicitaires au début des vidéos. Un annonceur est lié à des chaînes qui sont jugée pertinentes afin de mieux cibler le public. Catégorie Cette entité contient les différentes catégories disponibles pour classifier les vidéos et les regrouper. Plusieurs catégories peuvent être associées à une vidéo Chaîne Cette entité permet à un utilisateur de regrouper et publier ses vidéos. Un utilisateur peut se créer plusieurs chaînes. Une chaîne comporte un attribut “Banniere” qui est une image de fond pour la chaîne. Commentaire Cette entité contient les messages (commentaires) que les utilisateurs ont laissé sur une une vidéo ou une chaîne. Langue Cette entité contient les différentes langues possibles pour une vidéo. Licence Cette entité contient les différentes licences possibles pour un vidéo. Liste de lecture Cette entité contient une liste de plusieurs vidéos à jouer dans un ordre défini. Elle est associée à un utilisateur ou une chaîne Qualité Cette entité contient les qualités possibles pour un vidéo. Utilisateur Cette entité contient le compte utilisateur d’un visiteur. En effet, un visiteur peut se créer un compte utilisateur et il lui sera également possible de lier ses comptes Facebook, Twitter et autres à son compte utilisateur. Vidéo Cette entité contient une vidéo qui est publiée sur une chaîne par l’utilisateur. Elle possède une variable indiquant s’il est possible de commenter la vidéo. Description des associations Ecrit par Cette association indique l’utilisateur qui a écrit le commentaire. Historique Cette association indique l’historique de visionnement d’un utilisateur. Appartient à -> Cette association indique toutes les vidéos d’une chaîne. Modèle conceptuel de données en UML Code SQL drop table licence cascade; create table licence ( idLicence int, nom varchar(50) not null, primary key (idLicence), unique (nom) ); drop table qualite cascade; create table qualite ( idQualite int, nom varchar(50) not null, primary key (idQualite), unique (nom) ); drop table utilisateur cascade; create table utilisateur ( idUtilisateur int, nom varchar(50) not null, primary key (idUtilisateur), unique (nom) ); drop table chaine cascade; create table chaine ( idChaine int, nom varchar(50) not null, nbVues int check (nbVues >= 0), nbAbonnes int check (nbAbonnes >= 0), description varchar(256), dateCreation date not null, URLBanniere varchar(128), idUtilisateur int, primary key (idChaine, idUtilisateur), unique (nom), foreign key (idUtilisateur) references utilisateur ); drop table video cascade; create table video ( idVideo int, nom varchar(50) not null, nbVues int check (nbVues >= 0), nbAimes int check (nbAimes >= 0), nbAimesPas int check (nbAimesPas >= 0), description varchar(256), datePublication date not null, commentable boolean not null, idLicence int not null, idChaine int not null, idUtilisateur int not null, primary key (idVideo), foreign key (idLicence) references licence, foreign key (idChaine, idUtilisateur) references chaine ); drop table qualiteVideo cascade; create table qualiteVideo ( idQualite int, idVideo int, primary key (idQualite, idVideo), foreign key (idQualite) references qualite, foreign key (idVideo) references video ); drop table categorie cascade; create table categorie ( idCategorie int, nom varchar(50) not null, primary key (idCategorie), unique (nom) ); drop table categorieVideo cascade; create table categorieVideo ( idVideo int, idCategorie int, primary key (idVideo, idCategorie), foreign key (idVideo) references video, foreign key (idCategorie) references categorie ); drop table langue cascade; create table langue ( idLangue int, nom varchar(50) not null, primary key (idLangue), unique (nom) ); drop table langueVideo cascade; create table langueVideo ( idVideo int, idLangue int not null, primary key (idVideo), foreign key (idVideo) references video, foreign key (idLangue) references langue ); drop table comptesLies cascade; create table comptesLies ( idUtilisateur int, URLCompteLie varchar(128) not null, primary key (idUtilisateur, URLCompteLie), foreign key (idUtilisateur) references utilisateur ); drop table historique cascade; create table historique ( idVideo int, idUtilisateur int, primary key (idVideo, idUtilisateur), foreign key (idVideo) references video, foreign key (idUtilisateur) references utilisateur ); drop table annonceur cascade; create table annonceur ( idAnnonceur int, nom varchar(50) not null, primary key (idAnnonceur) ); drop table annonce cascade; create table annonce ( idAnnonce int, URLSiteWeb varchar(128), passable boolean not null, dateDebut date not null, dateFin date not null, idAnnonceur int not null, primary key (idAnnonce), foreign key (idAnnonceur) references annonceur ); drop table annonceurChaine cascade; create table annonceurChaine ( idAnnonceur int, idChaine int, idUtilisateur int, primary key (idAnnonceur, idChaine), foreign key (idAnnonceur) references annonceur, foreign key (idChaine, idUtilisateur) references chaine ); drop table commentaire cascade; create table commentaire ( idCommentaire int, cote int default 0 not null, datePublication date not null, texte varchar(512) not null, idUtilisateur int not null, primary key (idCommentaire), foreign key (idUtilisateur) references utilisateur ); drop table commentaireVideo cascade; create table commentaireVideo ( idCommentaire int, idVideo int not null, primary key (idCommentaire), foreign key (idCommentaire) references commentaire, foreign key (idVideo) references video ); drop table commentaireChaine cascade; create table commentaireChaine ( idCommentaire int, idChaine int not null, idUtilisateur int not null, primary key (idCommentaire), foreign key (idCommentaire) references commentaire, foreign key (idChaine, idUtilisateur) references chaine ); drop table listeDeLecture cascade; create table listeDeLecture ( idListe int, nom varchar(50) not null, primary key (idListe) ); drop table listeChaine cascade; create table listeChaine ( idListe int, idChaine int not null, idUtilisateur int not null, primary key (idListe), foreign key (idListe) references listeDeLecture, foreign key (idChaine, idUtilisateur) references chaine ); drop table listeUtilisateur cascade; create table listeUtilisateur ( idListe int, idUtilisateur int not null, primary key (idListe), foreign key (idListe) references listeDeLecture, foreign key (idUtilisateur) references utilisateur ); drop table ordreVideoListe cascade; create table ordreVideoListe ( idVideo int, idListe int, numero int, primary key (idVideo, idListe), foreign key (idVideo) references video, foreign key (idListe) references listeDeLecture ); annonce PK FK1 categorie PK idcategorie U1 nom annonceurchaine annonceur idannonce PK urlsiteweb passable datedebut datefin idannonceur PK,FK1 PK,FK2 idannonceur nom chaine commentairechaine categorievideo PK,FK1 PK,FK2 idannonceur idchaine idvideo idcategorie PK,FK1 idcommentaire FK2 idchaine PK idchaine U1 nom nbvues nbabonnes description datecreation urlbanniere idutilisateur FK1 qualite PK U1 idqualite PK,FK2 PK,FK1 idvideo idqualite nom langue commentaire qualitevideo video PK idlangue PK,FK1 idvideo U1 nom FK2 idlangue idvideo PK,FK1 idcommentaire FK2 idvideo FK1 FK2 nom nbvues nbaimes nbaimespas description datepublication commentable idlicence idchaine licence PK idlicence U1 nom FK1 cote datepublication texte idutilisateur historique PK,FK1 PK,FK2 idvideo idliste numero utilisateur idvideo idutilisateur ordrevideoliste PK,FK1 PK,FK2 idcommentaire commentairevideo PK languevideo PK PK idutilisateur U1 nom compteslies PK,FK1 PK idutilisateur urlcomptelie listeutilisateur PK,FK1 idliste FK2 idutilisateur listechaine listedelecture PK idliste nom PK,FK1 idliste FK2 idchaine