SGBD – MS Access.

Les systèmes de Gestion de Bases de Données

La base de données

Une base de données est un ensemble structuré de données enregistrées sur des supports accessibles par l'ordinateur. Elle doit satisfaire simultanément plusieurs utilisateurs de façon sélective et en un temps opportun. Elle doit avoir un certain nombre de caractéristiques :

Données structurées : les informations contenues dans une base de données sont réparties en enregistrements , chaque enregistrement ayant une structure bien définie.

Données non redondantes : Une même information ne sera pas répétée plusieurs fois dans la base de données.

Données cohérentes : Il ne doit pas être permis d'enregistrer dans une même base des informations incohérentes entre elles.

Données accessibles directement selon de multiples critères.

Indépendance des programmes et des données : La base de données doit être indépendante des programmes qui y ont accès. On doit pouvoir utiliser un programme pour traiter les données sans avoir à les modifier.

Sécurité des données stockées : la base de données doit permettre un système de sécurité permettant de gérer les droits d'accès aux informations par les utilisateurs.

Le Système de Gestion de Bases de Données

Un Système de Gestion de Bases de Données (S.G.B.D.) représente un ensemble coordonné de logiciels qui permet de décrire, manipuler, traiter les ensembles de données formant la base. Il doit également assurer la sécurité et la confidentialité des données dans un environnement où de nombreux utilisateurs ayant des besoins variés peuvent interagir simultanément sur ces données. Il doit pouvoir être utilisé par des non-informaticiens. Il doit assurer la définition des structures de stockage et des structures de données et le suivi de leur évolutions; c'est ce qu'on appelle l'administration des données. Il doit pouvoir vérifier la cohérence des données.

Le SGBD sert donc d'interface entre les programmes d'application des utilisateurs d'une part, et la base de données d'autre part. Microsoft Access est un SGBD dont nous allons étudier le fonctionnement.

L'organisation des données dans la base de donnés

Avant de pouvoir exploiter les données contenues dans la base, il va falloir les modéliser. Modéliser signifie trouver le meilleur moyen de représenter le monde réel en structurant la base de données de manière à pouvoir l'exploiter la plus simplement par la suite.

L'organisation des données dans un SGBD

Dans les SGBD, les informations doivent être segmentées en données qui sont stockées dans des tables. Une table est donc un ensemble de données, organisées en lignes et en colonnes. On peut stocker dans une table n'importe quel type d'information (texte, chiffres, images, son, fichiers, etc...) Chaque table est divisée en enregistrements, les enregistrements étant l'ensemble des données relatives à la même information.

Prenons l'exemple d'un carnet d'adresses. Pour ce carnet d'adresses, nous allons utiliser une table « contacts » qui contiendra toutes les informations concernant chaque contact, chaque enregistrement contiendra les informations relatives à un (et un seul) contact (nom, adresse, téléphone, date de naissance, etc....). Comme on vient de le voir, chaque enregistrement contient un ensemble d'informations (nom, adresse, téléphone) qui ont elles-même diviser l'enregistrement en plusieurs parties, chaque partie s'appelle un champ. Le champ contient une partie des informations de chaque enregistrement.

Organisation d'une base de données

Si on reprend notre exemple de carnet d'adresse, nous allons avoir une table qui peut ressembler à ça :

Quelques définitions :

La base de données : C'est l'ensemble des tables utilisées pour gérer l'information

La table : c'est un ensemble de données organisées en rangées et en colonnes

Le champ (ou colonne): C'est l'unité d'information dans une table. Une table est constituée de différents champs

L'enregistrement (ou la ligne): C'est l'ensemble des données relatif à la même information (le 1er enregistrement de la table contient les informations relatives au contact « John Deuf »)

Diviser pour mieux régner

Il faut toujours segmenter l'information en éléments les plus petits possibles. On aurait très bien pu créer une table contact avec un seul champ par enregistrement qui contiendrait toutes les informations en même temps. Mais une des règles d'or dans la création de la structure d'une base de données est de diviser le plus possible l'information pour pouvoir la traiter par la suite le plus simplement et le plus efficacement possible.

