Vous êtes sur la page 1sur 42

Norme interne

de modlisation
et dveloppement
Base de Donnes
par Frdric Brouard, alias SQLpro
MVP SQL Server
Expert langage SQL, SGBDR, modlisation de donnes
Auteur de :
SQLpro http://sqlpro.developpez.com/
"SQL", coll. Synthex, avec C. Soutou, Pearson
Education 2005
"SQL" coll. Dveloppement, Campus Press 2001
Enseignant aux Arts & Mtiers et l'ISEN Toulon

Une norme de dveloppement est un outil indispensable


pour l'efficacit des quipes de dveloppement. Elle pour
but d'uniformiser la communication entre les diffrents
intervenants susceptibles de travailler un projet
informatique utilisant une base de donnes relationelle.
Cet article dcrit une norme interne d'entreprise dont
l'tendue va du modle conceptuel l'criture du code
"base de donnes" en passant par la sructuration des
tables et des vues.
Copyright et droits d'auteurs : la Loi du 11 mars 1957 n'autorisant aux termes des alinas 2 et 3 de
l'article 41, d'une part que des copies ou reproductions strictement rserves l'usage priv et non [...]
une utilisation collective, et d'autre part que les analyses et courtes citations dans un but d'illustration,
toute reproduction intgrale ou partielle faite sans le consentement de l'auteur [...] est illicite.
Le prsent article tant la proprit intellectuelle de Frdric Brouard, prire de contacter l'auteur
pour toute demande d'utilisation, autre que prvu par la Loi SQLpro@SQLspot.com

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Prambule
La prsente norme interne sapplique pour la modlisation des donnes, comme pour le
dveloppement des objets de la base de donnes, ainsi que lcriture des requtes et
appel de procdures stockes depuis les applications clientes.

Le but de cette standardisation est :


dune part, de fournir un cadre commun afin que tous les acteurs de la
modlisation et du dveloppement parlent le mme langage ,
mais aussi, par la simple conception des noms dobjets, introduire des mthodes
de gestion et de manipulation globales et gnriques afin de faciliter
ladministration comme le dveloppement et donc conomiser terme du temps
et de largent.

Plus que les programmes, les rfrences daccs aux donnes (nom des objets en
particulier) se doivent dtre fortement normalises :
la portabilit dun SGBDR lautre en est facilit ;
laccs aux donnes peut se faire par diffrentes technologies (client lourd, client
lger, serveur dapplications) en diffrents langages (VB, C++, Delphi, C#,
ASP, PHP), depuis diffrentes plateformes (Windows, Linux) et par diffrents
outils tiers, dont certains nacceptent pas l peu prs du respect des standards.

En bref, la norme ne doit pas tre vcue comme une contrainte, mais comme une aide.
De fait, pour tre applique, elle se doit dtre comprise !

http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

0 Principes gnraux
0.1 - Trigramme
Un trigramme est un code de trois lettres unique au sein de son univers. Par exemple un
trigramme didentification dune table doit tre unique au sein de lensemble des tables
et vues constituant la base de donnes.
En principe le trigramme sera form par la premire lettre suivi des consonnes les plus
sonnantes de lexpression nominale, ou des initiales des mots la composant si
lexpression en comporte plusieurs, ou enfin dun trigramme conventionnel lorsque ce
dernier est sans ambigut.
Exemples :
FCT factures
LCD lignes de commande
URL uniform resource locator
CLI clients
REF rfrences

intrt

le trigramme sert fournir un tag permettant lidentification rapide


de lobjet.

0.2 - Rgle gnrale de formation des noms dans les modles


Les noms des objets des modles (entits, associations, tables, vues, colonnes,
procdures stockes) devront rpondre des caractristiques suivantes :
commencer par une lettre non diacritique (pas daccent, cdille, etc) ;
tre compos exclusivement de lettres non diacritique (A Z) et de chiffres (0
9) ainsi que du blanc soulign (underscore), soit 37 symboles ;
tre crit en majuscule;
tre limit 128 caractres ;
tre parfaitement comprhensible, notamment en nutilisant des abrviations que
lorsquelles sont comprhensibles mme par un non initi.

intrt

respect des normes internationales, portabilit. Cette rgle mane de


la norme ISO/CEI 9075 (toutes rvisions depuis 1986) pour la
formation des noms dans le langage SQL
La casse en majuscule des requtes SQL et des procdures permet
de distinguer dans le listing des programmes, le code excut sur le
serveur (en MAJUSCULE) et celui excut sur le client (en
minuscule) au premier coup dil.

http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

1 Modlisation des donnes


Il sera fait appel un outil de modlisation de donnes dont les caractristiques sont les
suivantes :
Modlisation conceptuelle des donnes par schma entit relation : conception
du modle conceptuel de donnes (MCD) ;
Capacit utiliser le concept de DOMAIN SQL ;
Capacit raliser des sous modles de faon dcouper fonctionnellement
lapplication (schmas SQL) ;
Gnration dun modle physique de donnes daprs le MCD et ce pour
diffrents SGBDR (Oracle, MS SQL Server, IBM DB2, PostGreSQL, MySQL),
avec gestion des schmas ;
Rtro ingnierie (de la base au MPD, du MPD au MCD) ;
Notation des modles suivants mthodes MERISE, IDEF1X (UML), E/R ;
Modlisation des hritages, y compris en exclusion mutuelle, avec gnration
des triggers de validation dintgrit rfrentielle ascendante et descendante ;
Gnration des scripts SQL de la base de donnes ;
Gnration des scripts SQL dvolution de la base de donnes (delta) ;
dition de la documentation technique.
Loutil prconis est Power Designer (ex AMC*Designor) de PowerSoft (Sybase).
Toute modlisation de donnes devra tre ralise exclusivement laide de loutil.

intrt

raccourcir drastiquement le cycle de modlisation et amliorer trs


sensiblement la qualit. Permettre la mise niveau des diffrentes
volutions de la base de donnes de manire automatique et
transparente.

1.1 Architecte de donnes


Une seule personne dans lentreprise aura la responsabilit de la conception du modle
de donnes pour une base spcifique. Ses comptences ne pourront tre transfres
quen cas dindisponibilit. Le but tant de garder la cohrence du modle.

1.2 Fichiers des modles


Tout fichier gnr par lapplicatif sera archiv et stock en lieu sur de mme que
lhistorique des modifications du modle (modle archiv) et les scripts diffrentiels.
Le nom dun fichier peut indiffremment tre crit en majuscule ou en minuscule, voire
une combinaison des deux.

http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

1.2.1 Nom des fichiers du MCD


