RAPPORT DE PROGRAMMATION :
TER - PHP
LUROIS Frédéric
GRATIEN Xavier Maîtrise Informatique
SOMMAIRE
2.2. SCHEMA
ENTITES / ASSOCIATION
3.1. Les modèles
HTML (Templates)
Pour réaliser ce ter - php, nous avons décidé de créer un site permettant aux internautes de louer et d’acheter des films (en VHS ou en DVD), ainsi que des produits dérivés tels que les bandes originales ou les affiches de films, et également de télécharger les bandes annonces ou les chansons des bandes originales.
Ce document décrit de manière précise les différentes étapes et éléments qui nous ont permis de créer le site.
La première étape fut la mise en place du « cahier des charges » du site en définissant les hypothèses de travail suivantes :
§ Un film est défini par un titre, une description, son année de sortie, sa durée, son genre, le type de public auquel il s’adresse, sa note (fixé par le webmaster), et l’adresse de son site officiel
§ Le site propose les films en DVD ou VHS (et peut évoluer vers d’autres supports futurs)
§ Le site propose les bandes originales en CD ou K7 (et peut évoluer vers d’autres supports futurs)
§ Un film est composé d’un ou de plusieurs acteurs, d’un ou de plusieurs producteurs, et d’un ou de plusieurs réalisateurs
§ Le site permet d’obtenir des informations relatives aux acteurs, producteurs, et réalisateurs tels que leur biographie ou leur filmographie
§ Le site permet d’acheter les affiches, les bandes originales (le téléchargement est également possible), et de télécharger les bandes annonces des films
§ Un internaute qui désire louer ou acheter un film doit d’abord s’inscrire. Ceci fait il aura alors accès à son compte, qui lui permet d’avoir un historique de toutes les transactions effectuées depuis qu’il est inscrit
§ Le prix d’achat d’un film est fonction du film, de son support (VHS ou DVD) et de la langue, alors que le prix de location est fonction de la durée de location, qui dépend elle-même du support du film (le prix de location ne dépend donc pas du film lui-même)
§ Le prix des bandes originales dépend de la BOF elle-même et du support (K7 ou CD)
§ Le prix des affiches dépend de l’affiche elle-même et de leur dimension
§ Les différentes copies des films loués sont identifiées et les différentes langues disponibles pour les films (essentiellement pour les VHS) dépendent des copies
2.2. SCHEMA ENTITES / ASSOCIATION
Ces hypothèses de travail nous ont permis de créer le schéma entités / association suivant :
A partir du schéma entités / association nous avons défini le schéma relationnel
Suivant (les clés sont en gras et les clés étrangères précédées par des ‘#’) :
LOGIN (login, password)
CLIENT (num_client, nom, prenom, adresse, num_cb,
num_rib,
date_expiration,
email, date_inscription, #login)
FILM (num_film, titre, description, année, durée,
note,
site_officiel, url, #lib_genre,
#type_public)
GENRE (lib_genre)
PUBLIC (type_public)
LANGUE (lib_langue)
SUPPORT_FILM (lib_support_film)
ACTEUR (num_acteur, nom, prénom, biographie,
filmographie)
REALISATEUR (num_realisateur,
nom, prénom, biographie,
filmographie)
PRODUCTEUR (num_producteur, nom, prénom, biographie,
filmographie)
VERSION (num_version, #num_film,
#lib_langue)
ACHAT (num_achat, date, état, cout_total, #num_client)
LOCATION (num_location, date, #num_client)
PRIX_LOCATION (durée_loc, prix)
DIMENSION (lib_dimension)
AFFICHE (num_affiche, prix, #lib_dimension, #num_film)
BANDE_ANNONCE (num_ba, nom_ba, taille, #num_film)
BANDE_ORIGINALE (num_bo, titre_bo, #num_film)
SUPPORT_BO (lib_support_bo)
CHANSON (id_chanson, num_chanson, titre, durée, #num_bo)
ACHAT_BO (#num_achat, #num_bo,
#lib_support_bo, quantite, prix)
ACHAT_AFFICHE (#num_achat, #num_affiche,
quantite, prix)
ACHAT_FILM (#num_achat, #num_version,
#lib_support_film
quantite,
prix)
LOCATION_VERSION (#num_location, #num_version,
etat, duree)
PRIX_BO (#num_bo, #lib_support_bo, prix)
PRIX_LOC_SUPPORT_FILM (#lib_support_film, #durée_loc,
#prix)
PRIX_VERSION (#num_version, #lib_support_film,
prix)
TELECHARGE_CHANSON (date, #num_client,
# id_chanson)
TELECHARGE_BA (date,
#num_client, #num_ba)
ACTEUR_FILM (#num_acteur, #num_film,
rang)
PRODUCTEUR_FILM (#num_producteur,
# num_film)
REALISATEUR_FILM (#num_realisateur, #
num_film)
CRITIQUE_FILM (date, #num_client, #num_film,
critique, note)
CRITIQUE_BO (date, #num_client, #num_bo,
critique, note)
Remarque :
Le SGBD relationnel utilisé (à savoir MySQL) ne gère pas les clés étrangères (« foreign key »), ainsi que certaines contraintes d’intégrités (les « references »). C’est pour cette raison que dans notre script de création de la base (fournit en annexe), les clés étrangères n’apparaissent pas et les attributs « references » sont utilisés comme clés primaires.
L’intégrité de notre base de données est tout de même conservée car tous les formulaires qui permettent d’ajouter des éléments dans la base se servent de liste déroulante et de numéro automatique (ce qui permet de n’afficher que des éléments réellement présent dans la base).
Table LOGIN :
- login : le login utilisé par un internaute pour accéder à son compte
- password : son mot de passe
Table FILM :
-
num_film : le numero du film
-
titre : son titre
-
description : sa description
-
année : son année de sortie
-
durée : sa durée
- note : la note que nous lui avons donné
- site_officiel : l’url du site officiel du film
- url : l’url de stockage de toutes les données concernant ce film (pour les webmaster)
- lib_genre : le genre du film (ex : « action »)
- type_public : le type de public auquel il s’adresse
Table CLIENT :
- num_client : le numéro du client
- nom : son nom
-
prénom : son prénom
-
adresse : son adresse
-
num_cb : le n° de la carte bleu
(pour les achats et locations)
- date_expiration : la date d’expiration de la carte bleu
-
num_rib : le n° de rib (pour les
achats et locations)
-
email : son email
- date_inscription : la date à laquelle il s’est inscrit sur le site
Table PUBLIC :
- type_public : le type de public auquel un film est destiné (ex : « interdit aux- 12 ans »)
Table GENRE :
- lib_genre : le genre d’un film (ex : « action »)
Table LANGUE :
- la langue d’une copie d’un film
Table
SUPPORT_FILM :
-
lib_support_film : le support d’un
film (ex : “DVD”)
Table ACTEUR :
- num_acteur : l’id d’un acteur
- nom : son nom
- prénom : son prénom
- biographie : sa biographie
- filmographie : sa filmographie
Table REALISATEUR :
- num_acteur : l’id d’un réalisateur
- nom : son nom
- prénom : son prénom
- biographie : sa biographie
- filmographie : sa filmographie
Table PRODUCTEUR :
- num_acteur : l’id d’un producteur
- nom : son nom
- prénom : son prénom
- biographie : sa biographie
- filmographie : sa filmographie
Table VERSION :
- num_version : l’id de la version d’un film
- num_film : l’id du film auquel la version correspond
- lib_langue : la langue de la version
Table Achat :
- num_achat : le numéro d’une commande d’achat d’un film
- date : la date à laquelle est effectuée la commande d’achat
- etat : l’etat de la commande (ex : « en attente, terminé, en cours de livraison »)
- cout_total : le coût total d’une commande d’achat de films
- num_client : le numéro du client qui a effectué cet commande d’achat
Table Location :
- num_location : le numéro d’une commande de location d’un film
- date : la date a laquelle est effectuée la commande de location
- num_client : le numéro du client qui a effectué cet commande de location
Table Prix_Location :
- duree_loc : la durée d’une location
- prix : le coût d’une location d’une telle durée
Table DIMENSION :
- lib_dimension : les dimensions d’une affiche
Table Affiche :
- num_affiche : l’id de l’affiche
- prix : le prix de l’affiche
- lib_dimension : les dimensions de l’affiche
- num_film : le numéro du film auquel elle fait référence
Table Bande_Annonce :
- num_ba : l’id d’une bande annonce
- nom_ba : le nom de la bande annonce
- taille : sa taille (en Mo)
- num_film : le numéro du film auquel elle fait référence
Table Bande_Originale :
- num_bo : l’id de la BOF
- titre_bo : le titre de la BOF
- num_film : le numéro du film auquel elle fait reference
Table Support_Bo :
- lib_support_bo : le support d’une BOF (ex : K7 ou CD)
Table Chanson :
- id_chanson : l’id d’une chanson
- num_chanson : le numéro de piste d’une chanson (sur un album)
- titre : le titre de la chanson
- duree : la duree de la chanson
- num_bo : le numéro de la BOF auquelle la chanson appartient
Table Achat_Bo :
- num_achat : le numéro de la commande d’achat
- num_bo : le numéro de la BOF achetée
- lib_support_bo : le support de la BOF achetée
- quantité : le nombre d’exemplaire de la BOF achetée
- prix : le prix unitaire de la BOF (pour gestion historique)
Table Achat_Affiche :
- num_achat : le numéro de la commande d’achat
- num_affiche : le numéro de l’affiche achetée
- quantité : le nombre d’exemplaire de l’affiche achetée
- prix : le prix unitaire de l’affiche (pour gestion historique)
Table Achat_Film :
- num_achat : le numéro de la commande d’achat
- num_version : le numéro de la version achetée
- lib_support_film : le support de la version achetée
- quantité : le nombre d’exemplaire de la version achetée
- prix : le prix unitaire de la version (pour gestion historique)
Table Location_VERSION :
- num_location : le numéro de la commande de location
- num_version : numéro de la version louée
- etat : l’etat de la commande de location (ex : en cours, en attente, terminée)
- duree : la durée de la location
Table PRIX_BO :
- num_bo : le numéro de la BOF
- lib_support_bo : le support de la BOF
- prix : le prix de la BOF
Table PRIX_LOC_SUPPORT_FILM :
- lib_support_film : le support du film
- duree_loc : la durée de location
- prix : le prix de la location
Table PRIX_VERSION :
- num_version : le numéro de la version
- lib_support_film : le support du film
- prix : le prix de la version
Table TELECHARGE_CHANSON :
- date : la date du téléchargement
- num_client : le numéro du client qui a téléchargé la chanson
- id_chanson : l’id de la chanson téléchargée
Table TELECHARGE_BA :
- date : la date du téléchargement
- num_client : le numéro du client qui a téléchargé la chanson
- num_ba : le numéro de la bande annonce téléchargée
Table ACTEUR_FILM :
- num_acteur : le numéro de l’acteur
- num_film : le numéro du film
- rang : le rang de l’acteur dans le film (plus le rang est petit, plus son rôle est important)
Table PRODUCTEUR_FILM :
- num_producteur : le numéro du producteur
- num_film : le numéro du film
Table REALISATEUR_FILM :
- num_réalisateur : le numéro du réalisateur
- num_film : le numéro du film
Table CRITIQUE_FILM :
- date : la date de rédaction de la critique
- num_client : le numéro du client qui laisse la critique ( = 0 si c’est un visiteur)
- num_film : le numéro du film concerné par la critique
- critique : la critique du film
- note : la note attribuée par le client
Table CRITIQUE_BO :
- date : la date de rédaction de la critique
- num_client : le numéro du client qui laisse la critique (= 0 si c’est un visiteur)
- num_bo : le numéro de la BOF concernée par la critique
- critique : la critique de la BOF
- note : la note attribuée par le client
Remarque :
La
base de données a été conçu de manière à ce que l’ajout (ou la mise a jour et
la suppression) d’éléments important ne remettent pas en cause toute la base. Par
exemple, imaginons qu’un nouveau support de film apparaisse ; on
l’appellera le XVZF4. L’ajout de film sur ce nouveau format est très
simple : il suffit d’ajouter un nouveau support de film dans la table
support_film, puis d’indiquer quels sont les films qui sont sur ce format en utilisant
la table prix_version
De manière analogue à la partie précédente, dans notre programmation en php, nous
avons fait en sorte que l’ajout de nouveaux éléments (donc parfois de nouvelles pages) soit simplifié au maximum.
3.1. Les modèles HTML (Templates)
Nous avons donc, dans un premier temps, créer en HTML les modèles des différentes
pages du site. Cela nous a permis de pouvoir toujours garder une trace visuel de « l’allure » du site, et ce même si la base de données est vide, de travailler exclusivement sur le design des pages du site et de réutiliser des modèles existant pour créer d’autre modèles.
Toutes les données, résultat de requêtes SQL, à afficher, ont été placées dans des tableaux – qui ont la capacité de s’agrandir automatiquement en fonction des informations qu’ils contiennent – ce qui nous a permis de tester différentes « configuration » d’une même page (selon qu’elle contienne peu, beaucoup ou pas de données à afficher) et de créer toutes les pages du site en gardant comme objectif que le nombre d’information à afficher ne devait pas altérer la lisibilité et l’ergonomie des pages.
Une fois les modèles définis, nous avons crées les pages php en remplacant les
données écrites « en dur » dans les modèles, par les variables php appropriées.
v Les cadres
Les différentes pages du site sont toutes dessinées de la même façon. C'est-à-dire
qu’elles possèdent toutes :
- un cadre horizontal supérieur qui contient le nom du site
- un cadre vertical gauche qui contient le menu et la fonction de recherche
- un cadre vertical droit qui contient la gestion de l’inscription
- le cadre principal qui contient la page courante
Ces différentes parties d’une page sont en fait générées et affichées par des fonctions php, ce qui permet au site d’avoir une grande modularité et une grande facilité de mise à jour.
v Les boutons de menu « auto générés »
Une autre caractéristique du site est la génération automatique des boutons de certains menus, grâce à l’utilisation de la bibliothèque GD de php. En effet, il est par exemple possible dans le site, de rechercher un film en fonction de son genre (action, comédie, science-fiction, etc.), en cliquant sur le bouton correspondant. Or si le webmaster ajoute un nouveau genre de film, un nouveau bouton sera automatiquement créé. Il portera le nom du nouveau genre créé, et le fait de cliquer sur ce bouton, affichera tous les films de ce nouveau genre.
v Les Sessions
Pour pouvoir acheter ou louer un film, un internaute doit d’abord s’inscrire sur le site.
Pour pouvoir conserver de manière simple le login de l’internaute tout au long de sa visite le site, nous avons utilisé le système des sessions. Les sessions permettent de passer en paramètre « masqué », le login de l’internaute à toutes les pages qui en ont besoin.
Le javascript a souvent été utilisé lors de la réalisation de formulaires, car
ce langage
permet de modifier et de lire les valeurs des différents champs d’une page, après qu’elle ait été chargée dans le navigateur Web, ce que ne permet pas le php.
Le javascript a été principalement utilisé afin de vérifier que les différents champs d’un formulaire étaient convenablement remplis, ou encore pour effectuer des redirections (retour à la page précédente avec ou sans timer). Mais également afin de bloquer l’accès à certains champs ou encore stocker des variables dans la page afin d’accéder à ces valeurs après le chargement de la page, pour exemple la page ‘acheterLouerFilmForm.php’.
Dans cette page on peut choisir entre différents supports de films et différentes langues pour chaque. Le javascript a permis ici de bloquer le choix de la langue et de la quantité pour les supports non sélectionnés. Ainsi quand on choisit un support, les autres voient leurs champs devenir inaccessibles. De plus, le prix unitaire étant fonction de la langue, il faut pour chaque langue de chaque support, connaître son prix et le mettre à jour dans la page lors de la sélection d’un langue ou d’une autre. Le problème est que la page ne peut pas, une fois chargé dans le navigateur, accéder aux prix en fonction de la langue et du support. Il a donc fallu stocker ces valeurs dans la page elle-même. Pour cela nous avons créé une variable javascript ‘tableau à 2 dimensions’ que l’on remplit grâce au php.
DROP
DATABASE IF EXISTS lurois;
CREATE
DATABASE lurois;
use lurois;
DROP TABLE
IF EXISTS Login;
CREATE
TABLE Login
(
login VARCHAR(20) NOT NULL, password
VARCHAR(32) NOT NULL,
PRIMARY KEY (login)
);
DROP TABLE
IF EXISTS Client;
CREATE
TABLE Client
(
num_client INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT, nom VARCHAR(50), prenom VARCHAR(50), adresse VARCHAR(50), email
VARCHAR(50),
num_cb INTEGER(15) UNSIGNED, num_rib
INTEGER(15) UNSIGNED, date_expiration DATE, date_inscription DATE NOT NULL,
PRIMARY KEY (num_client),
login VARCHAR(20) NOT NULL REFERENCES
Login(login)
);
DROP TABLE
IF EXISTS Dimension;
CREATE
TABLE Dimension
(
lib_dimension VARCHAR(20) NOT NULL,
PRIMARY KEY (lib_dimension)
);
DROP TABLE
IF EXISTS Genre;
CREATE
TABLE Genre
(
lib_genre VARCHAR(20) NOT NULL,
PRIMARY KEY (lib_genre)
);
DROP TABLE
IF EXISTS Public;
CREATE
TABLE Public
(
type_public VARCHAR(20) NOT NULL,
PRIMARY KEY (type_public)
);
DROP TABLE
IF EXISTS Realisateur;
CREATE
TABLE Realisateur
(
num_realisateur INTEGER UNSIGNED NOT NULL ,
nom VARCHAR(50) NOT NULL, prenom VARCHAR(50), biographie BLOB, filmographie
BLOB,
PRIMARY KEY (num_realisateur)
);
DROP TABLE
IF EXISTS Film;
CREATE
TABLE Film
(
num_film INTEGER UNSIGNED NOT NULL , titre
VARCHAR(50) NOT NULL, description BLOB, annee YEAR NOT NULL,
duree TIME NOT NULL, note TINYINT(1) UNSIGNED
NOT NULL DEFAULT 2, site_officiel VARCHAR(50), url VARCHAR(50) NOT NULL,
PRIMARY KEY (num_film),
lib_genre VARCHAR(20) NOT NULL REFERENCES
Genre(lib_genre),
type_public VARCHAR(20) NOT NULL REFERENCES
Public(type_public)
);
DROP TABLE
IF EXISTS Langue;
CREATE
TABLE Langue
(
lib_langue VARCHAR(20) NOT NULL,
PRIMARY KEY (lib_langue)
);
DROP TABLE
IF EXISTS Support_Film;
CREATE
TABLE Support_Film
(
lib_support_film VARCHAR(20) NOT NULL,
PRIMARY KEY (lib_support_film)
);
DROP TABLE
IF EXISTS Acteur;
CREATE
TABLE Acteur
(
num_acteur INTEGER UNSIGNED NOT NULL , nom
VARCHAR(50) NOT NULL, prenom VARCHAR(50), biographie BLOB, filmographie BLOB,
PRIMARY KEY (num_acteur)
);
DROP TABLE
IF EXISTS Producteur;
CREATE
TABLE Producteur
(
num_producteur INTEGER UNSIGNED NOT NULL , nom
VARCHAR(50) NOT NULL, prenom VARCHAR(50), biographie BLOB, filmographie BLOB,
PRIMARY KEY (num_producteur)
);
DROP TABLE
IF EXISTS Versions;
CREATE
TABLE Versions
(
num_version INTEGER UNSIGNED NOT NULL,
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film),
lib_langue VARCHAR(20) NOT NULL REFERENCES
Langue(lib_langue),
PRIMARY KEY (num_version)
);
DROP TABLE
IF EXISTS Achat;
CREATE
TABLE Achat
(
num_achat INTEGER UNSIGNED NOT NULL , date
DATE NOT NULL, etat VARCHAR(20) NOT NULL, cout_total FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (num_achat),
num_client INTEGER UNSIGNED NOT NULL REFERENCES
Client(num_client)
);
DROP TABLE
IF EXISTS Location;
CREATE
TABLE Location
(
num_location INTEGER UNSIGNED NOT NULL , date
DATE NOT NULL,
PRIMARY KEY (num_location),
num_client INTEGER UNSIGNED NOT NULL
REFERENCES Client(num_client)
);
DROP TABLE
IF EXISTS Prix_Location;
CREATE
TABLE Prix_Location
(
duree_location INTEGER UNSIGNED NOT NULL, prix
FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (duree_location, prix)
);
DROP TABLE
IF EXISTS Affiche;
CREATE
TABLE Affiche
(
num_affiche INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
lib_dimension VARCHAR(20) NOT NULL REFERENCES
Dimension(lib_dimension),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film),
prix FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (num_affiche)
);
DROP TABLE
IF EXISTS Bande_Annonce;
CREATE
TABLE Bande_Annonce
(
num_ba INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
nom_ba VARCHAR(50) NOT NULL, taille INTEGER
UNSIGNED NOT NULL,
PRIMARY KEY (num_ba),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film)
);
DROP TABLE
IF EXISTS Bande_Originale;
CREATE
TABLE Bande_Originale
(
num_bo INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT,
titre_bo VARCHAR(50) NOT NULL,
PRIMARY KEY (num_bo),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film)
);
DROP TABLE
IF EXISTS Support_Bo;
CREATE
TABLE Support_Bo
(
lib_support_bo VARCHAR(20) NOT NULL,
PRIMARY KEY (lib_support_bo)
);
DROP TABLE
IF EXISTS Chanson;
CREATE
TABLE Chanson
(
id_chanson INTEGER UNSIGNED NOT NULL ,
num_chanson INTEGER UNSIGNED NOT NULL, titre VARCHAR(50) NOT NULL,
PRIMARY KEY (id_chanson),
num_bo INTEGER UNSIGNED NOT NULL REFERENCES
Bande_Originale(num_bo)
);
DROP TABLE
IF EXISTS Achat_Bo;
CREATE
TABLE Achat_Bo
(
num_achat INTEGER UNSIGNED NOT NULL REFERENCES
Achat(num_achat),
num_bo INTEGER UNSIGNED NOT NULL REFERENCES
Bande_Originale(num_bo),
lib_support_bo VARCHAR(20) NOT NULL REFERENCES
Support_Bo(lib_suport_bo),
quantite INTEGER UNSIGNED NOT NULL,
prix FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (num_achat, num_bo,
lib_support_bo)
);
DROP TABLE
IF EXISTS Achat_Affiche;
CREATE
TABLE Achat_Affiche
(
num_achat INTEGER UNSIGNED NOT NULL REFERENCES
Achat(num_achat),
num_affiche INTEGER UNSIGNED NOT NULL
REFERENCES Affiche(num_affiche),
quantite INTEGER UNSIGNED NOT NULL,
prix FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (num_achat, num_affiche)
);
DROP TABLE
IF EXISTS Achat_Film;
CREATE
TABLE Achat_Film
(
num_achat INTEGER UNSIGNED NOT NULL REFERENCES
Achat(num_achat),
num_version INTEGER UNSIGNED NOT NULL
REFERENCES Versions(num_version),
lib_support_film VARCHAR(20) NOT NULL
REFERENCES Support_Film(lib_support_film),
quantite INTEGER UNSIGNED NOT NULL,
prix FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (num_achat, num_version)
);
DROP TABLE
IF EXISTS Location_Version;
CREATE
TABLE Location_Version
(
num_location INTEGER UNSIGNED NOT NULL
REFERENCES Location(num_location),
num_version INTEGER UNSIGNED NOT NULL
REFERENCES Versions(num_version),
etat VARCHAR(20) NOT NULL,
duree INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (num_location, num_version)
);
DROP TABLE
IF EXISTS Prix_Bo;
CREATE
TABLE Prix_Bo
(
num_bo INTEGER UNSIGNED NOT NULL REFERENCES
Bande_Originale(num_bo),
lib_support_bo VARCHAR(20) NOT NULL REFERENCES
Support_Bo(lib_support_bo),
prix FLOAT UNSIGNED NOT NULL,
PRIMARY KEY (num_bo, lib_support_bo)
);
DROP TABLE
IF EXISTS Prix_Loc_Support_Film;
CREATE
TABLE Prix_Loc_Support_Film
(
duree_location INTEGER UNSIGNED NOT NULL
REFERENCES Prix_Location(duree_location),
prix FLOAT UNSIGNED NOT NULL REFERENCES
Prix_Location(prix),
lib_support_film VARCHAR(20) NOT NULL
REFERENCES Support_Film(lib_support_film),
PRIMARY KEY (duree_location, prix,
lib_support_film)
);
DROP TABLE
IF EXISTS Telecharge_Chanson;
CREATE
TABLE Telecharge_Chanson
(
date DATETIME NOT NULL,
num_client INTEGER UNSIGNED NOT NULL REFERENCES
Client(num_client),
id_chanson INTEGER UNSIGNED NOT NULL
REFERENCES Chanson(id_chanson),
PRIMARY KEY (date, num_client, id_chanson)
);
DROP TABLE
IF EXISTS Telecharge_Ba;
CREATE
TABLE Telecharge_Ba
(
date DATETIME NOT NULL,
num_client INTEGER UNSIGNED NOT NULL
REFERENCES Client(num_client),
num_ba INTEGER UNSIGNED NOT NULL REFERENCES
Bande_Annonce(num_ba),
PRIMARY KEY (date, num_client, num_ba)
);
DROP TABLE
IF EXISTS Prix_Version;
CREATE
TABLE Prix_Version
(
num_version INTEGER UNSIGNED NOT NULL
REFERENCES Versions(num_version),
lib_support_film VARCHAR(20) NOT NULL
REFERENCES Support_Film(lib_support_film),
prix FLOAT UNSIGNED NOT NULL
);
DROP TABLE
IF EXISTS Realisateur_Film;
CREATE
TABLE Realisateur_Film
(
num_realisateur INTEGER UNSIGNED NOT NULL
REFERENCES Realisateur(num_realisateur),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film),
PRIMARY KEY (num_realisateur, num_film)
);
DROP TABLE
IF EXISTS Acteur_Film;
CREATE
TABLE Acteur_Film
(
num_acteur INTEGER UNSIGNED NOT NULL
REFERENCES Acteur(num_acteur),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film),
rang INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (num_acteur, num_film)
);
DROP TABLE
IF EXISTS Producteur_Film;
CREATE
TABLE Producteur_Film
(
num_producteur INTEGER UNSIGNED NOT NULL
REFERENCES Producteur(num_producteur),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film),
PRIMARY KEY (num_producteur, num_film)
);
DROP TABLE
IF EXISTS Critique_Film;
CREATE
TABLE Critique_Film
(
date DATETIME NOT NULL, critique BLOB NOT
NULL, note TINYINT(1) UNSIGNED NOT NULL DEFAULT 2,
num_client INTEGER UNSIGNED NOT NULL
REFERENCES Client(num_client),
num_film INTEGER UNSIGNED NOT NULL REFERENCES
Film(num_film),
PRIMARY KEY (date, num_client, num_film)
);
DROP TABLE
IF EXISTS Critique_Bo;
CREATE
TABLE Critique_Bo
(
date DATETIME NOT NULL, critique BLOB NOT
NULL, note TINYINT(1) UNSIGNED NOT NULL DEFAULT 2,
num_client INTEGER UNSIGNED NOT NULL
REFERENCES Client(num_client),
num_bo INTEGER UNSIGNED NOT NULL REFERENCES
Bande_Originale(num_bo),
PRIMARY KEY (date, num_client, num_bo)
);