Le SGBD, pour retrouver les données qu'on lui demande, travaille avec le contenu des champs, il lui sera donc difficile, dans la table « Contacts » telle qu'elle est de retrouver les contacts habitant à Lille, la ville se trouvant mélangée au reste de l'adresse, de même, on ne pourra pas récupérer le nom seul de chaque contact, celui-ci se trouvant dans le même champ que le prénom. Comme on ne peut pas toujours prévoir, lors de la création de la structure de la table, de l'usage qui en sera fait plus tard, il faut diviser le plus possible les données, sachant qu'il sera toujours compliqué (et risqué) de modifier la structure de la table par la suite lorsqu'elle sera remplie.

Une meilleure organisation de la table serait la suivante :

L'organisation de la table est optimale, elle est décomposée en éléments aussi petits que possible, la ville est clairement séparée de l'adresse et le nom du prénom.

Utiliser plusieurs tables

Prenons l'exemple de la gestion d'une collection de disques. On pourrait être tenté de créer une seule table contenant les informations suivantes :

Et nous n'aurions pas spécialement tort, toutes les informations relatives à un album s'y trouvent. Pourquoi faire plus compliqué ? Néanmoins, nous allons voir qu'il est plus judicieux de créer ici deux tables :

Pourquoi ?

On va regrouper ensemble dans une même table toutes les informations relatives au même « sujet ». On voit bien ici qu'on peut regrouper ensemble les données concernant uniquement l'identité de l'auteur et, dans une autre table, les informations relatives uniquement à l'album (par exemple, l'année de sortie d'un album n'a pas de rapport direct avec l'identité de l'auteur, on la trouvera dans une autre table).

Un bon moyen pour trouver les tables utilisées est de partir de la situation existante : Un auteur fait des albums, a un auteur peut correspondre plusieurs albums On en déduit directement une table « auteurs » et une table « albums ». Ce qui, au passage, nous permet d'enrichir les informations sur les auteurs, on peut en profiter pour par exemple ajouter la date de naissance ou son adresse, ce qui aurait été pénible dans la 1ère version, en effet, il aurait fallu, pour chaque album d'un auteur, ressaisir à chaque coup sa date de naissance et son adresse (sans compter les erreurs de frappe d'un album à l'autre), là les informations ne sont saisies qu'une fois, ce qui est d'abord moins fatiguant (et ça, c'est le plus important) et ensuite, évite les fautes de frappes.

Bon, c'est bien, maintenant on a deux tables, mais du coup, on ne sait plus qui a fait quoi, les informations sont éparpillées. Il va donc falloir trouver un moyen pour savoir exactement à quel auteur correspond chaque album. Pour cela on va ajouter dans la table auteur un champ qui va identifier de façon unique chaque enregistrement, ce champ d'identification unique est appelé clef primaire.

Clef primaire

A quoi sert cette clef ? A pouvoir retrouver de façon non équivoque n'importe quel enregistrement dans la table « Auteurs », on ne peut en effet utiliser le nom ou le prénom comme clef primaire car deux auteurs peuvent avoir le même nom (rare mais pas impossible).

Le numéro de sécurité sociale est un bon exemple de champ clef primaire car il identifie de manière unique un individu. Même si deux individus ont le même nom et le même prénom, ils ne peuvent avoir le même numéro de sécurité sociale.

La table « Auteurs » ressemble alors à ceci (la clef primaire est en gras)

Et pour pouvoir associer un album à un auteur, il va falloir ajouter un champ dans la table « Albums », ce champ contient le n° de l'auteur de l'album

On voit ici que cette organisation répond à une des exigences des bases de données, à savoir la non redondance des informations, dans la première organisation, le nom et le prénom de l'auteur étaient répétés autant de fois qu'ils avait fait d'albums, ici il ne sera présent qu'une seule fois. Lorsqu'on voudra afficher les caractéristiques d'un album, le SGBD, grâce au numéro de l'auteur présent dans l'enregistrement de la table « Albums » ira chercher automatiquement les informations le concernant dans la table « Auteurs ». Cette organisation a un énorme avantage, le jour ou on veut modifier le nom ou le prénom d'un auteur, cette modification sera répercutée automatiquement sur les albums qu'il aura fait.

Grâce a cette clef, on va pouvoir mettre les deux tables en relation. Établir une relation entre les tables de la base de données va permettre de réunir (pour les exploiter ensemble, les analyser, ... ) les informations réparties dans différentes tables. La liaison se fait entre les tables à partir de la clef primaire, ici, on obtiendra la liste des albums d'un auteur grâce à la liaison entre la table Auteur et la table Album sur la clef primaire n° auteur.

Il existe trois types de relations entre les tables

La relation de type « un à plusieurs » (1 ­ n)

Un enregistrement d'une table est en relation avec plusieurs enregistrements d'une autre table.

Exemple : à un auteur correspond un ou plusieurs albums (plusieurs flèches partent du même auteur), a chaque album ne correspond qu'un seul auteur.

La relation entre les deux tables se présente sous cette forme :

La relation « plusieurs à plusieurs » ( n ­ m )

Un enregistrement de la table primaire peut être en relation avec plusieurs enregistrements de la table reliée et inversement, un enregistrement de la table reliée peut être en relation avec plusieurs enregistrements de la table primaire. Pour gérer ce type de relation, il faut la scinder en deux relations : une relation « un ­ plusieurs » et une relation « plusieurs ­ un ».

Exemple : On aurait pu avoir le cas où un album a plusieurs auteurs, là, ça ne marche plus, car telle que la table « Albums » est structurée, à un album ne peut correspondre qu'un auteur. Si on veut permettre qu'à un album correspondent plusieurs auteurs (on a alors une relation n ­ m), deux solutions s'offrent à nous :

Solution simple mais déconseillée.

La plus simple et la plus inélégante (les trucs les plus simples sont souvent inélégants) : ajouter quelques champs « auteurs » supplémentaires dans la table album pour arriver à quelque chose de ce genre, histoire de conserver une relation 1 ­ n :

Ce genre de plaisanterie est à éviter à tout prix, en effet, si il n'y a qu'un seul auteur, les champs n° auteur 2 et n° auteur 3 ne vont rien contenir, et on va perdre de la place dans la base de données, et que va-t-il se passer si il y a quatre auteurs ? ? vous répondrez qu'on peut prévoir quatre champs, ce à quoi je vous répondrez qu'il peut y avoir 5 auteurs, etc...

Solution élégante et conseillée

Il va donc falloir (on y coupera pas) créer une troisième table qui va servir d'intermédiaire entre la table « auteurs » et la table « albums « :

Quelles sont les modifications ? Nous sommes bien d'accord qu'avec un seul numéro d'auteur dans la table « albums » nous ne pouvions pas avoir plusieurs auteurs pour le même album. La solution 1 étant à proscrire (sauf dans le cas où on était sûr qu'il y aurait toujours 3 et seulement 3 auteurs), la troisième table est la seule solution.

Comment ? et bien, à chaque album correspond n enregistrements dans la nouvelle table « Auteurs-albums », chaque enregistrement renvoyant sur un seul enregistrement de la table « auteurs ». Votre esprit curieux aura noté qu'on a, pour les besoins de la création de cette nouvelle table, crée une clef primaire dans la table « albums ».

Pourquoi ? Pour faire correspondre un enregistrement de la table « Auteurs-albums » avec la table « Albums », il faut le faire sur la clef primaire, et comme on n'avait pas de clef primaire dans « Albums », il a bien fallu en créer une. Aucun des champs présents ne pouvait être utilisé comme clef primaire (la clef primaire, je le répète, doit identifier de façon UNIQUE un enregistrement) : deux albums peuvent avoir le même titre (rare mais pas impossible), peuvent être sortis la même année, être du même genre, etc...

Par exemple, on va avoir dans ces tables

Auteurs

Albums

Auteurs-Albums

Avec cette méthode, on peut affecter sans aucun problème n auteurs à m albums. (ici Sheryl Crow a deux albums, KS' Choice un seul, et l'album Top NAZ Compil a deux auteurs que je ne citerai pas)

La relation « un à un » (1-1)

Enfin, il existe un troisième type de relation, jamais utilisé : la relation de type «un ­ un » : un enregistrement d'une table est en relation avec un seul enregistrement d'une autre table et inversement. Ce type de relation ne doit pas se produire car les données de la table reliée n'ont aucune raison de se trouver là, comme elles ne correspondent qu'à un seule enregistrement de la 1ère table, elles devraient être déplacées dans cette table.

Améliorations

On peut encore améliorer le schéma de nos tables. En effet, pour la même raison qui nous avait fait séparer en deux tables « Albums » et « Auteurs » notre table de départ pour éviter à avoir a ressaisir les informations concernant un même auteur pour chacun de ses albums, il est ici possible d'effectuer à nouveau une division de la table « Albums ». En effet, pour chaque album, on va indiquer le genre (rock, pop, reggae, rap etc...) et le support (CD, vinyl, K7, DAT, minidisc, etc...), ces informations vont être redondantes et pourraient être optimisées de la façon suivante :

On crée une table « genre » et une table « support »

On modifie la table « albums »

Maintenant, au lieu d'indiquer explicitement pour chaque album son support et son genre, on indiquera un n° de genre et un n° de support. L'intérêt est triple :

Gain de place en mémoire (stocker un numéro prend moins de place que stocker une chaîne de caractères)

Gain de vitesse (entrer un numéro est plus rapide que taper le mot complet)

Optimisation de la structure (on pourra changer le nom d'un support, ce changement affectera instantanément l'ensemble des albums).

Les index

Pour optimiser les temps de recherche dans les tables, tous les SGBD ont besoin d'index. L'index permet au système de retrouver plus rapidement les enregistrements concernés ; il accélère aussi les opérations de tri. Comment ? Les index fonctionnent avec une table comme la table des matières avec un livre. Lorsqu'on indexe un champ, le SGBD stocke hors de la table les valeurs de ce champ. Lorsqu'on effectue une recherche sur ce champ, plutôt que de le chercher dans la table, le SGBD va faire sa recherche dans l'index, une fois qu'il aura trouvé, il affichera le contenu de l'enregistrement associé à cet index.

Supposons que la table « Albums » soit indexée sur le titre de l'album

Lorsqu'on cherchera un enregistrement de la table albums à partir du titre de l'album, le SGBD parcourra l'index et affichera l'enregistrement correspondant à l'index qu'il aura trouvé. Un index peut être composé d'un ou de plusieurs champs, on aurait pu indexer la table albums sur un index « titre + année » par exemple (si ça peut servir à quelque chose), de même, on peut utiliser plusieurs index pour une table, par exemple, on aurait pu indexer la table album sur les champs Titre, Genre et Support. Pourquoi alors ne pas tout indexer ? L'idée peut sembler bonne, cela accélérerait les recherches et les tris mais ralentirait toutes les mises à jour de la table, en effet, à chaque fois qu'un champ index est modifié dans la table, il faut le modifier également dans l'index, ce qui peut coûter très cher en temps. On utilisera donc les index avec parcimonie et uniquement si ils s'avèrent utiles.

Applications

Premier exemple : gestion de magasin

Supposons qu'on veuille gérer un magasin avec un SGBD. Créez donc les tables et les relations pour notre magasin, au cas où certains ignoreraient le fonctionnement d'un magasin, voici comment ça marche :

Un client commande des produits

Un fournisseur livre des produits

Le stock contient des produits

Voilà une solution qui semble correcte : (Les clefs primaires sont en gras, les indexes sont soulignés) Le choix des index est totalement subjectif, il sera surtout fait en fonction des besoins ultérieurs. Ce n'est pas grave si on n'a pas choisi les bons index, il est toujours possible de les modifier ultérieurement.

Une table « clients »

Une table « produits »

Une table « Commandes » qui va indiquer ce qu'a commandé le client

On est d'accord, une commande peut avoir plusieurs lignes (plus d'un produit commandé par commande, ça vaut mieux), pour cela, on va avoir une table « lignes de commande » qui va « relier» la commande aux produits.

