- Introduction.
- Qu'attendre d'une base de données ?
- Architecture
- Définitions.
- Niveaux d'abstractions.
- Caractéristiques.
- Histoire.
- Base de données relationnelles.
- Introduction.
- Normalisation.
- SQL.
- Base de données objet.
- Bibliographie/Liens.
- Conclusion.
Le but de ce document est d'offrir un éclairage théorique à tout un chacun qui désire collecter ou rassembler des données. Les informations récoltées ici permettront sans doute de rendre des développements futurs - sous MySql ou Access notamment - plus rigoureux.
Vous trouverez un aperçu de la théorie sur les bases de données, je vous invite à vous référez à la bibliographie pour prolonger votre étude.
- Contrôle de la redondance des données.
- Si plusieurs utilisateurs ou applications accèdent aux mêmes données, celles-ci doivent être enregistrées dans la machine à un seul endroit.
- Incohérence des données.
- La transaction est enregistrée sur disque au moment où elle est terminée.
- Partage des données.
- Les données stockées peuvent être partagées.
- Sécurité.
- On doit pouvoir définir des droits d'accès ou des restrictions sur la base.
- Intégrité des données.
- L'intégrité sera assurée s'il n'y a ni redondance, ni inconsistance. De plus, dans l'application, un ensemble de contraintes doit être défini pour que les données restent intègres : une date de naissance libellée comme suit 36/15/1998 est impensable.
- Indépendance des données pour l'application.
- Différents services offerts par le système de base de données ne doivent avoir aucun impact sur l'application :
- Définition d'index
- Définition de données distribuées ou partagées
- Représentations internes des données
- Système de back-up
- Notion de vue
- Accès à la base
- Entité
- Un ensemble d'informations liées entre elles.
- Attribut
- Les entités ont des propriétés appelées attributs.
- Domaine
- Chaque attribut a un ensemble de valeurs qui est appelé le domaine.
- Clé
- Une clé est définie à partir de colonnes. Une valeur de chaque colonne permettant d'identifier univoquement un enregistrement de l'entité.
- Relation
- Une relation permet de lier des entités entre elles.
- Administrateur de base de données (DBA)
- Personne ou groupe de personnes responsable du contrôle de la base de données.
- Système de gestion de base de données (DBMS)
- Ensemble de softwares nécessaire aux contrôles de la base de données.
- Dictionnaire de données (DD)
- Un ensemble d'entités représentant les caractéristiques de la base de données appelé aussi méta-database.
- Programme de l'application
- Un programme qui utilise une base de données est appelé un programme de l'application.
- Host langage
- Un programme de l'application est écrit dans un langage de programmation. Ce langage est appelé Host langage (Java, C/C++, Cobol...)
- Langage de définitions de données (DDL)
- Langage permettant d'interfacer le dictionnaire pour créer la base de données ( création de tables, d'index...).
- Langage de manipulation de données (DML)
- Langage utilisé pour manipuler les données.
Dans ce paragraphe nous expliquerons comment les objectifs de contrôle de redondance, de données partagées et spécialement l'indépendance des données peuvent être réalisées dans un système de base de données.
Nous débutons la discussion en présentant les trois niveaux d'abstraction. Nous discuterons également des deux différents langages utilisés dans le système de base de données, celui pour la définition des données (DDL) et celui pour la manipulation des données (DML).

