Professional Documents
Culture Documents
Mots cls : CREATE TABLE, ALTER TABLE, Contrainte d'intgrits, CONSTRAINT, PRIMARY KEY,
FOREIGN KEY, REFERENCES, UNIQUE, CHECK, NULL
Nos clients sont de plus en plus exigeant, cependant ils oublient galement frquemment de nous
rendre les DVD qu'ils ont lous, la date indique lors de leur location. Bien qu'il s'agisse d'un club
dans lequel nos clients sont de confiance, nous souhaitons mieux suivre nos locations et l'ensemble
des lments mis disposition de nos membres.
Lorsque les clients empruntent un ou plusieurs films, ils s'engagent sur une dure de location. Mme
si certains dpassent cette date limite, la trs grande majorit d'entre eux la respecte. Ainsi lorsqu'un
film n'est pas disponible la location, il nous est possible d'indiquer la date de retour prvue, ceci
afin d'viter que les gens reviennent inutilement au magasin.
Pour chaque client, il nous est ncessaire de connatre son nom, prnom, son adresse et un numro
de tlphone. Nous utilisons ces informations en cas de non retour d'un ou plusieurs DVD 2 jours
aprs la date prvue pour contacter le client et l'inviter rende son exemplaire au plus vite. Ce dlai
est rduit 24 h dans le cas d'une nouveaut.
Un client ne peut pas emprunter plus de 5 films la fois avec au maximum 2 nouveauts. Toutefois,
moyennant une majoration, le client peut exceptionnellement emprunter 3 nouveauts. Cette
autorisation n'est accorde qu'une fois par mois au maximum.
Pour nous, une nouveaut est un film qui est disponible la location depuis moins de 3 mois. Pass
ce dlai, le film perd son statut de nouveaut. Un mme film peut tre disponible en plusieurs
exemplaires. C'est gnralement le cas pour les nouveauts, puis au fur et mesure que le nombre
d'emprunts pour ce titre diminue, nous rduisons le nombre d'exemplaire disponibles la location.
Chaque exemplaire, est parfaitement identifi par son numro d'inventaire. Il dispose galement
d'une place spcifique en magasin. Cette place est repre par son numro de trave, et son numro
d'tagre. Il est possible de disposer plusieurs films diffrents sur une mme tagre. En gnral
nous essayons de regrouper ensemble tous les exemplaires d'un mme film. Cet emplacement
physique peut varier au cours du temps car les nouveauts sont mises en avant et ne sont pas class
selon la catgorie du film.
Les catgories permettent de classer de faon grossire les films, c'est par exemple: horreur,
aventure, comdie, western, enfant, documentaire, .
http://www.apsql.com 1
Lorsqu'un client vient pour louer des films, nous commenons toujours par nous assurer qu'il a bien
rendu tous les films emprunt et qu'il est jour dans ses rglements. Nous crons alors une fiche sur
laquelle nous notons les rfrences du client, la rfrence de chaque exemplaire emprunt, son titre
et la date de retour prvue. Comme le montant de la location est li la dure d'emprunt, le client
paiera lorsqu'il aura rendu tous les exemplaires emprunts. Le paiement s'effectue toujours en une
seule fois.
Pour calculer le prix de location nous tenons compte des lments suivant:
Nos clients et nous mme souhaitons pour chaque film connatre le ralisateur et les principaux
acteurs afin de pouvoir raliser des recherches par rapport ces critres.
Pour chaque film prsent dans la boutique sous la forme de un ou plusieurs exemplaires nous
dressons la fiche du film sur laquelle sont prsent le dtail du film, comme son nom, sa nationalit,
son ralisateur, la liste des principaux acteurs, mais galement un rsum.
Un
e fois par mois, nous envoyons par mail, nos clients qui possde une adresse lectronique, la liste
de nos nouveauts.
http://www.apsql.com 2
Identifier les entits
A la lecture de linterview il est possible didentifier les entits suivantes :
http://www.apsql.com 3
Le schma ERA
Le schma suivant donne un aperu graphique du schma ERA
Categories Spectateurs
Artistes Producteurs
PK code PK numero
PK numero PK numero
libelle libelle
nom nom
prenom
Films
PK numero
titre
disponibleLocation
prixLocationJour
Acteurs FK1 categorie
FK2 realisateur
PK,FK1 artiste FK3 producteur
PK,FK2 film anneeProduction
nationalite
duree
FK4 spectateurs
resume
Exemplaires
PK numero
Fiches
Details
travee
PK numero
PK numero etagere
PK,FK1 fiche FK1 film
FK1 client
creeLe
montantPaye dureeLocation
FK2 exemplaire
Clients
PK numero
nom
prenom
adresse
codePostal
ville
telephone
mobile
email
http://www.apsql.com 4
Le dtail des entits
Clients
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire identity
nom nvarchar(50) obligatoire
prenom nvarchar(50) obligatoire
adresse nvarchar(100) obligatoire
codePostal char(5) obligatoire
ville nvarchar(50) obligatoire
telephone char(14)
mobile char(14)
email nvarchar(100)
Fiches
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire identity
client int obligatoire
cl trangre (Clients)
creele datetime Date du jour par dfaut
montantPaye money
Dtails
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire
fiche int cl primaire
cl trangre (Fiches)
dureeLocation int obligatoire
exemplaire int obligatoire
cl trangre (Exemplaires)
Exemplaires
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire identity
travee int obligatoire
etagere int obligatoire
film int obligatoire
cl trangre (Films)
http://www.apsql.com 5
Films
Attribut Type de Contraintes Commentaire
donnes
numero Int cl primaire identity
titre nvarchar(80) obligatoires
disponibleLocation Tinyint obligatoire
prixLocationJour Money obligatoire
categorie char(5) obligatoire
realisateur int obligatoire
cl trangre (Artistes)
producteur int obligatoire
cl trangre (Producteurs)
anneeProduction smallint obligatoire
nationalite char(5) obligatoire Valeur par dfaut : Fra
duree int obligatoire
spectateurs int obligatoire
cl trangre (Spectateurs)
resume nvarchar(max) obligatoire
Acteurs
Attribut Type de donnes Contraintes Commentaire
artiste int cl primaire
cl trangre (Artistes)
film int cl primaire
cl trangre (Films)
Artistes
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire identity
nom nvarchar(50) obligatoire
prenom nvarchar(50) obligatoire
Categories
Attribut Type de donnes Contraintes Commentaire
code char(5) cl primaire
libelle nvarchar(50) obligatoire
Producteurs
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire identity
nom nvarchar(50) obligatoire
Spectateurs
Attribut Type de donnes Contraintes Commentaire
numero int cl primaire identity
libelle nvarchar(50) obligatoire
http://www.apsql.com 6
Crer un nouveau projet
De nombreux scripts Transact SQL vont tre dfinis, aussi est il prfrable de les regrouper dans un
projet au sein de SQL Server Management Studio. Le projet portera le nom de Video et sera plac
dans une nouvelle solution
Fichier de donnes
Nom Video_Data
Nom physique C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Video_Data.mdf
Taille initiale 10 Mo
Croissance 10%
Taille maximale 50 Mo
Fichier journal
Nom Video_Log
Nom physique C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Video_Log.ldf
Taille initiale 5 Mo
Croissance 10%
Taille maximale Illimit
Le script suivant permet de crer une telle base :
use master;
go
CREATE DATABASE Video
ON PRIMARY (
NAME = N'Video_Data',
FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\DATA\Video_Data.mdf' ,
SIZE = 10MB ,
MAXSIZE = 50MB ,
FILEGROWTH = 10%)
LOG ON (
NAME = N'Video_log',
FILENAME = N'C:\Program Files\Microsoft SQL
Server\MSSQL.1\MSSQL\DATA\Video_log.ldf' ,
SIZE = 5MB ,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10%);
go
http://www.apsql.com 7
Dfinir un schma
Afin de gagner en clart certaines tables devront tre dfinies dans le schma Magasin tandis que les
autres seront dfinies dans le schma dbo.
use Video;
go
CREATE SCHEMA Magasin;
Les tables Clients, Fiches, Details et Exemplaires vont tre dfinies dans le schma Magasin. Les
autres tables seront dfinies sur le schma dbo.
use Video;
go
CREATE TABLE Spectateurs(
numero int identity not null,
libelle nvarchar(50) not null);
CREATE TABLE Producteurs(
numero int identity not null,
nom nvarchar(50) not null);
CREATE TABLE Categories(
code char(5) not null,
libelle nvarchar(50) not null);
CREATE TABLE Artistes(
numero int identity not null,
nom nvarchar(50) not null,
prenom nvarchar(50) not null);
CREATE TABLE Acteurs(
artiste int not null,
film int not null);
CREATE TABLE Films(
numero int identity not null,
titre nvarchar(80) not null,
disponibleLocation tinyint not null,
prixLocationJour money not null,
categorie char(5) not null,
realisateur int not null,
producteur int not null,
anneeProduction smallint not null,
nationalite char(5) not null default('Fra'),
duree int not null,
spectateur int,
resume nvarchar(max)
);
CREATE TABLE Magasin.Exemplaires(
numero int identity not null,
travee int not null,
etagere int not null,
film int not null
http://www.apsql.com 8
);
CREATE TABLE Magasin.Details(
numero int not null,
fiche int not null,
dureeLocation int not null,
exemplaire int not null);
CREATE TABLE Magasin.Fiches(
numero int identity not null,
client int not null,
creele datetime default getdate(),
montantPaye money);
CREATE TABLE Magasin.Clients(
numero int identity not null,
nom nvarchar(50) not null,
prenom nvarchar(50) not null,
adresse nvarchar(100) not null,
codePostal char(5) not null,
ville nvarchar(50) not null,
telephone char(14),
mobile char(14),
email nvarchar(100)
);
Contraintes de cl primaire
Chaque table possde une cl primaire. Cette cl peut tre compose dune ou plusieurs colonnes.
SQL Server utilise la structure dindex unique pour mettre en place cette contrainte. Laccs aux
donnes partir de la cl primaire est ainsi plus rapide. Par dfaut cest un index organis
(CLUSTERED) qui est dfini. Les donnes sont donc physiquement organises par rapport la cl
primaire.
Le tableau ci-dessous permet didentifier pour chaque table les colonnes qui participent la cl
primaire ainsi que le nom de cette contrainte.
http://www.apsql.com 9
Genres code pk_genres
Les cls primaires sont mises en place avec le script suivant :
USE Video;
go
ALTER TABLE Magasin.Clients
ADD CONSTRAINT pk_clients PRIMARY KEY(numero);
ALTER TABLE Magasin.Fiches
ADD CONSTRAINT pk_fiches PRIMARY KEY (numero);
ALTER TABLE Magasin.Details
ADD CONSTRAINT pk_details PRIMARY KEY (numero, fiche);
ALTER TABLE Magasin.Exemplaires
ADD CONSTRAINT pk_exemplaires PRIMARY KEY (numero);
ALTER TABLE Films
ADD CONSTRAINT pk_films PRIMARY KEY (numero);
ALTER TABLE Acteurs
ADD CONSTRAINT pk_acteurs PRIMARY KEY (artiste, film);
ALTER TABLE Artistes
ADD CONSTRAINT pk_artistes PRIMARY KEY (numero);
ALTER TABLE Categories
ADD CONSTRAINT pk_categories PRIMARY KEY (code);
ALTER TABLE Producteurs
ADD CONSTRAINT pk_producteurs PRIMARY KEY (numero);
ALTER TABLE Spectateurs
ADD CONSTRAINT pk_spectateurs PRIMARY KEY(numero);
use Video;
go
ALTER TABLE Films
ADD CONSTRAINT fk_films_categories
FOREIGN KEY(categorie) REFERENCES Categories(code);
ALTER TABLE Films
ADD CONSTRAINT fk_films_realisateur
FOREIGN KEY(realisateur) REFERENCES Artistes(numero);
ALTER TABLE Films
ADD CONSTRAINT fk_films_producteurs
FOREIGN KEY(producteur) REFERENCES Producteurs(numero);
ALTER TABLE Films
http://www.apsql.com 10
ADD CONSTRAINT fk_films_spectateurs
FOREIGN KEY(spectateur) REFERENCES Spectateurs(numero);
ALTER TABLE Acteurs
ADD CONSTRAINT fk_acteurs_artistes
FOREIGN KEY(artiste) REFERENCES Artistes(numero);
ALTER TABLE Acteurs
ADD CONSTRAINT fk_acteurs_films
FOREIGN KEY(film) REFERENCES Films(numero);
ALTER TABLE Magasin.Exemplaires
ADD CONSTRAINT fk_exemplaires_films
FOREIGN KEY(film) REFERENCES Films(numero);
ALTER TABLE Magasin.Details
ADD CONSTRAINT fk_details_exemplaires
FOREIGN KEY(exemplaire) REFERENCES Magasin.Exemplaires(numero);
ALTER TABLE Magasin.Details
ADD CONSTRAINT fk_details_fiches
FOREIGN KEY(fiche) REFERENCES Magasin.Fiches(numero);
ALTER TABLE Magasin.Fiches
ADD CONSTRAINT fk_fiches_clients
FOREIGN KEY(client) REFERENCES Magasin.Clients(numero);
Contraintes de validation
Les contraintes de validations (CHECK) vont permettre de dfinir un certain nombre de rgles simples
de gestion des donnes. Il est important de dfinir ces rgles au plus proche des donnes. En
travaillant ainsi, il nest pas possible doutrepasser ces rgles et donc les donnes sont toujours
cohrentes. Le tableau ci-dessous prsente les diffrentes contraintes de validation dfinir.
USE Video;
go
ALTER TABLE Films
ADD CONSTRAINT ck_films_disponibleLocation
CHECK (disponibleLocation IN (0,1));
ALTER TABLE Films
ADD CONSTRAINT ck_films_prixLocationJour
CHECK (prixLocationJour>=0);
ALTER TABLE Films
ADD CONSTRAINT ck_films_anneeProduction
CHECK (anneeProduction>=1900);
ALTER TABLE Magasin.Fiches
ADD CONSTRAINT ck_fiches_montantPaye
CHECK ((montantPaye is null) OR (montantPaye>=0));
http://www.apsql.com 11
Et comment est-il possible didentifier les gens qui rendent leur location systmatiquement en
retard ? Pour pouvoir rpondre lensemble de ces contraintes, il est ncessaire de modifier la
structure actuelle de la table Details en supprimant la colonne dureeLocation et en ajoutant les
colonnes retourPrevueLe et retourEffectifLe. Ces deux colonnes sont de type datetime.
USE Video;
go
-- Ajouter les colonnes
ALTER TABLE Magasin.Details
ADD retourPrevuLe datetime;
ALTER TABLE Magasin.Details
ADD retourEffectifLe datetime;
-- Supprimer une colonne
ALTER TABLE Magasin.Details
DROP COLUMN dureeLocation;
Autre point prendre en compte : la qualit des exemplaires mis disposition. Bien que le supports
numriques offrent une meilleure qualit dimage, le support manipul par de nombreuses
personnes nest pas toujours irrprochable au niveau de la qualit. La qualit de chaque exemplaire
doit donc tre conserve. Une colonne qualit de type char(2) est donc ajoute la table des
exemplaires. Les valeurs autorises pour cette colonne sont : EX(excellent), TB(trs bon), B(bon),
M(moyen), F(faible), ME(mdiocre). Le niveau de qualit observ est relativiser par rapport la
date dachat dun exemplaire. Il est donc ncessaire dajouter une seconde colonne nomme
dateAchat et de type datetime, afin de stocker la date dacquisition de lexemplaire.
La description des diffrents index dfinir est donne dans le tableau suivant :
http://www.apsql.com 12
ix _acteurs_artistes Acteurs artiste
ix _acteurs_films Acteurs film
ix _exemplaires_films Magasin.Exemplaires film
ix _details_exemplaires Magasin.Details exemplaire
.ix _details_fiches Magasin.Details fiche
ix _fiches_clients Magasin.Fiches client
Remarque : Les index sont toujours associs la table qui possde la ou les colonnes indexes. Il est
donc normal que les index ne soient pas dfinis sur un schma.
use Video;
go
CREATE INDEX ix_films_categories
ON Films(categorie);
CREATE INDEX ix_films_realisateurs
ON Films(realisateur);
CREATE INDEX ix_films_producteurs
ON Films(producteur);
CREATE INDEX ix_films_spectateurs
ON Films (spectateur);
CREATE INDEX ix_acteurs_artistes
ON Acteurs(artiste);
CREATE INDEX ix_acteurs_films
ON Acteurs(film);
CREATE INDEX ix_exemplaires_films
ON Magasin.Exemplaires(film);
CREATE INDEX ix_details_exemplaires
ON Magasin.Details(exemplaire);
CREATE INDEX ix_details_fiches
ON Magasin.Details(fiche);
CREATE INDEX ix_fiches_clients
ON Magasin.Fiches(client);
Le schma est dfini depuis SQL Server Management Studio partir du nud Schma de base de
donnes dans lexplorateur de base de donnes.
http://www.apsql.com 13
Aprs avoir accept le message signalant lactivation des lments ncessaire ltablissement du
schma, il est possible de slectionner les tables.
Aprs avoir slectionnes toutes les tables elles sont ajoutes au schma. Ce schma est enregistr
sous le nom Le schma de la base de Vido.
Remarque : Si les informations prsentes sur le schma ne vous conviennent pas, il est possible de
modifier la vue de chaque table partir du menu contextuel associ la table sur le schma.
http://www.apsql.com 14
Dfinir des synonymes
Lors dun change avec Alfred, le responsable, il apparat que la notion de clients dans la base le
drange et quil prfre celle de membre afin de dvelopper laspect Club.
La mise en place de la structure est dj bien avance et il nest pas question de tout modifier pour
un simple problme de vocabulaire. De plus des dveloppements ont peut tre dj commencs
avec la table des Clients. Aussi pour donner satisfaction au client en adoptant son vocabulaire, il est
possible de dfinir un synonyme afin de donner un second nom la table des clients.
Le synonyme Realisateurs est galement dfini pour la table des Artistes. Ainsi les requtes seront
plus faciles crire et comprendre car les rles de ralisateurs et dacteurs sont clairement
identifis.
USE Video;
go
CREATE SYNONYM Magasin.Membres FOR Magasin.Clients;
CREATE SYNONYM Realisateur FOR Artistes;
http://www.apsql.com 15