Pourquoi n'avoir pas mis ça directement dans la table commande ? on retombe sur notre problème de tout à l'heure : parce qu'on ne sait pas par avance le nombre de lignes qu'on peut avoir dans une commande. Un produit peut se retrouver dans n commandes, et une commande peut faire référence à m articles, on a donc entre les tables «commandes » et «articles », une relation n ­ m (plusieurs à plusieurs) que les SGBD ne peuvent pas gérer, il faut donc transformer cette relation en deux autres relations 1-n et n-1 en utilisant une table supplémentaire, d'où l'apparition de cette table.

Pour les fournisseurs, on a quelque chose de très ressemblant

Une table « fournisseurs »

Même problème que précédemment, un fournisseur peut livrer plusieurs produits et le même produit peut être livré par plusieurs fournisseur, donc relation n-m, donc création d'une table intermédiaire

Et voilà le travail d'artiste, les relations entre tout ce beau monde donnent ceci

On aurait pu dire qu'un produit pouvait être livré par un seul fournisseur, dans ce cas, la table intermédiaire « Fournisseurs-Produits » aurait été inutile, pour savoir quel était le fournisseur d'un produit, il suffisait d'ajouter un champ « n° fournisseur » dans la table produit. Il aurait contenu, pour chaque produit, le n° de fournisseur le livrant.

