Département d`informatique Travail de session

Transcription

Département d`informatique Travail de session
Département d’informatique
Faculté des sciences
Université de Sherbrooke
Travail de session- partie 1
Par
Guillaume Couture
Jean-Nicolas Létourneau
Guillaume Royer-Houle
Dominic Thériault
Frédéric Diotte
Travail présenté à
Marc Frappier (Ph.D)
Dans le cadre du cours IFT187
Élément de base de données
Sherbrooke (Québec)
14 Novembre 2014
Festival de musique
Nous désirons organiser un festival de musique où performeront des artistes. Chaque
groupe a ses membres et possède des coordonnées (numéro de téléphone, adresse
courriel). Un groupe se produit sur une scène durant une performance qui a lieu à une
date et une heure. Une scène a une certaine capacité en public. Chaque scène, kiosque et
bloc sanitaire sont associés à une zone située sur le site. Chaque zone possède un numéro
identificateur. Il y a différents types de billets permettant d’accéder au site. Un billet a un
prix associé au nombre de jours auxquels il donne accès au festival. Chaque billet vendu
est répertorié avec son numéro de billet, le nom de l’acheteur et la date. Les employés du
festival sont attribués à un lot, compris dans une zone, occupé par un kiosque ou une
scène. Chaque employé a un rôle comme : technicien, caissier, commis, sécurité et
concierge. L’horaire d’un employé définit son rôle, son quart de travail ainsi que la date à
laquelle il travaillera. Il est aussi possible de contacter les groupes ou les employés et de
localiser les festivals par leur adresse, code postal ainsi que leur ville, leur état et leur
pays.
Description du modèle UML
Entités
Billet : Cette entité contient tous les types de billet qui donnent accès aux différents
festivals. Par exemple, les billets qui donnent accès au premier, au deuxième ou à toute
autre combinaison de jours du festival.
BilletVendus : Cette entité contient chaque billet qui a été vendu pour le festival.
Employe : Cette entité contient tous les employés qui travaillent pour le festival.
EmployeRole : Cette entité contient les différents rôles que peut posséder les employés
du festival. Par exemple, les caissier, éclairagistes, techniciens de scène, techniciens de
son, agent de sécurité, concierge.
Festival : Cette entité contient tous les festivals du système.
GroupeMusique : Cette entité contient tous les groupes qui participent au festival.
HoraireEmployé : Cette entité faible indique quel employé travaille à quelle heure pour
quel rôle.
HoraireGroupe : Cette entité contient les heures de début et de fin de chaque
performance.
Kiosque : Cette entité contient tous les kiosques qui sont situés dans les zones du festival.
Lot : Cette entité contient les différents lots disponibles.
Membre : Cette entité contient toutes les personnes qui font partie d’un groupe de
musique.
QuartTravail : Cette entité contient les différents quarts de travail qui peuvent être
occupés par les employés et les agents de sécurité.
Region : Cette entité contient toutes les régions où se situent les festivals.
Scene : Cette entité contient toutes les scènes qui sont situées dans les différentes zones
du festival.
TypeKiosque : Cette entité indique de quel sont les types de kiosques disponibles. Par,
exemple les restaurants, bars, souvenirs.
Ville : Cette entité contient toutes les villes ou se situent les festivals.
Zone : Cette entité contient toutes les zones qui font partie du terrain des festivals.
Associations
Appartient : Cette association indique à quel festival appartiennent les différentes zones.
Aussi, quel membre appartient à quel groupe de musique.
Contient : Cette association indique ce qu’un lot contient. Soit une scène ou un kiosque.
Définit : Cette association indique quel type de kiosque défini quel kiosque.
Habite : Cette association indique dans quelle ville habite chaque employé.
Jour : Cette association indique quel billet donne accès à un festival pour un jour donné.
Localisé : Cette association indique quelles villes sont localisées dans quelles régions.
Situé : Cette association indique quel lot est situé dans quelle zone.
Modèle entité-association
Jour
Date: Set
Billet
1..*
idTypeBillets (c1)
Prix
1..1
Festival
idFestival (c1)
Nom
Adresse
CodePostal
DateDébut
DateFin
0..* 1..*
BilletVendus
idBilletVendus (cp1)
NomAcheteur
DateVente
Situé
TypeKiosque
Appartient
idType (c1)
Description
1..1
0..1
Region
idRegion (c1)
Nom
Pays
Défini
1..*
1..*
Kiosque
Zone
Ville
Possède
1..* idVille (c1)
1..1
Nom
0..1
idZone (c1)
NomZone
NbBecosse
1..1
Habite
Situé
QuartTravail
1..*
idKiosque (c1)
Nom
0..1
Contient
Lot
idQuartTravail C1)
HeureDebut
HeureFin
Scene
1..1
1..1
IdLot (c1)
0..1 idScene (c1)
Nom
NbPersonnesMax
Contient
0..*
Employe
EmployéRole
idEmployeRole (c1)
Description
HoraireEmploye
idEmploye (c1)
Nom
NoTelephone
Adresse
Courriel
NumeroAssuranceSocial
HorraireGroupe
DateHeureDebut
DateHeureFin
Date
Membre
GroupeMusique
Appartient
idMembre (c1)
Nom
1..1
idGroupeMusique (c1)
1..* NoTelephone
Nom
Code SQL
drop table Etat cascade;
create table Etat (
IdEtat int,
NomEtat varchar (30),
nomPays varchar (30),
Primary key (IdEtat)
)
;
drop table Ville cascade;
create table Ville (
IdVille int,
Nom varchar(30),
IdEtat int,
Primary key (IdVille),
Foreign key (IdEtat) references Etat
)
;
drop table Festival cascade;
create table Festival (
IdFestival int,
Nom varchar(30),
DateDebut Date,
DateFin Date,
Adresse varchar (30),
IdVille int not null,
CodePostal Varchar (6),
Primary key (IdFestival),
Foreign key (IdVille) references Ville,
constraint Date_difference check (DateFin > DateDebut)
)
;
drop table CombinaisonJours cascade;
create table CombinaisonJours (
IdFestival int not null,
IdCombinaisonJours int,
Primary key (IdCombinaisonJours, IdFestival),
Foreign key (IdFestival) references Festival
)
;
drop table JoursDate cascade;
create table JoursDate (
Dates Date,
IdFestival int not null,
IdCombinaisonJours int not null,
Primary key (Dates,IdCombinaisonJours, IdFestival),
Foreign key (IdFestival,IdCombinaisonJours) references CombinaisonJours
)
;
drop table TypeBillets cascade;
create table TypeBillets (
IdTypeBillets int,
IdFestival int not null,
IdCombinaisonJours int not null,
prix numeric(5,2),
description varchar (20),
Primary key ( IdTypeBillets),
Foreign key (IdFestival,IdCombinaisonJours) references CombinaisonJours,
constraint prix_positif check (prix >= 0)
)
;
drop table BilletsVendus cascade;
create table BilletsVendus (
IdBilletVendu int,
IdTypeBillets int not null,
Nom varchar (30),
DateAchat Date,
Primary key (IdBilletVendu),
Foreign key (IdTypeBillets) references TypeBillets
)
;
drop table Zone cascade;
create table Zone (
IdFestival int not null,
IdZone int,
NomZone varchar (20),
NombreBecosse int,
Primary key (IdZone, IdFestival),
Foreign key (IdFestival) references Festival
)
;
drop table QuartTravail cascade;
create table QuartTravail (
IdQuartTravail int,
DateHeureDebut time,
DateHeureFin time,
Primary key (IdQuartTravail)
)
;
drop table Lot cascade;
create table Lot (
IdLot int,
IdZone int not null,
IdFestival int not null,
Primary key (IdLot),
Foreign key (IdZone,IdFestival) references Zone
)
;
drop table TypeKiosque cascade;
create table TypeKiosque (
IdTypeKiosque int,
Description varchar (30),
Primary key (IdTypeKiosque)
)
;
drop table Kiosque cascade;
create table Kiosque (
IdKiosque int,
Nom varchar (20),
IdTypeKiosque int not null,
IdLot int,
Primary key (IdKiosque),
Foreign key (IdTypeKiosque) references TypeKiosque,
Foreign key (IdLot) references Lot
)
;
drop table Scene cascade;
create table Scene (
IdScene int,
IdLot int not null,
Nom varchar(30),
NbPersonnesMax int,
Primary key (IdScene),
Foreign key (IdLot) references Lot
)
;
drop table Employe cascade;
create table Employe (
IdEmploye int,
Nom varchar(30),
NoDeTelephone varchar(20),
Adresse varchar(30),
IdVille int not null,
Courriel varchar(30),
NumeroAssuranceSocial Numeric (9,0),
Primary key (IdEmploye),
Foreign key (IdVille) references Ville,
constraint courriel_valide check (courriel like '%@%.%')
)
;
drop table EmployeRole cascade;
create table EmployeRole (
IdEmployeRole int,
Description varchar(30),
Primary key (IdEmployeRole)
)
;
drop table HoraireEmploye cascade;
create table HoraireEmploye (
IdEmploye int not null,
IdLot int not null,
IdEmployeRole int not null,
IdQuartTravail int not null,
Date Date,
Primary key (IdEmploye,IdLot,IdEmployeRole,IdQuartTravail),
Foreign key (IdEmploye) references Employe,
Foreign key (IdLot) references Lot,
Foreign key (IdEmployeRole) references EmployeRole,
Foreign key (IdQuartTravail) references QuartTravail
)
;
Drop table GroupeMusique cascade;
create table GroupeMusique (
IdGroupeMusique int,
Nom varchar (30),
numTelephone varchar (20),
Primary key (IdGroupeMusique)
)
;
drop table Membre cascade;
create table Membre (
idMembre int,
nom varchar (30),
courriel varchar (20),
Primary key (idMembre),
constraint courriel_valide check (courriel like '%@%.%')
)
;
drop table GroupeMembre cascade;
create table GroupeMembre (
IdGroupeMusique int not null,
idMembre int not null,
Primary key (IdGroupeMusique,idMembre),
Foreign key (IdGroupeMusique) references GroupeMusique,
Foreign key (idMembre) references Membre
)
;
drop table HoraireGroupeMusique cascade;
create table HoraireGroupeMusique (
IdGroupeMusique int not null,
IdScene int not null,
DateHeureDebut timestamp,
DateHeureFin timestamp,
Primary key (IdGroupeMusique, IdScene),
Foreign key (IdGroupeMusique) references GroupeMusique,
Foreign key (IdScene) references Scene,
constraint Date_difference check (DateHeureDebut < DateHeureFin)
)
;
Modèle relationnel
ville
festival
PK
idfestival
FK1
nom
datedebut
datefin
adresse
idville
codepostal
idville
FK1
nom
idetat
PK
idetat
PK
idemploye
nometat
nompays
zone
idfestival
idcombinaisonjours
employe
nom
nodetelephone
adresse
idville
courriel
numeroassurancesocial
FK1
combinaisonjours
PK,FK1
PK
PK
etat
PK,FK1
PK
typekiosque
idfestival
idzone
PK
idtypekiosque
PK
idkiosque
FK1
FK2
nom
idtypekiosque
idlot
description
nomzone
nombrebecosse
typebillets
kiosque
joursdate
PK
idtypebillets
FK1
FK1
idfestival
idcombinaisonjours
prix
description
PK
PK,FK1
PK,FK1
billetsvendus
lot
dates
idfestival
idcombinaisonjours
groupemusique
PK
idbilletvendu
FK1
idtypebillets
nom
dateachat
PK
PK
idlot
FK1
FK1
idzone
idfestival
scene
horaireemploye
idgroupemusique
PK
idscene
nom
numtelephone
courriel
FK1
idlot
nom
nbpersonnesmax
PK,FK1
PK,FK2
PK,FK3
PK,FK4
idemploye
idlot
idemployerole
idquarttravail
date
horairegroupemusique
membre
PK
PK,FK1
PK,FK2
idmembre
nom
idgroupemusique
idscene
dateheuredebut
dateheurefin
groupemembre
PK,FK1
PK,FK2
idgroupemusique
idmembre
quarttravail
PK
idquarttravail
dateheuredebut
dateheurefin
employerole
PK
idemployerole
description