Le nom dun fichier de MCD sera constitu :
Dun trigramme indiquant le nom de la base (trigramme unique dans le SI de
l'entreprise).
Dune extension spcifique lditeur (en gnral .mcd)
Exemple :
EPS.mcd

1.2.2 Nom des fichiers du MPD


Le nom dun fichier de MPD sera constitu :
Dun trigramme indiquant le nom de la base (trigramme unique dans le SI de
l'entreprise).
Un caractre blanc soulign (underscore)
Dun trigramme indiquant le nom du SGBDR
Dun code numrique sur 4 positions indiquant la version du SGBDR
Dune extension spcifique lditeur (en gnral .mpd)
Les trigrammes didentification de SGBDR seront choisit parmi :
ORA
SQS
MYS
DB2
PGS
ASA
ASE

Oracle corp., Oracle


Microsoft SQL Server
MySQL AB, MySQL
IBM DB2
PostGreSQL
Sybase, Adaptive Server Anywhere (Ex Watcom SQL)
Sybase, Adaptive Server Entreprise (Ex Sybase SQL Server)

Exemples :
EPS_sqs0007.mpd
EPS_SQS2000.mpd
Pour le modle physique de la base de trigramme EPS respectivement pour Microsoft
SQL Server 7 et 2000.

1.2.3 Nom des archives de MPD


Le nom dun modle physique archiv sera constitu :
Dun trigramme indiquant le nom de la base (trigramme unique dans le SI de
l'entreprise).
Un caractre blanc soulign (underscore)
Dun trigramme indiquant le nom du SGBDR
Dun code numrique sur 4 positions indiquant la version du SGBDR
Un caractre blanc soulign (underscore)

http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

La date de cration de larchive au format ISO court


Dune extension spcifique lditeur (par exemple .mpa)

Exemples :
EPS_SQS2000_20051121.mpa
Pour le modle physique archiv de la base de trigramme EPS, pour Microsoft SQL
Server 2000 pour larchive du 21 novembre 2005.

1.2.4 Nom des scripts de cration de la base de donnes


Le nom dun script SQL de cration de la base de donnes sera constitu :
Dun trigramme indiquant le nom de la base (trigramme unique dans le SI de
l'entreprise).
Un caractre blanc soulign (underscore)
Dun trigramme indiquant le nom du SGBDR
Dun code numrique sur 4 positions indiquant la version du SGBDR
De lextension .SQL.
Exemples :
eps_sqs2000.SQL
Pour le script SQL de cration de la base de donnes de trigramme EPS, pour Microsoft
SQL Server 2000.

1.2.5 Nom des scripts diffrentiels


Le nom des scripts de modification dune base de donnes gnrs par calcul de
diffrence entre le dernier modle physique archiv et le modle physique actuel, sera
constitu par :

Un trigramme indiquant le nom de la base (trigramme unique dans le SI de


l'entreprise).
Un caractre blanc soulign (underscore)
Dun trigramme indiquant le nom du SGBDR
Dun code numrique sur 4 positions indiquant la version du SGBDR
Un caractre blanc soulign (underscore)
La date de cration du script au format ISO court
De lextension .SQL.

Exemples :
EPS_SQS2000_20051121.sql
Pour le script de mise niveau de la base de donnes calcul daprs le diffrentiel
entre le modle physique archiv du 21 novembre 2005 et le modle physique actuel
pour la base de trigramme EPS, pour Microsoft SQL Server 2000.

http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

1.3 Modle conceptuel


Dans la mesure du possible il sera fait appel la notion de sous modles afin de ne pas
encombrer un seul modle avec une quantit dobjet illisible. La notion de sous modle
devra correspondre un dcoupage fonctionnel dont llment primtrique est le
schma SQL.
Rappelons quun schma SQL est un sous ensemble dun CATALOG SQL (un
CATALOG SQL = une base de donnes) et permet de grer la scurit daccs aux
donnes de manire globale et gnrique.
Les objets du modle (entit, attributs, relation) seront tous annots (descriptions
fonctionnelles).

1.3.1 Auto documentation de la base


Dans chaque modle il sera cr diffrentes entits de nature documenter la base de
donnes.
Lentit de nom T_S_DATABASE_INFO_DBI contiendra les attributs suivants :
Colonne
DBI_LIBELLE
DBI_TYPE

Type
Longueur Oblig. Validit
alphanumrique 128
oui
Clef
alphanumrique 12
oui
'alpha', 'entier', 'rel', 'boolen',
'date', 'heure', 'dateheure'
DBI_VALEUR alphanumrique 256
oui
(le nom de cette entit est prfix T_S_ pour table systme , voir 1.3.4 pour plus de
dtail)
Cette entit sera transforme en une table lors de la gnration du modle physique et
devra contenir au minimum les informations suivantes :
DBI_LIBELLE
DBI_TYPE
Nom
alpha
Date cration
date
SGBDR
alpha
MCD
alpha
MPD
alpha
Script SQL
alpha
Dernier script SQL diff. alpha
Version base
alpha
Langue
alpha

DBI_VALEUR
mabase
20051125
MS SQL Server 2000
EPS.mcd
EPS_SQS2000.mpd
EPS_SQS2000.sql
EPS_SQS2000_20051121.sql
1.7
Franais

Les dates tant saisies au format ISO court (AAAAMMJJ) et les chiffres sans espaces avec
le point comme sparateur dcimal.
Linformation Version tant reprise du n de version du modle de la base.
http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

A chaque application dune modification de la base, cette table sera mise jour,
notamment pour ce qui concerne le script diffrentiel comme pour linformation de
version.

intrt

Le but tant dauto documenter les versions des diffrentes bases de


donnes en exploitation chez les clients.

Lentit de nom T_S_DATABASE_OBJECT_DBO contiendra les attributs suivants :


Colonne
DBO_NOM
DBO_TYPE

Type
Longueur Oblig. Validit
alphanumrique 128
oui
Clef
alphanumrique 16
oui
'table', 'vue', 'colonne',
'procdure', 'fonction'
DBO_LONGUEUR
entier
non
DBO_LIB_COURT
alphanumrique 32
non
DBO_LIB_LONG
alphanumrique 256
non
DBO_DESCRIPTION alphanumrique 2048
non
Lentit de nom T_S_DATABASE_LANGUAGE_DBL contiendra les attributs suivants :
Colonne
Type
Longueur Oblig. Validit
DBL_LANGUE alphanumrique 32
oui
Clef
Une association de nom T_J_DATABASE_TRANSLATION_DBT contiendra les attributs
suivants :
Colonne
DBT_LIB_COURT
DBT_LIB_LONG
DBT_DESCRIPTION

Type
alphanumrique
alphanumrique
alphanumrique

Longueur Oblig. Validit


32
oui
256
oui
2048

et
sera
lie
aux
entits
T_S_DATABASE_OBJECT_DBO
et
T_S_DATABASE_LANGUAGE_DBL afin dassurer la traduction de tous les libells
dobjets de la base dans les langues de fonctionnement de lapplication.

intrt

Le but tant de permettre une auto traduction dans les diffrentes


langues dans lesquelles lapplication devra tre utilise.

Lentit de nom T_S_DATABASE_ADMIN_DBA contiendra les attributs suivants :


Colonne
DBA_ID
DBA_DATEHEURE

Type
autoincrment
horodatage

DBA_NOM

alphanumrique 32

http://sqlpro.developpez.com

Longueur Oblig. Validit


par
dfaut
dateheure
courante
nom, prnom utilisateur
8

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

DBA_NATURE
alphanumrique 256
DBA_COMMANDE alphanumrique 7750
Le but tant de tracer toute action de maintenance entreprise sur le serveur.

1.3.2 Domaines
Il sera fait appel systmatiquement la notion de domaine SQL. Rappelons quun
DOMAIN est un type SQL pourvu dune ventuelle valeur par dfaut, dventuelles
rgles de validation et dune ventuelle collation si le type est alphanumrique.

intrt

uniformiser et standardiser les structures de donnes en vu de


globaliser leurs traitements. Par exemple tout attribut bas sur un
nom de personne (nom de client, nom dutilisateur) sera form
partir du domaine D_NOM qui pourra tre un alphanumrique de
longueur 32. En cas de modification des spcifications, la nouvelle
dfinition du domaine D_NOM bnficiera lensemble des
attributs qui repose dessus.

Le nom dun domaine sera compos en majuscule comme suit :


la lettre D
un blanc soulign (underscore)
une lettre parmi : N pour numrique (entier, rel, dcimal), A pour
alphanumrique, T pour temporel (date, heure, horodatage), B pour binaire.
un blanc soulign (underscore)
une expression significative
Exemples :
D_N_POURCENT

pourcentage numrique avec contrle de validit born


entre 0.0 et 100.0
ligne dadresse de 38 caractres (norme La Poste)
adresse IP de 15 caractres constitu par masque
nnn.nnn.nnn.nnn

D_A_ADRESSE
D_A_ADRIP

Les domaines suivants sont crs de manire systmatique :


D_N_ID
D_B_GUID
D_A_REF_CODE
D_A_REF_LIB
D_N_RANG
D_B_REF_BASE
D_N_MOIS
D_N_JR_MOIS
D_N_JR_SMN
D_N_JR_AN
D_N_SMN
D_N_TRM
D_N_SMR
D_T_DATE
D_T_HEURE

entier auto incrment (32 ou 64 bits suivant OS)


GUID (identifiant gnrique universel)
code (unique) dans une entit rfrence (alpha fixe,
taille 8)
libelle dans une entit de rfrence (alpha variable,
taille 64)
entier (unique) dordonnancement dans une entit
boolen dans une entit rfrence indiquant si la ligne
est modifiable par dfaut non/0
entier court de 1 12 (numration des mois)
entier court de 1 32 (numration des jours du mois)
entier court de 1 7 (numration des jours de semaine)
entier court de 1 365 (numration des jours de lanne)
entier court de 1 532 (numration des semaines ISO)
entier court de 1 4 (numration des trimestres)
entier court de 1 2 (numration des semestres)
date
heure

http://sqlpro.developpez.com

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"


D_T_HORODATA
D_N_N
D_N_R_POS
D_N_D_POS
D_N_PRIX
D_N_S_POS
D_N_T_POS
D_N_POURCENT
D_N_Z

intrt

2007-11-25

SQL spot

horodatage
entier 32 bits positif (> 0) (ensemble N des entiers
naturels)
rel positif (>= 0)
dcimal positif (>= 0)
dcimal 16 chiffres, 2 dcimales positif (>= 0)
entier 16 bits positif (>= 0)
entier 8 bits positif (>= 0)
rel positif [0.0 ... 100.0]
entier 32 bits positif (>= 0) (ensemble Z des entiers zro
inclus)

lutilisation de domaines, et en particulier de ceux dots de


contraintes de validit, minimise lespace mmoire du fait que le
cache de procdure, et donc le code des contraintes, est partag

1.3.2 - Types dentits


Les diffrents types dentit sont les suivantes :
entit gnrale (entit).
Exemple : les clients
entit de rfrence.
Exemple : sexe.
entit de rfrence externe.
Exemple : code postal
entit hrite.
Exemple : voiture hrite de vhicule
entit systme.
Exemple : utilisateurs de lapplication
entit gnrique.
Exemple : nombres

intrt

Srialiser la gestion des entits et donc des tables qui seront


gnres daprs ces entits, de manire permettre des traitements
densemble.

1.3.4 Noms des entits


Un nom dentit est compos comme suit :
la lettre T ;
un blanc soulign (underscore) ;
une lettre parmi :
o E pour entit,
o R pour rfrence,
o S pour systme,
o X pour rfrence externe,
o H pour hrite,
o G pour gnrique,
o A pour administrative,
o H pour historique ;
http://sqlpro.developpez.com

10

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

un blanc soulign (underscore) ;


un nom explicite jamais pluralis, comprenant ventuellement des blancs
souligns ;
un blanc soulign (underscore) ;
le trigramme de lentit.

Exemples :
T_E_CLIENT_CLI
T_R_SEXE_SEX
T_X_CODE_POSTAL_CPL
T_H_VOITURE_VTR
T_S_UTILISATEUR_USR

entit
entit
entit
entit
entit

clients
de rfrence sexe
de rfrence externe code postal
hrite voiture
systme utilisateurs

1.3.5 Noms des associations


Un nom dassociation est compos comme suit :
la lettre t
un blanc soulign (underscore)
la lettre j (pour jointure)
un blanc soulign (underscore)
un verbe explicite jamais pluralis, comprenant ventuellement des blancs
souligns
un blanc soulign (underscore)
le trigramme de lassociation

nota

lensemble form par les trigrammes dentit et dassociation ne doit


pas introduire de doublons (unicit). Autrement dit, un mme
trigramme ne peut servir une entit et une association.

Exemples :
T_J_CONDUIT_CDT
T_J_HABITE_HBT

association conduit (par exemple entre client et


voiture)
association habite (par exemple entre utilisateur
et code postal)

1.3.6 Noms des attributs


Le nom dun attribut dune entit ou dune association doit tre compos en majuscule
comme suit :
le trigramme de lentit ou de lassociation ;
un blanc soulign ;
un nom ou une expression explicite, si besoin complt par une indication du
type ou de la nature des donnes.

nota

les identifiants de type compteurs seront nots ID. Les identifiants


de type identifiant unique (GUID) seront nots GUID.

http://sqlpro.developpez.com

11

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Exemples :
CLI_ID
CLI_NOM
CMD_CREATION_DATE
LCD_REMISE_POURCENT

attribut identifiant auto incrment de lentit


client
attribut nom de lentit client
attribut date de cration de lentit commande
attribut pourcentage de remise de lentit ligne de
commande

1.3.7 Forme des entits de rfrence


Les entits de rfrence seront toujours modlises de la mme manire :
rang
1
2
3
4
5

nom
xxx_ID
xxx_RANG
xxx_CODE
xxx_BASE
xxx_LIBELLE

domaine
D_N_ID
D_N_RANG
D_A_REF_CODE
D_B_REF_BASE
D_A_REF_LIB

type
entier
entier
alpha fixe 8
boolen
alpha variable 64

auto incrment, clef


>= 0
par dfaut non/0

ou xxx est en fait le trigramme de lentit.


Des attributs supplmentaires peuvent apparatre aprs lattribut situ en 5e position.

intrt

le but de cette uniformisation est de pouvoir oprer globalement sur


lensemble des rfrences constitu par lunion des entits
auxquelles on ajoute le trigramme afin de les distinguer. Par
exemple on implmentera ct client un tableau de lensemble des
valeurs de rfrence afin dviter des allers-retours inutiles entre
serveurs et clients.

Exemple :

1.3.8 Nom des liens


Les liens sont les lments de jonction entre entit et association. Ils se reprsentent
gnralement sous forme de traits dans les diffrentes notations du MCD.
Dans la mesure du possible, le nom dun lien sera prfix par la lettre L et reprendra les
trigrammes des entits auquel il est li.

http://sqlpro.developpez.com

12

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Exemple :

Dans le cas dune auto relation les liens seront suffixs FILS et PERE .
Exemple :

intrt

les relations seront traduites par loutil de modlisation parfois en


contraintes et parfois en index. Il est plus facile de savoir quoi faire
avec un message derreur explicite comme violation de la
contrainte L_DPT_RGN que violation de la contrainte
C945876468 .

1.3.9 Choix des types


Lun des gages de russite des bases de donnes relationnelles performantes repose sur
le choix judicieux des types de donnes. Par consquent on doit apporter le maximum
de soin tudier chaque attribut pour en dfinir le type en adquation avec sa longueur.
Voici quelques rgles respecter :
tudier les normes et les standards internationaux et respecter les formats
chaque fois que cela est possible ;
utiliser des formats de taille fixe pour les informations de petite tailles, souvent
sollicites en recherche ou frquemment mises jour ;
utiliser des formats de taille variable pour des informations de grande tailles, peu
sollicites en recherche ou rarement mises jour ;
utiliser le type le plus prcis possible et non un type fourre-tout
utiliser un type numrique exact pour les donnes comptable (afin dviter les
erreurs d aux carts des arrondis)
utiliser un type numrique approch pour les donnes physiques
viter dutiliser des BLOB lorsquil est possible de les externaliser, sauf si ces
BLOB doivent rellement tre exploites en manipulation de donnes

http://sqlpro.developpez.com

13

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Exemple :
ADR_LIGNE

alpha fixe 38 (standard La Poste pour les lignes


dadresse)
PRD_REF
alpha fixe 8 (une rfrence de produit est frquemment
recherche)
EMP_COMMENTAIRES alpha variable 4096
PRD_PRIX
numrique longeur 16, 2 dcimale (un prix est un lment
comptable)
PRD_QUANTITE
rel (une quantit comme du carburant la pompe, doit
pouvoir tre exprime par fraction de litres).

Attention : pour certaines donnes numrique une prcision de mesure doit tre
apporte. Soit la mesure est immuable et doit apparatre dans le nom de lattribut, soit la
mesure est variable et on doit ajouter un attribut qui complte la mesure.
Exemples :
TCH_DUREE_H_DECIMALE
PRD_QTE
PRD_QTE_UNITE

dure dune tche en heures dcimale


quantit
unit relative lattribut quantit

1.3.10 - Contraintes
Ne devront figurer dans les contraintes dattributs du modle que celles :
obligeant une spcification de valeur ;
obligeant lunicit ;
vrifiant une limite de valeurs (max, min, max + min).
Toute autre contrainte de validit telle que celles qui sont calcule ou encore
ncessitent lusage dun trigger seront dcrite en dehors du modle.

1.3.11 Identifiant
Par dfinition, lidentifiant dune entit est llment primordial de la qualit des
relations entre les diffrentes entits. Pour cela, il se doit dtre mrement rflchi et
notamment obir dans la mesure du possible aux caractristiques suivantes :
concision : lidentifiant doit tre le plus court possible (plus court est-il, plus
rapide seront les traitements)
stabilit : la valeur de lidentifiant ne doit jamais changer au cours de la vie de la
base de donnes (des changements de valeurs didentifiant sont de nature se
propager dans le systme dinformation et peuvent conduire des paradoxes
temporels).
dispersion : la plage de valeur de lidentifiant doit tre la plus large possible
(lidentifiant doit permettre la manipulation dentit dont la cardinalit peut tre
trs importante : plusieurs millions doccurrences).
indpendance : la valeur de lidentifiant ne doit avoir aucun sens smantique
dans le systme dinformation (un identifiant informatif suppose que lon
connaisse davance linformation ce qui nest pas toujours le cas. De plus
linformation doit pouvoir tre modifiable ce qui nest pas bon pour un
identifiant).

http://sqlpro.developpez.com

14

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Lidentifiant tant un mcanisme ncessaire llaboration des relations entre les


informations de la base, il convient quil ne soit pas dpendant des informations
modliser.
Chaque fois que cela est possible on optera pour un entier auto incrment dont la
longueur sera calque sur la longueur du mot du processeur dans lenvironnement de
lOS. Le type de donnes dun tel identifiant sera spcifi par un domaine de nom
D_N_ID (voir 1.3.2).

1.3.12 Associations multijointures


Lorsque lassociation comportera ne nombreux liens avec diffrentes entits, il sera
parfois judicieux de transformer cette association en nouvelle entit et remplacer les
liens en association de cardinalit 1.1 du ct de lentit ainsi nouvellement cre. On
vitera ainsi la transformation de lassociation en table pourvue dune clef composite
peu efficace.
Exemple (schma entit relation, notation Merise) :

Ce modle conceptuel va gnrer une clef compose de 4 colonnes lors de la


transformation de lassociation T_J_VOLE_VLE en table.

http://sqlpro.developpez.com

15

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Mieux vaut lui substituer le modle conceptuel smantiquement quivalent :

Notation Merise et IDEF1X (UML)

intrt

Une clef composite ncessite des efforts importants linsertion et


une structure de lindex sous jacent particulier. Les oprations
dinsertion et de maintenance dindex sont plus faciles lorsque la
clef est mono colonne, quitte ce que plusieurs index
complmentaires soient crs.

1.3.13 Entit gnriques


Il sera cr des entits gnriques destines tre utilises par de multiples tables. Ces
entits pourront ventuellement tre lies ou non pour leur utilisation.
Lentit nombre, de nom T_G_NUM (numrotation) : comportera les colonnes
NUM_NUM et NUM_ALEA. La premire colonne comportera les nombre de 0 n (n
tant une limite que lon se fixera). La seconde colonne tant un nombre alatoire
unique pris dans lintervalle 0, n.
Lentit planning, de nom T_G_PLN : comportera les colonnes :
Attribut
Domaine
PLN_DATE
D_T_DATE
PLN_JOUR_MOIS
D_N_JR_MOIS
PLN_MOIS
D_N_MOIS
PLN_AN
D_N_I_POS
PLN_JOUR_SEMAINE
D_N_JR_SMN
PLN_JOUR_ANNEE
D_N_JR_AN
PLN_SEMAINE_ISO
D_N_SMN
PLN_TRIMESTRE
D_N_TRM
PLN_SEMESTRE
D_N_SMR
PLN_NUM
D_N_Z
PLN_ALEA
D_N_R_POS

http://sqlpro.developpez.com

16

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

(Voir 1.3.2 pour la dfinition des domaines SQL sus mentionns)


Une fois transformes en tables ces entits seront alimentes en donnes afin dtre
directement exploitables.
PLN_NUM contient une squence de nombre de 0 n
PLN_ALEA est un nombre rel compris entre ]0 ... 1[ calcul de
manire alatoire.
Ces nombres permettent des requtes labores notamment pour le
comptage ou le classement alatoire

nota

intrt

Cette table permet lcriture lgante et simplifie de requtes


apparemment difficiles.

1.3.13 Modle conceptuel de rfrence


A partir du premier modle ayant t valid au niveau oprationnel, il sera cr un
nouveau modle conceptuel dit de rfrence , contenant notamment, les domaines,
les tables gnriques et les tables dauto documentation, afin de permettre la cration de
nouveaux modles conceptuels pour de nouvelles applications, partir de lexistant
constitu par ce modle de rfrence.

intrt

Acclrer le temps de modlisation dune nouvelle base en partant


dlments communs pr tablis un peu la manire des modles
de document de Word..

http://sqlpro.developpez.com

17

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

1.4 Modle physique


Il sera automatiquement produit par loutil de modlisation choisit.
1.4.1 Correction du modle
Les noms des objets (tables et colonnes) seront directement drivs du modle
conceptuel.
Aucune retouche ne sera apport au modle physique, lexception de :
la modification des noms dobjet en cas derreur dtect aprs gnration du
MPD (doublons) ou de la vrification pralable la gnration du script ;
la modification du positionnement des objets dans lespace graphique afin de le
rendre plus lisible.
Si loutil de modlisation nen a pas la capacit, le redcoupage en schma sera fait au
niveau physique, moins que loutil de conception permette de paramtrer les noms
des tables avec un prfixe point. Dans ce cas, il faut penser, lors de la conception,
nommer les objets entit et association avec le prfixe de schma.

1.4.2 volution du modle


Tant que la base de donnes ne sera pas en production (interne ou externe), ses
volutions se feront directement, sans conservation des modles prims.
A partir du moment o la base sera en production, chaque volution du modle fera
lobjet dune archive et il sera gnr un script diffrentiel de modification de la base,
comme un script de cration.
A chaque script, il sera ajout une commande SQL permettant de modifier dans la table
T_S_DATABASE_INFO_DBI les donnes suivantes :
nom du dernier script SQL ;
version de la base.

intrt

les scripts diffrentiels SQL permettent de faire voluer la base de


donnes alors quelle est dj en production. Diffrents clients
peuvent tre sur diffrentes versions et faire voluer leur application
a leur rythme. Le script complet permet tout moment dinstaller un
nouveau client avec la dernire version, sans devoir passer toutes
les mises jour conscutives.

1.4.3 Prfixe des objets de la base


Des rgles tablies au niveau du modle conceptuel dcoulent les prfixes T_ pour table
et D_ pour domaine.

http://sqlpro.developpez.com

18

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Touts les noms des objets de la base seront prfixs par une lettre suivie dun blanc
soulign. Les lettres de prfixes des objets de la base seront les suivants :
Lettre
S
T
V
P
F
D
C
U
R
E
X
K
G

intrt

Objet
Schma
Table
Vue
Procdure
Fonction
Domaine & type utilisateur
Contrainte
Utilisateur
Rle
trigger, dclencheur (vnement)
indeX
espace de stocKage (file group, table Space)
rGle

les prfixes permettent un repre immdiat de lobjet. La plupart des


objets dune base tant dcrit dans des tables systme fourre-tout
il est plus ais de comprendre la nature de lobjet par la structure de
son nom que de sobliger des requtes complexes pour la
retrouver.

1.4.4 - Interfaage des domaines aux SGBDR choisit


Dans le cas ou le SGBDR choisit ne comporte pas certains des domaines spcifiquement
dcrit, ces domaines seront complts pas des contraintes labores par tout moyen
propre au SGBDR.
Exemple : Le SGBDR MS SQL Server 2005 ne comporte pas les types SQL DATE et
TIME (heure). Pour le domaine D_T_DATE, on partira du type DATETIME (date +
heure) et on introduira une contrainte de mise zro de la partie horaire. Cela peut tre
fait comme suit :
-- ajout du type brut
sp_addtype 'D_T_DATE', DATETIME
-- ajout dune rgle de validation
CREATE RULE G_T_DATE
AS
FLOOR(CAST(@VALUE AS FLOAT)) = CAST(@VALUE AS FLOAT)
-- liaison de la rgle au type
sp_bindrule 'G_T_DATE', 'D_T_DATE'

De mme, le SGBDR SQL Server 2005, ne comportant pas le type SQL TIME (heure).
On pourra raliser ainsi le domaine D_T_HEURE, en manipulant des heures dcimales
et deux fonctions de conversion :
http://sqlpro.developpez.com

19

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

sp_addtype 'D_T_HEURE', FLOAT


CREATE RULE G_T_HEURE
AS
@VALUE BETWEEN 0.0 AND 23.99999944444444444444444444444444
sp_bindrule 'G_T_HEURE', 'D_T_HEURE'
-- fonction de conversion heure dcimale en string HH:MM:SS.nnn :
CREATE FUNCTION F_CONVERT_HD_HMS (@HD FLOAT)
RETURNS VARCHAR(12)
AS
BEGIN
DECLARE
DECLARE
DECLARE
DECLARE
DECLARE

@H INTEGER
@M INTEGER
@S INTEGER
@RETVAL VARCHAR(20)
@MS CHAR(3)

-- cas triviaux
IF @HD IS NULL RETURN NULL
IF @HD = 0
RETURN '00:00:00 000'
-- rcupration des heures, minutes, secondes, millime de seconde
SET @H = FLOOR(@HD)
SET @HD = @HD - @H
SET @HD = @HD * 60
SET @M = FLOOR(@HD)
SET @HD = @HD - @M
SET @HD = @HD * 60
SET @S = FLOOR(@HD)
SET @HD = @HD - @S
SET @HD = @HD * 1000
IF ROUND(@HD, 0) = 1000
BEGIN
SET @S = @S + 1
SET @MS = '000'
END
ELSE SET @MS = CAST(ROUND(@HD, 0) AS CHAR(3))
-- conversion
IF @H < 10 SET @RETVAL = '0' + CAST(@H AS CHAR(1))+ ':'
ELSE SET @RETVAL = CAST(@H AS VARCHAR(2))+':'
IF @M < 10 SET @RETVAL = @RETVAL + '0' + CAST(@M AS CHAR(1))+':'
ELSE
SET @RETVAL = @RETVAL + CAST(@M AS CHAR(2))+':'
IF @S < 10 SET @RETVAL = @RETVAL + '0' + CAST(@S AS CHAR(1))
ELSE
SET @RETVAL = @RETVAL + CAST(@S AS CHAR(2))
WHILE LEN(@MS) < 3
SET @MS = '0' + @MS
SET @RETVAL = @RETVAL + '.' + @MS
RETURN @RETVAL
END
GO
-- fonction de conversion dheure string HH:MM:SS.nnn en heure dcimale:
CREATE FUNCTION F_CONVERT_HMS_HD (@HMS VARCHAR(12))
RETURNS FLOAT
AS
BEGIN

http://sqlpro.developpez.com

20

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"


DECLARE
DECLARE
DECLARE
DECLARE

2007-11-25

SQL spot

@H FLOAT
@M FLOAT
@S FLOAT
@MS FLOAT

-- cas trivial
IF @HMS IS NULL
RETURN NULL
-- test du format
IF NOT @HMS LIKE '[0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]'
RETURN NULL
-- rcupration des donnes :
SET @H = CAST(SUBSTRING(@HMS, 1, 2) AS FLOAT)
SET @M = CAST(SUBSTRING(@HMS, 4, 2) AS FLOAT)
SET @S = CAST(SUBSTRING(@HMS, 7, 2) AS FLOAT)
SET @MS = CAST(SUBSTRING(@HMS, 10, 3) AS FLOAT)
RETURN @H + (@M / 60.0) + (@S / 3600.0) + (@MS / 3600000.0)
END
GO

Il faudra penser raliser ces mmes fonctions et ces mmes contraintes du ct du


client avec en sus les masques de saisie correspondant.

1.4.4 - Cartographie des objets sur les fichiers de la base


Les objets de la base seront crs sur diffrents espace de stockage (File Group pour MS
SQL Server, Table Space pour Oracle).
Pour cela sera tablie une rgle de base qui est la suivante :
les donnes des tables seront cres dans lespace de stockage par dfaut
(PRIMARY pour MS SQL Server)
les index non cluster seront crs sur un espace de stockage de nom K_INDEXES
Pour les trs grandes installations, il pourra tre fait appel un dcoupage plus dtaill.

intrt

La spcification demplacement des diffrents objets composant la


base permet de rpartir le volume des donnes (et donc la charge)
sur diffrent disques physique afin damliorer sensiblement les
temps de rponse sur les bases de donnes de grande taille.

1.4.5 Fichiers SQL de cration de la base


Les fichiers de cration de la base de donnes, doivent tre produits dans cet ordre :
0
1
2
3
4
5
6

utilisateurs, schmas, connexions


objets du modle
contraintes additionnelles et triggers
fonctions
procdures
primo insertion
Indexation

http://sqlpro.developpez.com

donnes des rfrences internes et externes

21

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

7
8

primo lancement
privilges

2007-11-25

SQL spot

procdures lancer pour initialiser la base

Cet ordre est lordre logique dexcution pour lenchanement des scripts lors de la
cration de la base de donnes.
Toute base de donnes cliente devra tre exclusivement cre par le biais de
lexcution de ces scripts, auquel il convient de faire prcder la cration de la base
elle-mme (CREATE DATABASE) et ses espaces de stockage.

nota

Limplantation dune base cliente par copier-coller


(sauvegarde/restauration par exemple) reproduit la structure des
donnes lidentique, y compris sa fragmentation, ses donnes
obsoltes et larchitecture des fichiers de la machine dorigine, grevant
ainsi ds le dpart les performances de la base.

Valeurs dans le rfrentiel :


(voir paragraphe 1.3.7)
Pour toutes les entres de donnes concernant les tables du rfrentiel, la forme sera la
suivante :
la clef est force (valeur fournie)
le code est en majuscule sans caractres diacritiques
le libell commence par une majuscule, tout le reste en minuscule
la colonne xxx_BASE vaudra 1 pour toute donne immuable
On entend par donnes immuable des donnes du rfrentiel explicitement utilises
dans les programmes et dont la valeur ne doit en aucun cas changer, sinon cela
compromettrait le comportement du logiciel. En quelques sortes, ces entres sont des
constantes, crites par facilit dans des tables.

Exemple :
SET IDENTITY_INSERT T_R_TITRE_TTR ON
INSERT INTO T_R_TITRE_TTR (TTR_ID, TTR_RANG, TTR_CODE,
VALUES
(1,
1,
'M.',
INSERT INTO T_R_TITRE_TTR (TTR_ID, TTR_RANG, TTR_CODE,
VALUES
(2,
2,
'Mme.',
INSERT INTO T_R_TITRE_TTR (TTR_ID, TTR_RANG, TTR_CODE,
VALUES
(3,
3,
'Mlle.',
INSERT INTO T_R_TITRE_TTR (TTR_ID, TTR_RANG, TTR_CODE,
VALUES
(4,
6,
'Me.',
INSERT INTO T_R_TITRE_TTR (TTR_ID, TTR_RANG, TTR_CODE,
VALUES
(5,
5,
'Mgr',
INSERT INTO T_R_TITRE_TTR (TTR_ID, TTR_RANG, TTR_CODE,
VALUES
(6,
4,
'MM.',
SET IDENTITY_INSERT T_R_TITRE_TTR OFF

intrt

TTR_BASE,
1,
TTR_BASE,
1,
TTR_BASE,
1,
TTR_BASE,
0,
TTR_BASE,
0,
TTR_BASE,
0,

TTR_LIBELLE)
'Monsieur')
TTR_LIBELLE)
'Madame')
TTR_LIBELLE)
'Mademoiselle')
TTR_LIBELLE)
'Matre')
TTR_LIBELLE)
'Monseigneur')
TTR_LIBELLE)
'Messieurs')

Lintrt de mettre en majuscule la premire lettre de lexpression


du libell est que cette fonction est difficile raliser par du code
SQL, alors que le tout majuscules comme le tout minuscules sopre
par les fonctions basiques UPPER() et LOWER().

http://sqlpro.developpez.com

22

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

2 Cration de la base
Cest en amont que se jouent les problmes les plus dlicats de performances. Ce qui
est fait au moment de la cration de la base de donnes ne peut tre modifi chaud et
sil faut y remdier, cela ncessite une migration complte dans le cadre dune
rinstallation du serveur.
Cest pourquoi la cration dune base de donnes, comme linstallation du serveur doit
tre parfaitement planifie dans son paramtrage.

2.1 Installation du serveur (MS SQL Serveur)


2.1.1 Disques et rpartition des donnes
Le SGBDR sera install dans la mesure du possible dune des faons suivantes :
Nb disques
5

Grappe
RAID 1

RAID 5
7

RAID 0

RAID 1

RAID 5
RAID 1

10

RAID 5
RAID 5
RAID 0
RAID 1

RAID 5
RAID 5

http://sqlpro.developpez.com

Contenu
OS
fichier dchange mmoire (pagefile.sys),
excutable SQL Server,
base tempDB,
fichier journaux des bases applicatives
fichier de donnes des bases applicatives
fichier des index non cluster des bases applicatives
base tempDB
fichier des index non cluster des bases applicatives
fichier dchange mmoire (pagefile.sys)
OS
excutable SQL Server,
fichier journaux des bases applicatives
fichier de donnes des bases applicatives
OS
fichier dchange mmoire (pagefile.sys),
excutable SQL Server,
base tempDB,
fichier journaux des bases applicatives
fichier de donnes des bases applicatives
fichier des index non cluster des bases applicatives
base tempDB
fichier dchange mmoire (pagefile.sys)
OS
excutable SQL Server,
fichier journaux des bases applicatives
fichier de donnes des bases applicatives
fichier des index non cluster des bases applicatives

23

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Dautres configurations plus spcifiques pourront tre dcides en fonction des


spcificits du client.

intrt

lorganisation en diffrentes grappes RAID pour but dassurer la


redondance de lcriture des informations dans le cadre de la
garantie de bon fonctionnement sur service SQL Server (rappelons
que Microsoft prconise les donnes en RAID 5 et les journaux en
RAID 1), ainsi que la parralllisation possible des ressources du
disque afin daugmenter les performances.

2.1.2 Collation
Dans la mesure du possible, on choisira une collation binaire dans la langue local en
sassurant que cest aussi la langue du serveur (une dsynchronisation entre le jeu de
caractres Windows et une collation localise est contre performante).
En particulier, dans le cas dune installation cliente en franais, on prendra une version
franaise de lOS Server et la collation French_BIN (SQL Server 2000) ou French_BIN2
(SQL Server 2005) comme collation dinstallation pour le serveur SQL.

intrt

le choix de la collation initiale de linstallation serveur participe de


beaucoup aux performances en matire de recherches et mise en
relation de donnes littrales.
Dautre part une collation forte oblige lcriture des requtes SQL
telle que les noms ont t forms ce qui vite ainsi des calculs
supplmentaires et minimise lutilisation du cache de procdure.

2.2 Emplacement de stockage des bases


Il sera cr au moins deux groupes de fichiers distincts pour le stockage des objets de la
base.
Le premier (celui par dfaut PRIMARY pour MS SQL Server) sera la destination des
objets logiques que sont : les tables, les vues, les types, etc et tous les objets
procduraux (procdures stockes, fonctions, triggers).
Le second, nomm expressment K_INDEXES contiendra tous les index non cluster.

intrt

la sparation des tables et des index en deux groupes de fichiers


distincts permet de placer ventuellement ces fichiers sur diffrentes
grappes RAID permettant ainsi de parallliser lectures et critures
afin daugmenter les performances.

http://sqlpro.developpez.com

24

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

2.3 Cration des espaces de stockage des donnes


Les diffrents espaces de stockage des donnes de diffrentes bases seront crs sur des
disques neufs ou formats immdiatement avant, en taille fixe avec une ventuelle
possibilit de croissance automatique dont le pas dincrment sera un multiple de 16
Mo (par exemple 16 Mo pour les petites bases, 64 Mo pour les moyennes bases et 256
Mo pour les grandes bases).
La taille de la base devant tre calcule laide de loutil de modlisation, par
lestimation prvisionnelle du nombre de lignes de chacune des tables dans le cadre
dune exploitation de 36 mois. Selon la capacit des grappes RAID du serveur, et
compte tenu dun coefficient de scurit qui doit se situer entre 1,3 et 2, il y aura peuttre intrt prendre 60% de la capacit du disque virtuel devant tre affect aux
donnes.
La taille de lespace de stockage des index, peut tre estime 50% de la taille estime
de la base.

intrt

la cration des fichiers de taille fixe pour la base de donnes


garantie quil ny aura pas de fragmentation physique (au niveau OS)
du fichier, car les SGBDR comme SQL Server, Oracle ou IBM DB2,
sont pourvu dun algorithme qui recherche sur le disque le meilleur
emplacement de granules contigus pour crer le fichier de manire
minimiser le dplacement des ttes lors des lectures et critures.
Lavantage de prvoir une taille maximale est de rserver
physiquement la place des donnes applicatives et dempcher ainsi
une pollution du disque (occupation des espaces de stockage par
des fichiers incongrus) qui risque de nuire aux performances, voire
dempcher lexpansion de la base de donnes (disque plein).

Les fichiers de journalisation seront constitus en fichiers taille variable, croissance


automatique (mme pas dincrment que ceux constituant la base) et fix au dpart
25% de la taille estime de la base.

intrt

un fichier de journalisation est en principe crit par ajout et trs


rarement parcouru en arrire (en gnral uniquement dans le cas de
ROLLBACK ou dans le cas de reprise aprs panne). Dans ce cas la
meilleure stratgie de croissance consiste favoriser le WRITE
AHEAD par une taille de fichier variable.

2.4 Gestion de lintgrit rfrentielle


Le mode CASCADE est proscrire (ON DELETE CASCADE, ON UPDATE CASCADE).
Prfrez dans lordre, les modes : NO ACTION / RESTRICT, SET NULL, SET DEFAULT.

http://sqlpro.developpez.com

25

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

3 criture du code des bases de donnes


Lensemble du code SQL (requtes, procdures, fonctions, trigger) crit laide du
langage Transact SQL devra tre spcifi en majuscule pour tout ce qui concerne les
noms des objets de la base (tables, vues, procdure, fonctions, variables) et dans la
casse de cration pour les appels aux objets du serveur (procdures systmes, fonctions
systmes, tables et vues systmes).
Toutes les indentations devront se faire exclusivement laide du caractre espace par
bloc de trois espaces. Lutilisation du caractre de tabulation est proscrire.
Dans les outils graphique dcriture de requtes (Analyseur de requtes, diteur Visual
Studio, fentre de codage Entreprise Manager, Word) on prendra soin dutiliser
toujours une police espacement fixe. La police prconise est Lucida Console.

intrt

Le caractre tabulation gnre des diffrences importantes de


prsentation suivant lenvironnement dans lequel il est vu
(Analyseur de requtes, diteur Visual Studio, fentre de codage
Entreprise Manager, bloc note, Word). De mme pour lutilisation
dune police espacement proportionnelle.
Or une prsentation homogne rend la lecture et la comparaison
plus aise

Dans la mesure du possible le style dcriture des programmes devra tre calqu sur le
modle relationnel objet, permettant la manipulation dobjet relationnel comme un
tout . Par exemple, linsertion ou la modification des informations relatives une
personne et ses diffrents mails, adresse, tlphones, etc devra tre ralis partir
dune seule procdure pouvant ventuellement en appeler dautres.

intrt

Minimisation des aller et retour rseau et de la dure des


transactions, dans le but de maximiser les performances.

3.1 criture des requtes SQL


3.1.1 Tag
Quil sagisse dune requte complte, paramtre ou dynamique, toute requte
encapsule dans du code rgulirement lanc devra tre identifi laide dun tag
compos dun GUID, comme suit :
/* BF6ED289-0E07-4BA7-8B6C-B0E3C1537930 */
plac immdiatement derrire le premier mot clef de la requte (CREATE, DROP,
ALTER, SELECT, INSERT, UPDATE, DELETE)
Exemple
UPDATE /* BF6ED289-0E07-4BA7-8B6C-B0E3C1537930 */ MA_TABLE

http://sqlpro.developpez.com

26

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

SET
MA_COLONNE1 = 'xyz '
WHERE
MA_COLONNE2 = 456

Ce GUID sera obtenu par un appel un gnrateur de GUID (par exemple SELECT
NEWID() dans MS SQL Server)

intrt

Le tag est le seul moyen de tracer des requtes dont la composition


change (paramtre, composition dynamique du code SQL), afin
dauditer les performances du SGBDR et den extraire les lments
optimiser en priorit.

3.1.2 Prsentation et rgles syntaxiques


Que la requte soit externe ou interne (imbrication dans le cadre de sous requtes par
exemple), les diffrentes clauses devront tre indentes comme suit :
le mot clef de la clause sur une ligne ;
le dtail de la clause sur n lignes ne dpassant pas en principe 80 caractres et
indent de 3 espaces (pas de tabulation).
Exemple
SELECT /* BF6ED289-0E07-4BA7-8B6C-B0E3C1537930 */
MA_COLONNE1, MON_AUTRE_COLONNE2, UNE_COLONNE3
FROM
MA_TABLE
ORDER BY
MA_COLONNE1

SELECT :

toutes les expressions de la clause SELECT seront nommes.


la clause ORDER BY doit faire rfrence aux noms exprims dans la clause
SELECT et non la position ordinale de lexpression.

Exemples :
A proscrire :

A utiliser

SELECT /* BF6ED289-0E07-4BA7-8B6C-B0E3C1537930 */
355 / 113, COLONNE_A
FROM
T_XYZ
ORDER BY
1
SELECT /* BF6ED289-0E07-4BA7-8B6C-B0E3C1537930 */
355 / 113 AS COL_CALC, COLONNE_A
FROM
T_XYZ
ORDER BY
COL_CALC

Lutilisation dalias (AS) non conforme aux spcifications des noms SQL est proscrit.
Lutilisation des syntaxes SQL non-conformes aux spcifications de la norme SQL2 de
1992 est proscrit (jointures normalises en particulier). Chaque fois quune syntaxe
normalise est disponible il y a lieu de lutiliser.

http://sqlpro.developpez.com

27

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

A proscrire :
MA_COLONNE = 123
MA_COLONNE = GETDATE()
CONVERT(CHAR(20), MA_COLONNE)
ISNULL(MA_COLONNE, 0)

intrt

2007-11-25

SQL spot

A utiliser
123 AS MA_COLONNE
MA_COLONNE = CURRENT_TIMESTAMP
CAST(MA_COLONNE, CHAR(20))
COALESCE(MA_COLONNE, 0)

Portabilit dun SGBDR lautre.

Cas des jointures :


les jointures devront toujours seffectuer laide de clause JOIN (norme SQL2,
1992) et non dans la clause WHERE.
des alias compos laide du trigramme seront systmatiquement utiliss pour
les spcifications de colonnes en relations
en cas de multijointure sur la mme table lalias (trigramme) sera suffix par un
chiffre incrment partir de 1 et introduit par un blanc soulign
la table racine sera crite sur une ligne (indent de 3 espaces)
chaque nouvelle table en dehors de la table racine sera introduite sur une
nouvelle ligne avec son type de jointure (JOIN) avec une indentation de 6
espaces
chaque clause de jointure (ON) sera introduite immdiatement, si possible ct
de la table quelle lie, sinon en dessous avec une indentation de 9 espaces
si la clause de jointure ne tient pas sur une seule ligne, elle sera crite sur
plusieurs lignes indentes de 12 espaces.
Exemples :
A proscrire :

A utiliser

intrt

FROM
T_ABC, T_DEF, T_GHI
WHERE
T_ABC.COL1 = T_DEF.COL2
AND T_ABC.COL4 *= T_GHI.COL7
FROM
T_ABC ABC
INNER JOIN T_DEF DEF
LEFT OUTER JOIN T_GHI GHI

ON ABC.COL1 = DEF.COL2
ON ABC.COL4 = GHI.COL7

La syntaxe de jointure dans la clause WHERE ne sera plus supporte


dans les versions futures des SGBDR.
Les clauses JOIN permettent un calcul du plan de requte plus
rapide.
La syntaxe normative permet plus facilement disoler tout ou partie
des lments dune jointure lorsque lon met au point la requte et
dviter les produits cartsiens intempestifs lorsque lon modifie la
clause WHERE lors de la mise au point de la requte.

Lorsque la clause SELECT de lordre SELECT, ou les filtres WHERE et HAVING font
apparatre de multiples colonnes venant de diffrentes tables (jointures) il y aura lieu de
regrouper les expressions par table, dans la mesure du possible et de les faire prcder
dune ligne de commentaire faisant rfrence la table.

http://sqlpro.developpez.com

28

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Exemples :
A proscrire :

SELECT UDC.epsDateCloture, EDP.epsUdP,


EDP.epsContreRemboursement, ADE.epsLibelle AS
NomExpediteur, ADE.epsCodePostal AS CodePostalExpediteur,
ADE.epsVille AS VilleExpediteur, cast(CLS.epsPoids as
decimal(20,2)) as epsPoids, CLS.epsNoColis,
CLS.epsRangColis, SPE_DGDIFF_UDP, DDF.CoursierMPL
FROM

A utiliser

...

WHERE CLS.epsId = 789


{idColis} AND UDC.epsDateCloture
BETWEEN DATEADD(month, 1, CURRENT_TIMESTAMP ) AND
CURRENT_TIMESTAMP AND ADE.epsVille IN ('Paris', 'Berlin',
'Toronto')
SELECT -- EXP_UDC
UDC.epsDateCloture,
-- EPS_UDP
EDP.epsUdP,
EDP.epsContreRemboursement,
-- TRP_ADRESSESEXPEDITION
ADE.epsLibelle AS NomExpediteur,
ADE.epsCodePostal AS CodePostalExpediteur,
ADE.epsVille AS VilleExpediteur,
-- EXP_UDC_COLIS
cast(CLS.epsPoids as decimal(20,2)) as epsPoids,
CLS.epsNoColis,
CLS.epsRangColis,
-- SPE_DGDIFF_UDP
DDF.CoursierMPL
FROM

...

WHERE

-- EXP_UDC_COLIS
CLS.epsId = 789

AND

AND

{idColis}

-- EXP_UDC
UDC.epsDateCloture
BETWEEN DATEDD(month, 1, CURRENT_TIMESTAMP )
AND CURRENT_TIMESTAMP
-- TRP_ADRESSESEXPEDITION
ADE.epsVille IN ('Paris', 'Berlin', 'Toronto')

INSERT :
La clause de spcification des colonnes cible devra tre explicite. Seules les colonnes
rellement renseignes ou spcifie NULL en cas de prsence dune valeur dfaut
devront y figurer. Lordre des colonnes doit tre celui de la position ordinale des
colonnes dans la table (ordre de cration des colonnes).
Autant que faire se peut, les rfrences des colonnes insrer seront mises en
correspondance avec leurs valeurs lune au dessus de lautre.
Exemple, soit la table dfinie comme suit :
CREATE TABLE T_CLIENT_CLI
(CLI_ID
INT
NOT NULL PRIMARY KEY,

http://sqlpro.developpez.com

29

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"


CLI_NOM
CLI_TITRE
CLI_PRENOM
CLI_SEXE

2007-11-25

SQL spot

CHAR(32)
NOT NULL,
VARCHAR(12)
DEFAULT 'Monsieur',
VARCHAR(25),
CHAR(1)
DEFAULT 'M'
CHECK (CLI_SEXE IN ('M', 'F'))

)
A proscrire :
A utiliser

INSERT INTO T_CLIENT_CLI CLI_ID, CLI_NOM, CLI_PRENOM,


CLI_TITRE, CLI_SEXE) VALUES (1, 'DUPONT', NULL, 'Monsieur',
DEFAULT)
INSERT INTO T_CLIENT_CLI
(CLI_ID, CLI_NOM)
VALUES (1,
'DUPONT')

DELETE :
Le mot FROM est requis dans la clause DELETE.
Exemples :
A proscrire :
A utiliser

intrt

DELETE
WHERE
DELETE
WHERE

T_CLIENT_CLI
CLI_NOM = 'Dupont'
FROM T_CLIENT_CLI
CLI_NOM = 'Dupont'

Portabilit des requtes dun SGBDR lautre et en cas de


modification de schma.

3.2 criture du code Transact SQL


En tte de chaque procdure, fonction, trigger ou vue, devra figurer un cartouche, aprs
le mot clef AS dont le modle est le suivant :
/******************************************************************************
Base
: MaBase
Schema
: dbo
Objet
: fonction
Auteur
: Frdric Brouard
Copyright
: MonEntreprise
Cre le
: 2006-01-29
Release
: C3
********************************** REVISIONS **********************************
Date
: 2005-01-17
Auteur
: Frdric Brouard
Tag
: #FBD050117#
Nature
: ajout de la fonction COALESCE pour la colonne EpsId dans la
requte SELECT
********************************* UTILISATION *********************************
Description : Permute les deux parties d'une chane de caractres autour
du caractres d'indice "pivot"
Paramtres : @data IN (alphanum) la chane traiter
@pivot IN (int) la position du caractre
OUT (alphanum) le rsultat du pivotement
Utilise
: <objets de la base utilis>
******************************************************************************/

Chaque rvision du code devra faire l'objet d'un tag identifiant la partie de code rvise.
L'ancien code sera conserv en commentaire.

http://sqlpro.developpez.com

30

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Exemple :
/* #FBD050117# dbut de modif, ancien code
SELECT Eps_ID
nouveau code */
SELECT COALESCE(Eps_ID,0)
-- fin de modif #FB050117#

Le tag de rvision est constitu d'un trigramme permettant d'identifier l'auteur et de la


date au format AAMMJJ. Il devra indiquer le dbut et la fin de la modification.
Les boucles et test seront crits sur une seule ligne lorsquils ne concernent quune
instruction.

3.2.1 criture des fonctions SQL (Transact SQL)

Le nom de toute fonction SQL sera prfixe F_.


Lorsque la fonction est une fonction table, elle sera dote dun prfixe
complmentaire T_.
Lorsque la fonction est un calcul dagrgat (SQL Server 2005) elle sera dote dun
prfixe complmentaire A_.
Par dfaut, les fonctions sont prsumes scalaires.
Exemples :
F_MAX_DATES (D1 DATETIME, D2 DATETIME)
F_T_SEMAINE (D DATETIME)
F_A_CONCAT_STRING (S NVARCHAR(max))

fonction scalaire
fonction table
fonction agrgat

Par principe une fonction ne doit jamais conduire une erreur dexcution. En
particulier en prsence de paramtres non renseigns (absence de valeur caractrise
par le marqueur NULL) on renverra immdiatement le marqueur NULL avant tout
droulement du code.
De mme, si pour une valeur ou plage de valeurs particulire, une fonction est
susceptible de gnrer une erreur, alors on testera pralablement ces conditions et en
cas de succs on retournera immdiatement une valeur de principe ou dfaut le
marqueur NULL.
Par exemple, si une fonction contient une division, on testera le diviseur pour savoir si
sa valeur est gale zro, et dans ce cas, on renverra le marqueur NULL en sortie.
Les variables utilises dans le corps dune fonction doivent tre dclares au plus prs
de leur utilisation et non en tte de code.
Exemple : soit la fonction F_FLIP qui intervertit les diffrentes parties dune expression
littrale que nous appellerons MOT partir de la lettre dindice PIVOT
F_FLIP (MOT, PIVOT)
F_FLIP('flap', 2)
F_FLIP('flep', 1)
F_FLIP('flip', 4)

http://sqlpro.developpez.com

rsultat
aplf
lepf
pfli

31

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

F_FLIP('flop', 0)
F_FLIP('flup', -3)
F_FLIP('flyp', 12)
F_FLIP('', 5)
F_FLIP(NULL, 2)

SQL spot

flop
flup
flyp
<NULL>

La fonction devra tre code comme suit :


CREATE FUNCTION F_FLIP (@MOT VARCHAR(8000), @PIVOT INTEGER)
RETURNS VARCHAR(8000)
AS
/*
===============================================================================
Fichier :
MaBase-PRIMARY
Copyright :
MonEntreprise
Auteur :
Frdric Brouard
Cre le :
2006-01-29
Description : Permute les deux parties d'une chane de caractres autour
du caractres d'indice "pivot"
===============================================================================
*/
BEGIN
-- condition gnrales SQL, paramtre NULL
IF @MOT IS NULL OR @PIVOT IS NULL
RETURN NULL
-- effet de bord : mot vide
IF @MOT = ''
RETURN ''
-- pivote en dehors des limites de calculs
IF @PIVOT NOT BETWEEN 1 AND LEN(@MOT) + 1
RETURN @MOT
-- cas gnral, les paramtres sont oprables
DECLARE @RETVAL VARCHAR(8000)
DECLARE @LONG
INTEGER
SET @LONG = LEN(@MOT)
-- pivot est le premier caractre
IF @PIVOT = 1
BEGIN
IF @LONG = 1
RETURN @MOT
RETURN SUBSTRING(@MOT, 2, @LONG - 1) + SUBSTRING(@MOT, 1, 1)
END
-- pivot est le dernier caractre
IF @PIVOT = @LONG
RETURN SUBSTRING(@MOT, @LONG, 1) + SUBSTRING(@MOT, 1, @LONG - 1)
-- pivot est au milieu
RETURN SUBSTRING(@MOT, @PIVOT + 1, @LONG - @PIVOT) +
SUBSTRING(@MOT, @PIVOT, 1) +
SUBSTRING(@MOT, 1, @PIVOT - 1)
END
GO

intrt

Une fonction SQL peut tre appele des millions de fois en fonction
des lignes quelle est susceptible de traiter dans le cadre dun
SELECT. Le traitement priori des valeurs triviales des paramtres
(NULL, vide, zro) permet dviter de drouler un code inutile
rpts des milliers de fois

http://sqlpro.developpez.com

32

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

3.2.2 criture des procdures stockes (Transact SQL)


Nom dune procdure :
Le nom de toute procdure SQL sera prfixe P_ suivit dun prfixe complmentaire
choisit parmi les lettres A, B, S, I, U, M ou D :
A
Admin : procdure vocation dadministration de la base de donnes
(maintenance, sauvegarde)
B
Batch : procdure dimport, export de donnes
S
Select : la procdure renvoie essentiellement un jeu de rsultat (elle contient au
moins un ordre SELECT).
I
Insert : la procdure insre des donnes
U
Update : la procdure modifie les donnes
D
Delete : la procdure supprime des donnes
M
Merge : la procdure insre ou modifie des donnes (combinaison dINSERT ou
UPDATE en fonction des conditions dexistence des tuples en entre).
Un suffixe de deux chiffres indiquera la version majeure de la procdure.
Exemples :
P_D_MEUBLE_00
P_M_ATELIER_01
P_B_ARCHIVE_00
P_A_MAINT_INDEX_00

nota

procdure
procdure
release 1
procdure
procdure

de suppression dun meuble


dinsertion ou mise jour dun atelier,
darchivage des donnes
dadministration : maintenance des index

Seules les modifications majeures des procdures doivent tre


spcifies. Par modification majeure on entend toute modification qui
entrane un appel de la procdure ou renvoi un jeu de rsultat dont la
forme diffre de lorigine.
Par exemple un paramtre en plus ou en moins, une colonne en plus
ou en moins dans le jeu de rsultat.
Par opposition une modification mineure nentache pas lenveloppe
externe dexcution de la procdure (correction de bug, optimisation
par exemple)

Paramtres :
Le nom des paramtres devra :
tre celui de la colonne si le paramtre reprsente une colonne de table (cas des
INSERT et UPDATE notamment) ;
tre significatif
tre prfix par son type en cas dambigut
Le type des paramtres devra :
tre celui de la colonne (domaine SQL) si le paramtre reprsente une colonne
de table (cas des INSERT et UPDATE notamment) ;
tre un type simple SQL, le plus proche de lexpression traiter.

http://sqlpro.developpez.com

33

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

tre choisit le plus gnrique possible (par exemple NVARCHAR pour les alpha.)
dans le cas de procdures traitant des donnes gnriques
ne pas utiliser le type SQL_VARIANT dans la mesure du possible.

Lordre des paramtres devra :


commencer par les paramtres impratifs ;
suivi par les paramtres output sil y en a
finir par les paramtres optionnels, dans lordre du moins au plus optionnel
tous les paramtres optionnels devront tre pourvus dune valeur par dfaut
Transaction :
A moins quelles ne contiennent quune seule requte, les procdures de type I, U, D
ou M devront faire lobjet dune transaction dont le niveau disolation doit tre
soigneusement choisit.
En particulier on laissera le niveau disolation par dfaut (READ COMMITTED) dans la
majorit des cas. Si le besoin de relecture stable est ncessaire, alors il y aura lieu de
passer au niveau disolation REPEATABLE READ. En cas de gnration ou de
modification de valeurs de clefs avec rpercussion dans dautres tables, le niveau
disolation SERIALIZABLE sera prfr.
Toute modification du niveau disolation (SET TRANSACTION ISOLATION LEVEL )
devra tre remise sa valeur par dfaut en sortie de procdure.
Enfin, les transactions seront anonymes (aucun nom de transaction ne doit tre
explicitement fourni pour les commandes BEGIN TRANSACTION et COMMIT /
ROLLBACK)
Compte tenu de la problmatique de rcupration sur erreur dans les transactions et de
la problmatique de transactions imbriques, il sera mis en place le code suivant dans
toutes les procdures devant tre transactionnes :
...
DECLARE @RETVAL INT

... code ...


COMMIT TRANSACTION
SET @RETVAL =0
GOTO LBL_RESUME
LBL_ERROR:
WHILE @@TRANCOUNT > 1
COMMIT TRANSACTION
IF @@ROWCOUNT = 1
ROLLBACK TRANSACTION
SET @RETVAL =-1
LBL_RESUME:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED

http://sqlpro.developpez.com

34

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

RETURN @@RETVAL
GO

Codage :
Le corps dune procdure sera contenu dans un bloc BEGIN / END.
Lorsquil y a lieu :
les paramtres passs une procdure pourront tre en sortie (OUTPUT).
une valeur par dfaut peut tre assigne aux paramtres.
Les variables utilises dans le corps dune procdure doivent tre dclares au plus prs
de leur utilisation et non en tte de code.
Le flag NOCOUNT sera mis ON en tte de toute procdure contenant une ou
plusieurs requtes.

Gestion des erreurs :


Linstruction GOTO sera exclusivement rserve la gestion des erreurs (SQL Server
2000). Avec la version 2005, le GOTO est proscrit.
La gestion des erreurs devra faire apparatre :
Un bloc de branchement en cas de succs (label LBL_OK:) suivi dun dpilage de
COMMIT.
Un bloc de branchement en cas dchec (label LBL_ERROR:) suivi dun dpilage
de ROLLBACK.
Un bloc de finalisation sil y a lieu (label LBL_RESUME:), prvoyant notamment
le rtablissement du niveau disolation par dfaut (READ COMMITED)
Le mot clef RETURN ne devra jamais tre dtourn de sa fonction de renvoi du contrle
dexcution de la procdure. En dautre terme il ne doit pas tre utilis, sauf
transmettre une erreur de procdure appele en procdure appelante.

Exemple :
Soit les tables suivantes dcrivant une personne physique :
CREATE TABLE T_TITRE_TTR
(TTR_ID
INT
TTR_CODE
CHAR(8)
TTR_LIBELLE
VARCHAR(32)
)
CREATE TABLE T_PERSONNE_PRS
(PRS_ID
INT
TTR_ID
INT
PRS_NOM

CHAR(32)

http://sqlpro.developpez.com

NOT NULL IDENTITY PRIMARY KEY,


NOT NULL
UNIQUE,

NOT NULL IDENTITY PRIMARY KEY,


FOREIGN KEY
REFERENCES T_TITRE_TTR (TTR_ID),
NOT NULL,

35

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"


PRS_PRENOM
)

2007-11-25

SQL spot

VARCHAR(25)

CREATE TABLE T_EMAIL_EML


(EML_ID
INT
PRS_ID
INT
EML_MAIL
EML_ORDRE
)

NOT NULL IDENTITY PRIMARY KEY,


NOT NULL
FOREIGN KEY
REFERENCES T_PERSONNE_PRS (PRS_ID),
VARCHAR(256) NOT NULL,
INT

SET IDENTITY_INSERT T_TITRE_TTR


INSERT INTO T_TITRE_TTR(TTR_ID,
INSERT INTO T_TITRE_TTR(TTR_ID,
SET IDENTITY_INSERT T_TITRE_TTR

ON
TTR_CODE, TTR_LIBELLE) VALUES (1, 'M.', 'Monsieur')
TTR_CODE, TTR_LIBELLE) VALUES (2, 'Mme.', 'Madame')
OFF

Procdure dinsertion ou dajout dun mail pour une personne physique :


CREATE PROCEDURE P_M_PERSONNE_MAIL_00 @PRS_ID
@EML_QUERY
@EML_MAIL
@EML_ORDRE
AS

INT,
CHAR(1),
VARCHAR(256),
INT

/*
===============================================================================
Fichier :
MaBase-PRIMARY
Copyright :
MonEntreprise
Auteur :
Frdric Brouard
Cre le :
2006-01-29
Description : ajoute ou modifie un email rattach une personne
===============================================================================
*/
BEGIN
SET NOCOUNT ON
-- ne rien faire si rfrences ou donnes NULL
IF @EML_ORDRE IS NULL OR @PRS_ID IS NULL OR @EML_MAIL IS NULL RETURN
IF @EML_QUERY = 'U'
-- c'est probablement une mise jour (U pour UPDATE)
BEGIN
IF EXISTS(SELECT *
FROM
T_EMAIL_EML
WHERE PRS_ID = @PRS_ID
AND EML_ORDRE = @EML_ORDRE)
BEGIN
-- si mail vide => suppression
IF @EML_MAIL = ''
DELETE FROM T_EMAIL_EML
WHERE PRS_ID = @PRS_ID
AND EML_ORDRE = @EML_ORDRE
ELSE
-- mail non vide => mise jour
UPDATE T_EMAIL_EML
SET
EML_MAIL = @EML_MAIL
WHERE PRS_ID = @PRS_ID
AND EML_ORDRE = @EML_ORDRE
RETURN
END
ELSE
-- cette rfrence de mail n'existe pas, donc c'est une insertion
SET @EML_QUERY = 'I'
END
IF @EML_QUERY = 'I' AND @EML_MAIL <> ''
-- c'est une insertion
INSERT INTO T_EMAIL_EML (PRS_ID, EML_MAIL, EML_ORDRE)
VALUES
(@PRS_ID, @EML_MAIL, @EML_ORDRE)
END

http://sqlpro.developpez.com

36

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

Procdure dinsertion ou dajout dune personne physique :


CREATE PROCEDURE P_M_PERSONNE_00 @PRS_ID INT,
@PRS_NOM CHAR(32),
@PRS_PRENOM VARCHAR(25),
@TTR_ID INT,
@EML_MAIL1 VARCHAR(256),
@EML_MAIL2 VARCHAR(256),
@EML_MAIL3 VARCHAR(256)
AS
/*
===============================================================================
Fichier :
MaBase-PRIMARY
Copyright :
MonEntreprise
Auteur :
Frdric Brouard
Cre le :
2006-01-29
Description : ajoute ou modifie les donnes relative une personne
===============================================================================
*/
BEGIN
SET NOCOUNT ON
DECLARE @RETVAL INT
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRANSACTION
IF @PRS_ID IS NULL
-- c'est une insertion
BEGIN
-- insertion dans la table personne
INSERT INTO T_PERSONNE_PRS (TTR_ID, PRS_NOM, PRS_PRENOM)
VALUES
(@TTR_ID, @PRS_NOM, @PRS_PRENOM)
IF @@ERROR <> 0 GOTO LBL_ERROR
-- rcupration de l'identifiant de personne
SET @PRS_ID = @@IDENTITY
-- insertion MAIL 1 :
EXEC P_M_PERSONNE_MAIL_00 @PRS_ID, 'I', @EML_MAIL1, 1
IF @@ERROR <> 0 GOTO LBL_ERROR
-- insertion MAIL 2 :
EXEC P_M_PERSONNE_MAIL_00 @PRS_ID, 'I', @EML_MAIL2, 2
IF @@ERROR <> 0 GOTO LBL_ERROR
-- insertion MAIL 3 :
EXEC P_M_PERSONNE_MAIL_00 @PRS_ID, 'I', @EML_MAIL3, 3
IF @@ERROR <> 0 GOTO LBL_ERROR
END
ELSE
-- c'est une modif
BEGIN
-- mise jour personne
UPDATE T_PERSONNE_PRS
SET
TTR_ID = @TTR_ID,
PRS_NOM = @PRS_NOM,
PRS_PRENOM = @PRS_PRENOM
WHERE PRS_ID = @PRS_ID
IF @@ERROR <> 0 GOTO LBL_ERROR
-- mise jour MAIL 1 :
EXEC P_M_PERSONNE_MAIL_00 @PRS_ID, 'I', @EML_MAIL1, 1
IF @@ERROR <> 0 GOTO LBL_ERROR
-- mise jour MAIL 2 :
EXEC P_M_PERSONNE_MAIL_00 @PRS_ID, 'I', @EML_MAIL2, 2
IF @@ERROR <> 0 GOTO LBL_ERROR
-- mise jour MAIL 3 :
EXEC P_M_PERSONNE_MAIL_00 @PRS_ID, 'I', @EML_MAIL3, 3
IF @@ERROR <> 0 GOTO LBL_ERROR
END

http://sqlpro.developpez.com

37

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

-- code termin
-- succs
LBL_OK:
COMMIT TRANSACTION
SET @RETVAL = 0
GOTO LBL_RESUME
-- erreur
LBL_ERROR:
WHILE @@TRANCOUNT > 1
COMMIT TRANSACTION
IF @@TRANCOUNT = 1
ROLLBACK TRANSACTION
SET @RETVAL = -1
-- finalisation
LBL_RESUME:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET NOCOUNT OFF
RETURN @@RETVAL
END

intrt

Les procdures stockes sont le meilleur moyen de grer les


transactions de la manire la plus rapide possible afin de minimiser
la contention.
Le fait de calquer les critures dans la base sur un modle proche de
lobjet diminue les risques dincohrence et acclre les traitements.

3.2.3 criture des triggers (Transact SQL)


En principe le codage dun dclencheur ne doit tre entrepris que dans les cas de
lextension du modle relationnel : hritage avec exclusion multiple, non relation,
contrainte de validit complexe, contrainte dunicit partielle
Dans tous les autres cas, il faut systmatiquement envisager la ralisation dune
procdure stocke.
Le code contenu dans un trigger doit toujours tre crit de manire ensembliste (requte
SQL uniquement). Il ne doit jamais y avoir de dclaration de variable ni utilisation de
curseur.
Lorsquun tel cas doit tre envisag, alors il faut transformer la logique en diffrentes
procdures stockes.
Lorsque la logique dun trigger entrane un ROLLBACK de la transaction appelante, ce
ROLLBACK doit tre immdiatement suivi de la gnration dune exception.

intrt

Le trigger est lobjet le plus coteux dans un SGBDR. Son code doit
donc tre le plus performant possible, ce qui nest ralisable que sil

http://sqlpro.developpez.com

38

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

est crit uniquement base de requtes SQL qui, par nature, sont
optimises.
Les pseudos tables de scrutation du curseur seront crites et aliasses comme suit :
pseudo table
inserted
deleted

alias
i
d

Exemple, ralisation dune contrainte dunicit avec de multiples entres vides,


(marqueur NULL) - soit la table :
CREATE TABLE T_EMPLOYE_EMP
(EMP_ID
INT
NOT NULL PRIMARY KEY IDENTITY,
EMP_NOM
CHAR(32) NOT NULL,
EMP_MATRICULE
CHAR(8))

Le trigger ci dessus ralise une contrainte dunicit sur la colonne EMP_MATRICULE


telle que lentend la norme SQL (SQL Server ntant pas conforme la norme sur ce
point) :
CREATE TRIGGER E_EMP_MATRICULE_UNIQUENULL
ON T_EMPLOYE_EMP
FOR INSERT, UPDATE
AS
BEGIN
IF EXISTS(SELECT COUNT(EMP.EMP_MATRICULE)
FROM
T_EMPLOYE_EMP EMP
INNER JOIN inserted i
ON EMP.EMP_MATRICULE = i.EMP_MATRICULE
GROUP BY EMP.EMP_MATRICULE
HAVING COUNT(EMP.EMP_MATRICULE) > 1)
BEGIN
ROLLBACK
RAISERROR(' TRIGGER E_EMP_MATRICULE_UNIQUENULL : Violation de la'
+ ' contrainte d''unicit sur les valeurs'
+ ' exprimes de la colonne EMP_MATRICULE, '
+ ' table T_EMPLOYE_EMP', 16, 1)
END
END

3.2.4 criture des scripts (Batch Transact SQL)


Dans la mesure du possible les scripts ne doivent pas tre transactionns.
Lorsque les scripts concernent de grands volumes de donnes (import et particulier), il y
a lieu de recherche un dcoupage du script par paquet de donnes Dans le mme
esprit, le dbranchement des index et des triggers pralable une insertion massive est
souhaitable.

intrt

Le dcoupage en lots plus petits acclre les traitements. Se


souvenir que lunit de stockage dans les tables MS SQL Server est
l extent , soit 64 Ko. Un dcoupage en sous lots multiples de cet
unit minimise le volume des transactions.
La dsactivation des index et triggers pralable une insertion
massive, puis leur ractivation une fois le travail termin, diminue
drastiquement les temps de rponse.

http://sqlpro.developpez.com

39

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

3.3 criture du code CLR (SQL Server 2005)


SQL CLR permet dcrire :
des types de donnes utilisateurs (UDT)
des procdures stockes
des fonctions SQL
des fonctions dagrgation SQL
des triggers
dans une des langages concourant la plateforme .net de Microsoft (C#, VB .net, Delphi
.net, etc)
Cependant, les tests effectus, confirms par les recommandations de Microsoft,
montrent que SQL CLR est moins performant dans tous les cas daccs aux donnes que
le Transact SQL. De plus comme tout langage de type L4G, il est victime du dfaut
dimpdance trs difficile contourner.

intrt

On rservera SQL CLR lcriture de :


fonction mathmatiques ou de traitement de chanes de
caractres
procdures faisant peu appel aux donnes et beaucoup aux
calculs
ralisation de nouveaux types de donnes complexes
fonctions de calculs dagrgat
On sinterdira dutiliser SQL CLR pour lcriture des triggers

http://sqlpro.developpez.com

40

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

2007-11-25

SQL spot

ANNEXE 1 VOCABULAIRE
Association
Attribut
Catalogue
Collation

Dfaut
dimpdance

Diacritique

DOMAIN (SQL)
Domaine

E/R

Entit

Exclusion
mutuelle

GUID

IDEF1X
Lien
MCD

spcification des liens et relations entre deux ou plusieurs entits.


Information de nature atomique propre dcrire une des caractristiques dune entit.
Exemple : attribut titre dune entit livre
Un CATALOG SQL constitue en fait une base de donnes qui elle-mme peu tre
dcoupe en schmas.
Ensemble des rgles qui dictent le comportement dun jeu de caractres dans un
environnement base de donnes (sensibilit ou non la casse, aux caractres
diacritiques, la largeur dencodage)
(en informatique) diffrence de comportement de deux systme de gestion de
linformation en prsence dun mme traitement, d la faon dont sont gres de
manire interne les donnes. Par exemple entre SQL et les L4G (Java, C++, C#...) la
reprsentation de labsence de valeur nest pas traite de manire identique (NULL),
comme les collations ou la gestion ensembliste des donnes (UNION).
Du grec diakrinein, "distinguer". Se dit d'un signe qui accompagne un caractre pour
permettre de le distinguer phontiquement : accents, cdille, tilde, par extension
ligature (=oe, =ae, &=et, @=ad...)
Voir domaine
Ensemble des valeurs qu'un attribut peut prendre. Exemple, un attribut caractrisant un
pourcentage peut prendre toute la gamme des valeurs numrique de 0 100. Dans ce
cas, la contrainte de domaine sera la plage des valeurs de 0 100, traduite en SQL par
la contrainte de validit CHECK VALUE BETWEEN 0.0 AND 100.0
(Entit / Relation) notation de modle relationnel proche du concept labor par Peter
Chen : The Entity-Relationship Model - Toward a Unified View of Data. ACM
Transactions on Database Systems (TODS) Volume 1 Number 1: pp 9-36 (1976)
ensemble d'information cohrente permettant de dcrire une mme famille d'objet.
Reprsentation d'une famille d'lments matriels ou immatriels que l'on dsire
modliser dans le systme d'information.
Lors de la modlisation de donnes en hritage, les lments fils peuvent sexclure ou
sassocier suivant la nature du modle. Exemple : pre VEHICULE, fils MOTO,
VOITURE, CAMION => exclusion mutuelle. Pre VEHICULE, fils AVION, BATEAU,
VOITURE => pas dexclusion mutuelle sinon que faire de lhydravion ou de la
voiture amphibie ?
Globally Unique IDentifier : Identificateur global unique cod sur 128-bits (16 octets).
Lalgorithme utilis pour le gnrer garantit statistiquement que le code rsultant est
unique dans lespace et le temps. Cet algorithme est tir dun standard de lOpen
Software Foundation (OSF) Distributed Computing Environment (DCE).
Les critres retenus pour limplmentation de lalgorithme spcifi par OSF DCE sont :
Date et heure systme ( 1/10 micro-secondes prs).
Incrmentation force de lidentifiant pour les crations de GUID frquence
leve.
Adresse MAC de la carte rseau, rellement unique car dtermin par IEEE (si
la machine ne possde pas de carte rseau, un code alatoire est gnr
partir de ltat de la machine RAM, disque, etc).
Le GUID est galement appel Universally Unique Identifier (UUID) selon la
dnomination initiale par OSF DCE
Format graphique de notation dun modle de donnes utilise notamment par UML.
IDEF1x signifie : Icam DEFinition language 1.
Les liens sont les lments de jonction entre entit et association. Ils se reprsentent
gnralement sous forme de traits dans les diffrentes modles.
Le MCD ou Modle Conceptuel de Donnes, est une reprsentation sous forme de
schma visuel de la mise en relation des donnes un niveau abstrait (pas de lien avec
l'implmentation qui en sera faite)

http://sqlpro.developpez.com

41

Frdric Brouard - MVP SQL Server

Norme de dveloppement "base de donnes"

MERISE

MLD

Modle
Conceptuel de
Donnes
Modle Logique
de Donnes
Modle
Physique de
Donnes
MPD

Paradoxe
temporel

Schma

Trigramme

2007-11-25

SQL spot

Mthode dlaboration de systme informatique franaise introduite dans les annes


70 par Hubert Tardieu. La partie modlisation des donnes repose sur le modle Entit
Relation de Peter Chen.
Le MLD ou Modle Logique de Donnes, est reprsentation graphique de
larchitecture de la base de donnes sous forme de tables et de liens dintgrit conu
de manire gnrique en respectant une norme ou un standard (gnralement SQL).
Voir MCD

Voir MLD
Voir MPD

Le MPD ou Modle Physique de Donnes est une reprsentation graphique de


larchitecture de la base de donnes sous forme de tables et de liens dintgrit propre
une implmentation sur un SGBDR spcifi.
action dans un temps pass remis en cause par une action postrieure. Exemple :
laffectation dune valeur de clef une ligne de table qui vient tre archive, ne doit
pas tre rutilise pour une autre ligne, sinon la restauration de larchive craserait les
donnes affrente cette ligne.
Un schma SQL est un sous ensemble dun CATALOG SQL (une base de donnes) et
permet de grer la scurit daccs aux donnes de manire globale et gnrique. Le
nom qualifi dun objet SQL commence toujours par son prfixe de schma.
code compos de trois lettres permettant une identification rapide dun objet.

http://sqlpro.developpez.com

42

Frdric Brouard - MVP SQL Server

Vous aimerez peut-être aussi