Deuxième exemple : Gestion de la scolarité.

On veut modéliser le problème d'une partie de la gestion de la scolarité d'un établissement. On donne les règles suivantes :

Les enseignements sont dispensés sous forme de cours

Un étudiant peut s'inscrire à plusieurs cours

Un enseignant est rattaché à un ou plusieurs établissements et peut enseigner plusieurs cours

Un cours peut être enseigné par plusieurs enseignants

Certains enseignants peuvent être responsables des autres

A vous de jouer... Donnez les différentes tables qui vont être utilisées et les relations entre elles (on s'intéresse pas spécialement au contenu exact des tables)

Les tables qui vont être utilisées sont :

Les relations vont être :

Table des matières

I) Les systèmes de Gestion de Bases de Données	1

I.A) La base de données	1

I.B) Le Système de Gestion de Bases de Données	1

II) L'organisation des données dans la base de donnés	2

II.A) L'organisation des données dans un SGBD	2

II.B) Diviser pour mieux régner	3

II.C) Utiliser plusieurs tables	3

II.C.1) Pourquoi ?	4

II.C.2) Clef primaire	4

II.D) Il existe trois types de relations entre les tables	5

II.D.1) La relation de type « un à plusieurs » (1 ­ n)	5

II.D.2) La relation « plusieurs à plusieurs » ( n ­ m )	5

II.D.2.a) Solution simple mais déconseillée.	6

II.D.2.b) Solution élégante et conseillée	6

II.D.3) La relation « un à un » (1-1)	7

II.E) Améliorations	7

II.F) Les index	8

III) Applications	8

III.A) Premier exemple : gestion de magasin	8

III.B) Deuxième exemple : Gestion de la scolarité.	10

Sources

http://enseignement.insset.u-picardie.fr/deug/ti/cours/access/

IUT Digne les bains	Section Géomatique	SGBD - Access

P. AUSSAGUEL	Version du 09/10/2003 - cours_Access.sxw	Page 9

Pierre AUSSAGUEL

2003-09-24T09:10:26