Le modèle externe
Le modèle externe est en fait une vue pour l'utilisateur (end user). Il peut y en avoir plusieurs : jusqu'à un par utilisateur.
Par utilisateur, il peut être défini :
- le host langage
- une vue (sous ensemble de la base de données)
- accès à la base de données (login)
Le modèle conceptuel
Le modèle conceptuel est fréquemment appelé le «data model» de la base de données. Il définit toutes les entités, associations, index,... à travers le langage de définition de données (DDL). La description de la base de données est enregistrée dans le dictionnaire. Contient l'ensemble des process et libraries.
Le modèle interne
La représentation physique des données est spécifiée dans le modèle interne. L'utilisateur n'a pas accès à cette partie du modèle. Le modèle interne permet de cacher la complexité de l'implémentation de la base de données.
Les langages de la base de données
Il existe trois types de langages :
- langage de définition de la base (création de table,...)
- langage de manipulation de données (insertion de données, ...)
- host langage : langage de programmation où les instructions des deux langages précédents peuvent être insérées.
- notion de transaction avec commit (j'écris dans la base de données) et rollback (j'annule ce que je viens de faire donc je n'écris rien dans la base de données)
- backup et restore (recovery) d'une base
- notion de lock (verrou) pour les accès parallèles
- distribution et réplication de données
- gestion des index sans modification des données
- extensions de la base de données sans l'arrêter (scalable)
- accès aux données (peut être distant)
- structuration des données
- droit d'accès
- cacher la complexité (grâce aux différents modèles vus au point 3.2)
Au commencement vînt le Verbe, puis l'Ecrit et enfin la Base de données...
- Base de données hiérarchique : ne permettait que des relations 1-N, aujourd'hui disparue.
- Base de données réseau : hiérarchique améliorée, gère les relations M-N, lie les enregistrements les uns aux autres (liste chaînées, pointeurs), devenue rare.
- Base de données relationnelle : plus riche.
Qualités : richesse du langage SQL, backup, verrous, distribuée, répliquée...
Défauts : les colonnes ont des limites, pas de types complexes (liste chaînées, FIFO) - Base de données objet : jeune et peut-être immature. Colle à n'importe quelle structure, pas de tables, pas de colonnes, pas de limites de types.
Les bases de données relationnelles sont les plus répandues (Oracle et Access par exemple) et nous allons donc nous y attarder.
On trouve dans ces bases de données les notions d'entité, de relation, de table, d'attribut, de clé primaire, de clé étrangère, de vue, d'index, de SQL.
Les bases de données relationnelles reprennent toutes les caractéristiques énumérées au point 3.3.
La normalisation est certainement une étape essentielle dans la construction de votre base de données car elle permet d'éviter la redondance. Pour rendre ce propos clair (le sujet n'est pas simple!), nous l'illustrerons à l'aide d'exemples.
Deux tables serviront de base à ces exemples. Il s'agit d'un cas courant : des fournisseurs qui vendent des pièces, les pièces viennent de différents fournisseurs.
- La table FOURNISSEURS composée comme suit :
NOFOUR Numéro de fournisseur NOMFOUR Nom du fournisseur VILLE Ville du fournisseur PROVINCE Province du fournisseur NOPCE Numéro de pièce vendue par le fournisseur PRIX Prix de la pièce vendue par le fournisseur - La table PIECES composée comme suit :
NOPCE Numéro de pièce NOMPCE Nom de la pièce STOCK Stock de la pièce NOFOUR Numéro du fournisseur qui vend la pièce
Une relation non normalisée donnerait ceci :
| NOPCE | NOMPCE | STOCK | NOFOUR | NOMFOUR | VILLE | PROVINCE | PRIX |
|---|---|---|---|---|---|---|---|
| 1 | AA | 100 | 100 | XX | LLN | BW | 10000 |
| 200 | YY | BXL | BT | 20000 | |||
| 300 | ZZ | WAV | BW | 15000 | |||
| 2 | BB | 30 | 200 | YY | BXL | BT | 10000 |
| 400 | NN | GD | FL | 10 |
Une relation normalisée première forme appelée 1NF donne ceci :
| NOPCE | NOMPCE | STOCK | NOFOUR | NOMFOUR | VILLE | PROVINCE | PRIX |
|---|---|---|---|---|---|---|---|
| 1 | AA | 100 | 100 | XX | LLN | BW | 10000 |
| 1 | AA | 100 | 200 | YY | BXL | BT | 20000 |
| 1 | AA | 100 | 300 | ZZ | WAV | BW | 15000 |
| 2 | BB | 30 | 200 | YY | BXL | BT | 10000 |
| 2 | BB | 30 | 400 | NN | GD | FL | 10 |
Une relation normalisée deuxième forme appelée 2NF donne ceci :
| NOPCE | NOMPCE | STOCK |
|---|---|---|
| 1 | AA | 100 |
| 2 | BB | 30 |
| NOPCE | NOFOUR | PRIX |
|---|---|---|
| 1 | 100 | 10000 |
| 1 | 200 | 20000 |
| 1 | 300 | 15000 |
| 2 | 200 | 10000 |
| 2 | 400 | 10 |
| NOFOUR | NOMFOUR | VILLE | PROVINCE |
|---|---|---|---|
| 100 | XX | LLN | BW |
| 200 | YY | BXL | BT |
| 300 | ZZ | WAV | BW |
| 400 | NN | GD | FL |
Votre base de données devrait être au moins sous cette forme.
Une relation est 2NF si :
1. elle est 1NF
2. chaque attribut non clé dépend une seule fois de la clé primaire
Une relation normalisée troisième forme appelée 3NF donne ceci :
Nous ne touchons plus aux tables PIECES et ASSOCIATION par contre, la table FOURNISSEUR peut encore être normalisée;. En effet, certaines colonnes non clé peuvent être liées entre elles.
| NOFOUR | NOMFOUR | VILLE |
|---|---|---|
| 100 | XX | LLN |
| 200 | YY | BXL |
| 300 | ZZ | WAV |
| 400 | NN | GD |
| VILLE | PROVINCE |
|---|---|
| LLN | BW |
| BXL | BT |
| WAV | BW |
| GD | FL |
Ceci est une forme classique(notamment pour les codes postaux), si une ville change de province une seule mise à jour est nécessaire.
Essayez si possible de normaliser jusqu'ici.
Une relation est 3NF si :
1. elle est 2NF
2. chaque attribut non clé est directement dépendant de la clé primaire
Bon, si vous êtes arrivé jusqu'ici, BRAVO !
Mais on peut normaliser encore plus loin, mais là je vous renvoie à la bibliographie.
Le SQL est un langage de manipulation de données qui vous permet de travailler avec votre base de données. Certains gestionnaires de base de données vous permettent d'entrer ces commandes en ligne ou vous pouvez les insérer dans votre langage favori (VisualBasic, Cobol, C,...)
Le but n'est pas dans cette section de vous donner toutes les commandes SQL, pour cela je vous renvoie à la documentation ou à l'aide de votre gestionnaire de base de données.
A propos d'Access, lorsque vous créer une requête, vous pouvez en cliquant sur le bouton SQL visualiser le code SQL généré. Remarque : ce code n'est pas vraiment optimisé.
Les commandes qui suivent sont libellées sur plusieurs lignes et indentées pour des raisons de lisibilité uniquement.
Il se peut que pour des raisons de sécurité vous ne puissiez pas réaliser certaines commandes sur le serveur de votre entreprise !
Créer une table :CREATE TABLE FOURNISSEUR (NOFOUR INTEGER NOT NULL, On crée une table FOURNISSEUR avec comme colonne NOFOUR un entier qui ne peut être NULL(saisie obligatoire en création), NOM une chaîne de 20 caractères ... la commande SQL se termine en général par un point-virgule. |
Détruire une table :DROP TABLE FOURNISSEUR; Détruit la table FOURNISSEUR. |
Créer un index : (pour accéder plus rapidement aux enregistrements)CREATE INDEX PR-FOUR1 ON FOURNISSEUR(VILLE); Crée un index nommé PR-FOUR1 sur la colonne VILLE de la table FOURNISSEUR. |
Créer un index unique :CREATE UNIQUE INDEX PR-FOUR2 ON FOURNISSEUR(NOFOUR); Crée un index unique nommé PR-FOUR2 sur la colonne NOFOUR de la table FOURNISSEUR, NOFOUR est donc une clé primaire. |
Créer un index unique composé :CREATE UNIQUE INDEX PR-ASSOC1 ON ASSOCIATION(NOPCE,NOFOUR); Crée un index unique composé nommé PR-ASSOC1 sur les colonnes NOPCE et NOFOUR de la table ASSOCIATION, (NOPCE,NOFOUR) est donc une clé primaire. |
Détruire un index :DROP INDEX PR-FOUR1; Détruit l'index PR-FOUR1. |
Ajouter une colonne à une table :ALTER TABLE PIECES ADD NOM CHAR(20); Ajoute la colonne NOM, chaîne de 20 caractères, à la table PIECES. |
Nous allons maintenant passer à la manipulation des données proprement dite :
Sélectionner le nom de tous les fournisseurs qui vivent à Paris :SELECT NOM FROM FOURNISSEUR WHERE VILLE="PARIS"; |
Sélectionner toutes les villes où vivent les fournisseurs :SELECT DISTINCT VILLE FROM FOURNISSEUR; Le DISTINCT permet d'obtenir une liste qui ne contient qu'une fois chaque nom de ville. |
Trouver les noms de tous les fournisseurs qui vendent la pièce numéro 2 :SELECT NOM FROM FOURNISSEUR WHERE NOFOUR IN Le IN signifie inclus dans. Il existe une autre méthode appelée JOIN qui est nettement MOINS efficace n'en déplaise à Access. Pour comprendre les requêtes (ou query) imbriquées, il faut exécuter d'abord la requête entre parenthèses. |
Trouver les noms de tous les fournisseurs qui ne vendent pas la pièce numéro 1 :SELECT NOM FROM FOURNISSEUR WHERE 1 NOT IN FOURNISSEUR.NOFOUR veut dire le numéro de fournisseur de la table FOURNISSEUR. |
Différents opérateurs peuvent être utilisés := |
Différentes fonctions peuvent être utilisées :COUNT |
Mise à jour :UPDATE ASSOCIATION SET PRIX=30 WHERE NOPCE=5 AND NOFOUR="ZZ"; Dans la table ASSOCIATION pour tous les enregistrements dont le NOPCE=5 et NOFOUR=ZZ, la colonne PRIX sera mise à 30. |
Suppression :DELETE FOURNISSEUR WHERE NOFOUR="ZZ"; Dans la table FOURNISSEUR supprime l'enregistrement dont NOFOUR=ZZ, il faut s'assurer que ce fournisseur n'est pas utilisé dans la table ASSOCIATION. |
Création :INSERT INTO ASSOCIATION (NOPCE,NOFOUR,PRIX) VALUES(1,"KK",10); Crée dans la table ASSOCIATION un enregistrement en assignant des valeurs aux colonnes. |
Voilà qui termine le chapître consacré au SQL, des différences de syntaxe peuvent exister selon le gestionnaire de base de données que vous utilisez mais vous avez ici un aperçu des opérations les plus courantes.
6. Base de données objet.Première remarque : il existe sur le marché des bases de données qui intègrent de nouveaux types de données mais ce sont toujours des base de données relationnelles.
Deuxième remarque : nous ne ferons qu'effleurer le sujet, les bases de données relationnelles sont et resteront les base de données les plus importantes un bout de temps.
Une base de données objet c'est :
- Cacher l'implémentation (encapsuler) :
créer des classes composées de méthodes (publiques) et de données (membres privés ou protégés)
méthodes (constructeur, destructeur), opérateurs (redéfinition), réutilisation (héritage) - Définition de classes qui contiennent des données persistantes ou volatiles.
- Gestion des références vers les autres classes d'objets (contrairement aux bases de données relationnelles qui ne réfèrent pas vers les autres enregistrements)
- Difficilement scalable, indexable.
- Maîtriser les bases de donnés par Georges Gardarin - Eyrolles
Complet, illustré d'exemples, un chapître est consacré aux base de données objet. - Structured Systems Analysis : Tool and Technique par Gane & Sarson - McDonnell Douglas Information
En anglais, plus orienté sur l'analyse : entité-relation-attribut, normalisation...
Cet exposé n'a pas la prétention de remplacer un cours académique mais pourra éventuellement servir de départ à vos investigations.
Ce cours est une adaptation d'un de mes textes publié en 1998 sur Le Laurent Express, mis à jour le 4 mars 2002 sur phpzoom.com et remis en ligne le 17 janvier 2008 sur cybermonde.org.