base de données
Version 1.0
Grégory CASANOVA
2 Design et création d’une base de données [03/07/09]
Sommaire
1 Introduction ..................................................................................................................................... 3
2 Pré-requis ........................................................................................................................................ 4
3 Design et création de bases de données ......................................................................................... 5
3.1 Les types de systèmes de bases de données .......................................................................... 6
3.1.1 OLTP................................................................................................................................. 6
3.1.2 OLAP (Online Analytic Processing) .................................................................................. 7
4 La normalisation .............................................................................................................................. 8
4.1 La première forme de normalisation ...................................................................................... 8
4.2 La seconde forme de normalisation ........................................................................................ 8
4.3 La troisième forme de normalisation ...................................................................................... 9
4.4 La dénormalisation .................................................................................................................. 9
5 Les liens dans une base de données ............................................................................................. 10
5.1 Les clés................................................................................................................................... 10
5.2 Les différents types de liens .................................................................................................. 11
6 Les bases de données .................................................................................................................... 12
6.1 Créer une base de données avec SQL Server ........................................................................ 12
6.1.1 Avec SQL server Management Studio ........................................................................... 12
6.1.2 Avec du code T-SQL ....................................................................................................... 13
7 Conclusion ..................................................................................................................................... 19
1 Introduction
Les bases de données en général servent dans tous les domaines de la vie courante, comme
dans les domaines techniques. Bien gérer une base de données, c’est garantir l’intégrité des
données, à savoir le fait que celle-ci ne seront pas corrompues au moment de leur utilisation.
Dans ce chapitre, nous apprendrons à créer une base de données en fonction de nos besoins,
pour garantir un maximum de sécurité concernant l’intégrité de ces données à l’intérieur de la
base. Nous verrons aussi quels sont les différent types généraux de base de données qui
existent, afin de faire le bon choix, suivant l(utilisation que nous voulons en faire.
2 Pré-requis
Ce chapitre constitue la base des bases en matière de développement de base de données, la
seule capacité que vous devez avoir en lisant ce chapitre est la suivante :
- Connaitre les notions traitées dans le chapitre 1 et connaitre les principes d’une base de
données relationnelle.
Tables Une table est l’endroit où les données sont stockées. Une base de données
doit contenir au minimum une table. Les informations dans les tables sont
stockées dans les lignes et colonnes.
Colonnes Les colonnes sont constituées d’une cellule de chaque ligne. Elles donnent
une définition à chaque ensemble de définition et ne peut contenir qu’un
seul type de données. Chaque table, doit contenir au minimum une
colonne.
Enregistrements Les enregistrements sont constituées d’une cellule de chaque colonne. Les
lignes sont aussi appelées des records. Une table peut contenir autant de
ligne que l’on veut, on est simplement restreint par notre espace disque.
Procédure stockée On peut parfois vouloir qu’un programme manipule des données, de façon
récurrente. Une procédure stockée contient une ou plusieurs déclarations
T-SQL qui sont compilées et prêtes à être utilisées.
Déclaration T-SQL Une déclaration T-SQL est un programme prêt à être utilisé, que SQL
Server peu exécuter pour modifier des données.
Assemblages Les assemblages correspondent aux procédures stockées, ils peuvent
modifier des données, cependant, ils sont plus utilisés pour une logique
procédurale comme on pourra le voir dans un programme .NET.
Index Comme dans un livre, un index permet d’accéder aux données plus
rapidement. Les index correspondent à des listes prédéfinies qui peuvent
informer sur la position physique ou non d’une donnée. Ils peuvent être
utilisés par SQL Server pour trouver une ligne de données. Un index ne
peu pas couvrir plus d’une table.
Vues On peut identifier les Vues en tant que des tables virtuelles. Elles peuvent
contenir des informations combinées de plusieurs tables et peuvent
présenter une interface plus intuitive pour les données.
Fonctions Une fonction est similaire à une procédure stockée. La seule différence est
qu’une fonction traite les données ligne par ligne.
Maintenant que nous nous sommes familiarisés avec le vocabulaire d’une base de données, parlons
de celles qui sont préconstruites dans SQL Server, elles sont au nombre de cinq et nous allons voir le
rôle de chacune :
Master : c’est la plus importante des bases de données préinstallées dans SQL
Server. Il est absolument déconseillé de modifier cette base de données directement
dans le sens où elle contient des fonctions du système. Si jamais cette base de
données vient à être corrompue, il y a de fortes chances que SQL Server ne s’exécute
plus correctement. Elle contient des informations très importantes comme les Login,
le rôle de chaque utilisateur, tous les paramètres de configuration du système, les
noms et les informations relatives aux bases de données créées, la position des
bases de données, ou encore des tables systèmes qui contiennent elles même des
Ces tables pré construites dans SQL Server, vous l'avez compris, servent pour la plupart, à
contrôler SQL Server et ses paramètres. Avant de pouvoir créer notre première base de données, il
est nécessaire d'avoir quelques acquis supplémentaires concernant les différents types de systèmes.
Il en existe deux. Les systèmes OLTP et les systèmes OLAP qui possèdent des propriétés différentes et
qui sont les suivantes.
3.1.1 OLTP
La plupart du temps, l'interface utilisateur qui utilisera ce système OLTP sera codée dans un
langage .NET, et aura besoin d'accéder instantanément à la base de données pour pouvoir en
modifier ses informations. Un système OLTP aura donc besoin de pouvoir procéder à des mises à jour
de données de manière fréquente et instantanée. C'est le but principal du système OLTP, et le fait
principal pour lequel on choisira ce type de système. Ces systèmes OLTP ont donc besoin d'être
accessibles rapidement, et d'être capable de garder l'intégrité des données. Il est donc nécessaire
que la structure de la base de données soit bonne, mais aussi que vous sachiez où sont stockées les
données physiquement. La normalisation vous permettra de constituer un système OLTP rapide et
fiable, puisque vous diminuerez grandement le risque d'erreur en, par exemple, supprimant les
redondances de données dans les tables de vos bases de données dans votre système OLTP (Nous
développerons le concept de normalisation seulement après avoir présenté les propriétés d'un
système OLAP). Plus votre base de données sera compacte et plus votre système sera performant.
4 La normalisation
Dans les deux paragraphes précédents, nous avons utilisé le mot "normalisation". La
définition générale de normalisation est simple, c'est le fait de rendre les tables plus compactes dans
une base de données, en supprimant les répétitions de données. La normalisation a pour but de
rendre l'exécution de vos requêtes et l'accès à vos données plus rapide. Plus notre base de données
sera normalisée, plus le nombre de relations entre les tables sera important (nous verrons plus tard
comment créer des relations entre les tables). Il est donc nécessaire de garder un équilibre entre le
nombre de relations entre les tables et les degrés de normalisation de votre base. Il existe trois
formes principales de normalisation utilisées. D'autres existent, mais elles ne sont pas utilisées à titre
professionnel mais plutôt expérimental. Nous allons les définir maintenant.
Cette table n’est pas normalisée à la seconde forme normale. Si on prend en compte que la clé
primaire est composée des deux colonnes, « Num_cli » et « Num_com », les colonnes « Nom »,
« Prenom », « Fixe » et « mobile » dépendent de « Num_cli » alors que « Date_com » dépend du
numéro de commande. Il est donc nécessaire de diviser cette table « Client » en deux tables
« Client » et « Commandes ». Voici, finalement, les deux tables normalisées à la seconde forme
normale.
4.4 La dénormalisation
Il existe aussi un processus de normalisation. La dé normalisation est le complet opposé de la
normalisation. Vous aurez donc à inclure des redondances de données, et tous les paramètres qui
font qu’une base de données n’est pas normalisée. La dé normalisation réduira le nombre de tables
et par conséquent, le nombre de relations entre les tables. Vous aurez par exemple besoin de dé
normalisé lorsque vous travaillerez sur un système OLAP.
Concrètement, à quoi servent les liens ? Imaginons que nous avons besoin de modifier une
donnée dans une table de notre base de données, et que cette donnée existe en plusieurs
exemplaires dans différentes tables. Si ces tables ne sont pas liées, une donnée sera mise à jour, et
les autres deviendront invalides, d’où l’utilité des liens.
Clés primaires : C’est le type de clé le plus important. Tout d’abord, il est primordial que la
table où est définie la clé primaire ne retourne que des valeurs uniques, et non définit comme NULL.
Dans cette logique, il n’est pas possible qu’une clé primaire soit définit dans une table, pour des
colonnes qui ne retourne pas une seule ligne. De plus, une table ne contient qu’une seule clé
primaire. Une clé primaire est utilisée pour créer un lien entre les données de la table où est définie
cette clé, et les autres tables de votre base de données.
Clés étrangères : Imaginons une base de données qui contient deux tables. Ces deux tables
possèdent une même donnée. Une clé étrangère, dans ce cas, servira à lier ces données similaires
pour que, lorsqu’on en modifie une, l’autre se mette à jour. De façon plus générale, une clé
étrangère créé un lien entre deux colonnes de deux tables différentes. Ce lien est créé selon une
contrainte, qui est une méthode utilisée par SQL Server pour vérifier les caractères du lien. Cette
contrainte va vérifier si le lien utilise les paramètres qu’on lui a donnés.
Une clé étrangère est une clé dans une table fille ou une colonne, ou un groupe de colonnes,
est directement relié à la table maîtresse avec exactement le même nombre de données. Il n’est pas
nécessaire qu’une clé étrangère soit liée à la clé primaire de la table maîtresse. Une clé étrangère
existera seulement si un lien a été créé entre une table fille et une table mère. Il est possible qu’une
table mère et une table fille soient les mêmes tables, et de posséder des clés étrangères et une clé
primaire définies en elles. Ce phénomène est appelé une relation réflexive.
Clés candidates : On l’a vue plus haut, il ne peut y avoir qu’une seule clé primaire par table.
Les clés candidates sont simplement des clés qui sont sujettes à devenir des clés primaires. Il n’y a
pas de différence entre une clé primaire et candidate, nous utiliserons donc une ou plusieurs clé(s)
candidate(s) dans le cas ou nous avons déjà utilisé notre clé primaire dans une table et que nous
aurions besoin d’une seconde clé primaire, ou plus.
Comme nous l’avons dit précédemment, une clé primaire ne peut pas supporter de valeur
NULL. Mais si nous avons besoin d’une valeur NULL, comment faire ? On peut utiliser une contrainte
unique. Les propriétés de celle-ci ressemblent fortement à celles d’une clé primaire mais il y a tout
de même des différences. Une contrainte unique n’est pas une clé primaire, une contrainte unique
peut contenir des valeurs NULL, à la différence de la clé primaire. Tout comme la clé primaire,
chaque colonne doit retourner seulement une valeur, mais la différence se fait dans le nombre,
puisque l’on peut avoir plusieurs contraintes uniques, alors qu’on devait se contenter d’une seule clé
primaire.
Précédemment, nous avons présenté le vocabulaire usuel des bases de données, ce qu’est une
base de données, les deux types de systèmes à mettre en place pour gérer une base de données, le
concept de normalisation d’une base de données et les liens qui doivent exister entre les tables
d’une base de données pour assurer entre autre leur intégrité. Mais qu’en est-il des tables ? Dans la
partie suivante, nous allons en majorité expliquer comment créer une table dans une base de
données sur SQL Server 2008, puis nous nous attarderons sur la configuration de table.
Détaillons les différentes caractéristiques que nous pouvons donner à notre base de données au
moment de sa création. Tout d’abord un nom et un propriétaire. Il est conseillé de laisser par défaut
le nom du propriétaire, ce qui rendra le créateur de la base de données, propriétaire. Le nom de la
base de données doit comporter certaines restrictions. On peut utiliser toutes les lettres, majuscules
ou minuscules, tous les chiffres et l’underscore. On doit alors bannir tous les autres caractères
spéciaux, les espaces… On en vient ensuite à l’espace nommé « fichiers de la base de données : ».
C’est dans cet espace que vous pourrez gérer toutes les caractéristiques de votre base de données :
ses types de fichiers, ses groupes de fichiers, la taille initiale de la base de données, sa croissance
/* Code TSQL */
USE [master]
GO
LOG ON
( NAME = N'Test_log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\
MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log.ldf' ,
SIZE = 1024KB ,
MAXSIZE = 2048GB ,
FILEGROWTH = 10%)
GO
USE [master]
GO
Pour fonctionner, SQL a besoin de pointer sur lui même une base de données connue. Ici, il pointera
sur « master ». La base de données « master » doit exister pour que SQL Server fonctionne. Le mot
clé « USE » ordonne à SQL Server de modifier la connexion par défaut. Le mot clé « GO » indique à
SQL Server qu’il doit appliquer la fonction du mot clé précédent avant de passer au suivant.
LOG ON
( NAME = N'Test_log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\
MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log.ldf' ,
SIZE = 1024KB ,
MAXSIZE = 2048GB ,
FILEGROWTH = 10%)
GO
Vient ensuite le mot clé « CREATE DATABASE ». Il va permettre de créer une nouvelle de données
dont le nom sera comprit entre les deux crochets. Ici son nom sera « Test ». Les informations
contenues entre cette instruction et le mot clé « GO », seront les éléments contenus dans la base de
données « Test ». Attardons nous sur les différentes propriétés que possède une base de données.
( NAME = N'Test',
FILENAME = N'C:\Program Files\Microsoft SQL Server\
MSSQL10.MSSQLSERVER\MSSQL\DATA\Test.mdf' ,
SIZE = 3072KB ,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1024KB )
LOG ON
base
NAME : Le nom logique qui sera utilisé par SQL Server comme référence.
FILENAME : Désigne le chemin complet de l’emplacement où les données seront stockées. Le nom du
fichier doit contenir la terminaison .MDF.
SIZE : Désigne la taille initiale de la base de données. Si on ne le met pas, ce paramètre devrait
prendre la valeur qu’on lui a donnée dans la base de données « model ». Si rien n’est indiqué dans
Model, la valeur par défaut est de 1 mégaoctet. On peut lui appliquer plus d’unités que KB, à savoir
MB, GB, TB…
FILEGROWTH : Désigne le pas d’incrément du fichier qui ne pourra jamais dépasser la valeur max. Il
peut être précisé en pourcentage ou bien en taille fixe, c'est-à-dire avec des unités telles que le Ko ou
encore le Mo.
( NAME = N'Test_log',
FILENAME = N'C:\Program Files\Microsoft SQL Server\
MSSQL10.MSSQLSERVER\MSSQL\DATA\Test_log.ldf' ,
SIZE = 1024KB ,
MAXSIZE = 2048GB ,
FILEGROWTH = 10%)
GO
FILENAME : Définit l’emplacement exact de l’endroit où sera définit le fichier Log. On doit ajouter
l’extension .LDF au nom du fichier.
On peut aussi modifier d’autres paramètres de la base de données comme sa compatibilité vis a vis
des différentes versions de SQL Server. La commande qui vise à modifier ce paramètre est la
suivante.
Pour modifier la base de données que l’on veut, on peut utiliser le mot clé « ALTER DATABASE », en
indiquant entre crochets le nom de la base de données à modifier, et suivit de l’action à effectuer. Ici,
on utilise « SET COMPATIBILITY_LEVEL » pour changer le niveau de compatibilité de notre base de
données en fonction des différentes versions de SQL Server. Il existe une multitude d’actions
différentes qui nous permettent de modifier les propriétés de notre base de données. Elles auront
toujours la même structure.
Seul le second mot clé sera différent ainsi que la valeur que prendra le paramètre. Comme nous
l’avons vue pour le niveau de compatibilité, on écrira en premier « ALTER DATABASE » qui est le mot
clé de modification de la base de données, puis entre crochet le nom de la base de données, puis le
mot clé « SET » qui est le mot clé de modification du paramètre qui suit. Voici une liste des mots clés
et de leurs valeurs qui peuvent modifier un paramètre de la base de données. On peut les classer en
différentes catégories.
DBO use only La base n’est accessible que par son propriétaire.
ROLLBACK AFTER nombre Annulation des transactions après une valeur nombre de
seconde d’attente.
ROLLBACK IMMEDIATE Annulation immédiate des transactions.
NO_WAIT Si une transaction n’accède pas directement à une
ressource donnée qui lui est nécessaire, la transaction est
annulée.
ANSI_PADDING Spécifie si les espaces à droite sur les données de type
caractère doivent être ou non supprimés.
COMPATIBILITY Indique le niveau de compatibilité de la base de données.
Pour SQL Server 2000, c’est un niveau de 80, pour 2005,
un niveau de 90 et pour 2008, un niveau de 100.
DATE_CORRELATION_OPTIMISATION SQL Server se charge d’entretenir la corrélation des
statistiques entre deux tables par une contrainte de clé
étrangère et qui possèdent toutes les deux une colonne
de type Datetime.
Après avoir effectué toutes les modifications voulues, vous pouvez lancer les commandes que vous
avez entrées en appuyant sur « F5 » ou « Ctrl + E ». SQL Server appliquera alors le code écrit. Après
l’avoir exécuté, si aucun problème n’est survenu, vous devriez avoir le message
suivant : «Commandes exécutés avec succès ».
Il est aussi possible de supprimer une base de données avec du code T-SQL, il suffit juste d’entrer la
requête suivant.
USE [master]
GO
7 Conclusion
Dans ce chapitre nous avons appris les différents types de base existants, et à gérer une base de
données, puis lui donner les caractéristiques que nous voulions. La base de données est
« l’enveloppe » générale de vos données, leur conteneur. Il existe alors des sous ensembles qui nous
permettront de regrouper les données de même destination ensemble, les tables, puis les colonnes.
Ce sera le sujet du prochain chapitre qui traitera de la création et de la gestion des tables dans SQL
Server 2008, ainsi que la mise en place de contraintes d’intégrités sur les colonnes des tables.