Vous êtes sur la page 1sur 15

Les instructions du DDL

Mots cls : CREATE TABLE, ALTER TABLE, Contrainte d'intgrits, CONSTRAINT, PRIMARY KEY,
FOREIGN KEY, REFERENCES, UNIQUE, CHECK, NULL

Etablir le schma entits relations attributs (ERA)


A partir de l'interview d'Alfred le grant d'un magasin de location de films proposer le schma ERA :
c'est--dire la dfinition des tables, des colonnes, des types de donnes pour ces colonnes et des
diffrentes contraintes d'intgrits

Interview d'Alfred le responsable de la boutique.

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:

- la dure de location (en jours),


- le type du film : nouveaut ou non,
- le prix de location la journe fix au niveau de chaque film.

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 :

Client : regroupe toutes les informations relatives au client


Film : regroupe toutes les informations relatives un film
Artiste : regroupe les acteurs et les ralisateurs
Exemplaire : regroupe toutes les informations dun exemplaire de film mis en location
FicheLocation : regroupe toutes les informations communes un ou plusieurs emprunts
raliss simultanment par un client
DtailLocation : regroupe les informations spcifiques chaque exemplaire emprunt
Catgorie : permet de regrouper les films de faon logique

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

Crer la base de donnes


Les entits identifies, il va tre possible de crer les tables dans SQL Server. Cependant, il nest pas
question de dfinir ces tables dans une base quelconque. Il est donc ncessaire, dans un premier
temps, de dfinir la base de donnes Video. Pour dfinir cette base, il est prfrable dutiliser les
caractristiques suivantes :

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.

Le schma va tre dfini avec le script suivant :

use Video;
go
CREATE SCHEMA Magasin;

Crer les tables


Lors de cette tape de cration de table, aucune contrainte dintgrit nest spcifie lexception
de la gestion des valeurs NULL (autorises ou interdites). En procdant de cette faon, il ny a pas
dordre privilgi pour dfinir les tables. Les contraintes dintgrits seront dfinies dans une
seconde tape.

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)
);

Dfinir les contraintes dintgrits


Maintenant que les tables sont cres, il est possible de dfinir les contraintes dintgrits. Pour
raliser cette opration dans de bonne condition, il est ncessaire de dfinir lensemble des
contraintes de cl primaire (PK) dans un premier temps, puis les contraintes de cl tagre(FK). Les
contraintes dunicit (UN) et de validation (CK) sont cres en dernier.

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.

Table Colonne Nom de la contrainte


Clients id pk_clients
Fiches numero pk_fiches
Details numero pk_details
fiche
Exemplaires numero pk_exemplaires
Films numero pk_films
Acteurs artiste pk_acteurs
film
Artistes id pk_artistes
Categories code pk_categories
Producteurs id pk_producteurs

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);

Contraintes de cls trangres


Le tableau suivant prsente les diffrentes contraintes de rfrences qui existent dans le schma
tudi.

Colonnes de la cl trangre Colonnes rfrences Nom de contrainte


Films.categorie Categories.code fk_films_categories
Films.realisateur Artistes.numero fk_films_realisateur
Films.producteur Producteurs.numero fk_films_producteurs
Films.spectateur Spectateurs.numero fk_films_spectateurs
Acteurs.artiste Artistes.numero fk_acteurs_artistes
Acteurs.film Films.numero fk_acteurs_films
Magasin.Exemplaires.film Films.numero fk_exemplaires_films
Magasin.Details.exemplaire Magasin.Exemplaires.numero fk_details_exemplaires
Magasin.Details.fiche Magasin.Fiches.numero fk_details_fiches
Magasin.Fiches.client Magasin.Clients.numero fk_fiches_clients
Le script suivant permet de dfinir les diffrentes contraintes de rfrences dont les caractristiques
sont exposes ci-dessus.

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.

Table Description Nom de la contrainte


Films disponibleLocation={0,1} ck_films_disponibleLocation
Films prixLocationJour>=0 ck_films_prixLocationJour
Films anneeProduction>=1900 ck_films_anneeProduction
Fiches montantPaye contient null ou bien une valeur >=0 ck_fiches_montantPaye
Remarque : Certaines rgles ne peuvent pas tre dfinies sous forme de contrainte de validation. Un
dclencheur de base de donnes sera donc dfini ultrieurement.

Le script suivant permet dajouter ces diffrentes contraintes :

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));

Modifier la structure en ajoutant des colonnes


La structure actuelle pose des soucis en ce qui concerne le retour des exemplaires emprunts. En
effet la dure de location correspond elle une dure effective de location ou bien prvisionnelle ?

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.

Le script suivant permet de raliser cette modification

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.

Le script suivant permet de raliser ces modifications

ALTER TABLE Magasin.Exemplaires


ADD qualite char(2);
ALTER TABLE Magasin.Exemplaires
ADD constraint ck_exemplaires_qualite
CHECK (qualite IN ('EX','TB','B','M','F','ME'));
ALTER TABLE Magasin.Exemplaires
ADD dateAchat datetime;

Poser des index


Les index vont permettre daccder plus rapidement aux diffrentes informations. Cependant la mise
jour des index reprsente un cot non ngligeable pour le moteur de base de donnes. Il convient
donc de dfinir des index sur les colonnes frquemment impliques dans des restrictions et des tris.
Dans un premier temps il est prfrable de travailler a minima. Ainsi seuls les colonnes participant
aux contraintes de cls trangres seront indexs.

La description des diffrents index dfinir est donne dans le tableau suivant :

Nom de lindex Table Colonne


ix _films_categories Films categorie
ix _films_realisateurs Films realisateur
ix _films_producteurs Films producteur
ix _films_spectateurs Films spectateur

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.

Le script suivant permet de raliser la cration des diffrents index :

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);

Etablir le diagramme de base de donnes


Maintenant que la structure de la base est stable, il est souhaitable davoir un aperu visuel des
tables, colonnes, types de donnes, contraintes de cls primaires et trangres. Ce type de
reprsentation permet davoir une vue densemble de larchitecture des donnes. Lors de la
conception de requtes il est ncessaire davoir un tel schma pour avoir quel sont les tables
inclure dans la requte et quels sont les jointures effectuer.

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.

La dfinition des synonymes est effectue avec le script suivant :

USE Video;
go
CREATE SYNONYM Magasin.Membres FOR Magasin.Clients;
CREATE SYNONYM Realisateur FOR Artistes;

http://www.apsql.com 15