4.4 : Conception d'une base de données
- Page ID
- 167148
Conception d'une base de
Supposons qu'une université souhaite créer une base de données pour suivre la participation aux clubs étudiants. Après avoir interrogé plusieurs personnes, l'équipe de conception apprend que la mise en œuvre du système permet de mieux comprendre comment l'université finance les clubs. Cela se fera en suivant le nombre de membres de chaque club et le niveau d'activité des clubs. L'équipe décide que le système doit suivre les clubs, leurs membres et leurs événements. À l'aide de ces informations, l'équipe de conception détermine que les tables suivantes doivent être créées :
- Clubs : cela permettra de suivre le nom du club, le président du club et une brève description du club.
- Étudiants : nom de l'étudiant, e-mail et année de naissance.
- Adhésions : ce tableau mettra en corrélation les étudiants avec les clubs, ce qui nous permettra de faire adhérer un étudiant à plusieurs clubs.
- Événements : ce tableau indiquera la date à laquelle les clubs se réunissent et le nombre d'étudiants qui se sont présentés.
Maintenant que l'équipe de conception a déterminé les tables à créer, elle doit définir les informations spécifiques que chaque table contiendra. Cela nécessite d'identifier les champs qui figureront dans chaque table. Par exemple, le nom du club serait l'un des champs du tableau des clubs. Le prénom et le nom de famille seraient des champs dans la table des étudiants. Enfin, comme il s'agira d'une base de données relationnelle, chaque table doit avoir un champ en commun avec au moins une autre table (en d'autres termes : elles doivent avoir une relation entre elles).
Pour créer correctement cette relation, une clé primaire doit être sélectionnée pour chaque table. Cette clé est un identifiant unique pour chaque enregistrement de la table. Par exemple, dans le tableau Étudiants, il peut être possible d'utiliser les prénoms des étudiants pour les identifier de manière unique. Cependant, il est plus que probable que certains étudiants partagent le même nom de famille (comme Mike, Stefanie ou Chris), donc un champ différent doit être sélectionné. L'adresse e-mail d'un étudiant peut être un bon choix pour une clé primaire, car les adresses e-mail sont uniques. Cependant, comme une clé primaire ne peut pas changer, cela signifierait que si les étudiants modifiaient leur adresse e-mail, nous devrions les supprimer de la base de données, puis les réinsérer, ce qui n'est pas une proposition intéressante. Notre solution consiste à créer une valeur pour chaque étudiant, un identifiant utilisateur, qui servira de clé primaire. Nous le ferons également pour chacun des clubs étudiants. Cette solution est assez courante et c'est la raison pour laquelle vous avez autant de noms d'utilisateur !
Vous pouvez voir la conception finale de la base de données dans la figure ci-dessous :
Grâce à cette conception, nous avons non seulement un moyen d'organiser toutes les informations dont nous avons besoin pour répondre aux exigences, mais nous avons également réussi à relier tous les tableaux entre eux. Voici à quoi peuvent ressembler les tables de base de données avec certains exemples de données. Notez que le tableau des adhésions a pour seul but de nous permettre de relier plusieurs étudiants à plusieurs clubs.
Normalisation
Lors de la conception d'une base de données, un concept important à comprendre est celui de la normalisation. En termes simples, normaliser une base de données signifie la concevoir de manière à :
- Réduit la redondance des données entre les tables et facilite la cartographie
- Supprime les données incohérentes.
- Les informations sont stockées à un seul endroit.
- Donne à la table autant de flexibilité que possible.
Lors de la conception de la base de données des clubs étudiants, l'équipe de conception a travaillé pour atteindre ces objectifs. Par exemple, pour suivre les adhésions, une solution simple aurait pu consister à créer un champ Membres dans le tableau des clubs, puis à répertorier les noms de tous les membres. Cependant, cette conception signifierait que si un étudiant rejoignait deux clubs, ses informations devraient être saisies une deuxième fois. Les concepteurs ont plutôt résolu ce problème en utilisant deux tableaux : Étudiants et Adhésions.
Dans cette conception, lorsqu'un étudiant rejoint son premier club, nous devons l'ajouter au tableau des étudiants, où son prénom, son nom de famille, son adresse e-mail et son année de naissance sont saisis. Cet ajout au tableau des étudiants générera un identifiant d'étudiant. Nous allons maintenant ajouter une nouvelle entrée pour indiquer que l'étudiant est un membre spécifique du club. Pour ce faire, ajoutez un enregistrement avec l'identifiant de l'étudiant et l'identifiant du club dans le tableau des adhésions. Si cet étudiant rejoint un deuxième club, nous n'avons pas à dupliquer le nom, l'adresse e-mail et l'année de naissance de l'étudiant ; il suffit de saisir à nouveau dans le tableau des adhésions l'identifiant du deuxième club et l'identifiant de l'étudiant.
La conception de la base de données des clubs étudiants permet également de modifier facilement la conception sans modifications majeures de la structure existante. Par exemple, si l'équipe de conception était invitée à ajouter une fonctionnalité au système pour suivre les conseillers pédagogiques des clubs, nous pourrions facilement y parvenir en ajoutant une table des conseillers pédagogiques (similaire à la table des étudiants), puis en ajoutant un nouveau champ à la table Clubs pour contenir l'identifiant du conseiller pédagogique.
Types de données
Lors de la définition des champs d'une table de base de données, nous devons attribuer à chaque champ un type de données. Par exemple, le champ Année de naissance est une année, il s'agira donc d'un chiffre, tandis que le prénom sera du texte. La plupart des bases de données modernes permettent de stocker différents types de données. Certains des types de données les plus courants sont répertoriés ici :
- Texte : pour stocker des données non numériques brèves, généralement inférieures à 256 caractères. Le concepteur de la base de données peut identifier la longueur maximale du texte.
- Numéro : pour stocker des numéros. Différents types de nombres sont généralement sélectionnés, en fonction de la taille du plus grand nombre.
- Oui/Non : forme spéciale du type de données numérique d'une longueur (généralement) d'un octet, avec un 0 pour « Non » ou « Faux » et un 1 pour « Oui » ou « Vrai ».
- Date/Heure : un formulaire spécial du type de données numérique peut être interprété comme un nombre ou une heure.
- Devise : forme spéciale du type de données numériques qui met en forme toutes les valeurs à l'aide d'un indicateur de devise et de deux décimales.
- Texte du paragraphe : ce type de données autorise le texte de plus de 256 caractères.
- Objet : ce type de données permet de stocker des données qui ne peuvent pas être saisies via des claviers, telles qu'une image ou un fichier musical.
L'importance de définir correctement le type de données est d'améliorer l'intégrité des données et l'emplacement de stockage approprié. Nous devons définir correctement le type de données d'un champ, et un type de données indique à la base de données quelles fonctions peuvent être exécutées avec les données. Par exemple, si nous voulons exécuter des fonctions mathématiques avec l'un des champs, nous devons indiquer à la base de données que le champ est un type de données numérique. Donc, si nous avons un champ stockant l'année de naissance, nous pouvons soustraire le nombre stocké dans ce champ de l'année en cours pour obtenir l'âge.
L'allocation d'espace de stockage pour les données définies doit également être identifiée. Par exemple, si le champ Prénom est défini comme un type de données texte (50), cinquante caractères sont alloués à chaque prénom que nous voulons stocker. Toutefois, même si le prénom ne comporte que cinq caractères, cinquante caractères (octets) seront alloués. Bien que cela puisse sembler peu important, si notre table finit par contenir 50 000 noms, nous allouons 50 x 50 000 = 2 500 000 octets pour le stockage de ces valeurs. Il peut être prudent de réduire la taille du champ afin de ne pas gaspiller d'espace de stockage.