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