Passer au contenu

Concevoir la trame de la base

Première étape fondamentale : vous allez créer les tables qui composent votre base, en définir chacun des champs, puis établir des relations entre ces tables.

Un peu de vocabulaire

Une base de données est comparable à des boîtes comportant des fiches en carton. Ces boîtes sont appelées des tables et les fiches, des enregistrements. Une base peut comporter plusieurs tables. Chaque fiche est composée d’un certain nombre d’informations. Ainsi, un fichier de clients comportera, sur chaque fiche, un nom, un prénom, une adresse… Ces informations sont appelées des champs. Notez qu’à l’intérieur d’une boîte, toutes les fiches ont nécessairement la même structure. Ainsi, il ne peut pas exister, par exemple, un champ Telephone sur une fiche et à la place, un champ Mail sur une autre. Vous êtes obligé, dans ce cas, de définir, sur toutes les fiches, un champ Telephone ET un champ Mail. Peu importe si tous les champs ne sont pas systématiquement complétés. Les champs peuvent donc être de différents types : il peut s’agir de textes (nom, prénom), de nombres (numéro de téléphone, montant…), d’une date…

Un exemple pour bien comprendre

Supposons que vous deviez administrer les réservations de l’Hôtel du Nord. Cet hôtel imaginaire comporte une cinquantaine de chambres. Pour pouvoir être repérée sans équivoque, chaque chambre est évidemment dotée d’un numéro. Certaines comportent des baignoires, les autres des douches. Un tarif de base par nuitée est défini pour chaque chambre. Lors d’une réservation, vous devez noter les coordonnées du client (nom, prénom, adresse, téléphone). Vous devez également lui affecter une chambre pour les différentes nuits qu’il a choisies.Afin d’éviter toute contestation, vous noterez aussi, pour chaque nuit réservée, le tarif que vous avez effectivement pratiqué (en fonction de l’offre et de la demande, ce tarif n’étant pas forcément le même que le tarif de base).

Organisez votre base

Créer une base consiste, en premier lieu, à définir les tables et les champs associés. Cela peut souvent se faire de plusieurs manières. Dans notre exemple, nous pourrions regrouper toutes les informations dans une seule table : chaque enregistrement comporterait, par exemple, le nom du client, son prénom, son adresse, son téléphone, la date de début et de fin de séjour, le numéro de la chambre, le tarif de base et le tarif pratiqué, et si la chambre comporte une baignoire ou non. Mais à y regarder de plus près, une telle disposition accumule les inconvénients. En effet, elle héberge plusieurs fois les mêmes informations. Ainsi, comme M. Cornac et Mme Albrin réservent tous deux la chambre 21, vous devrez indiquer, dans les deux cas, que celle-ci comporte une baignoire et que son tarif de base est de 85 euros. De même, si M. Cornac réserve plusieurs chambres, vous devrez saisir plusieurs fois son adresse, son téléphone… Dupliquer ainsi l’information entraîne non seulement une lourdeur technique (la base prend plus d’espace disque et se montre moins performante), mais également “ physique ” pour l’utilisateur, puisqu’elle l’oblige à faire plusieurs fois les mêmes saisies, ce qui augmente les risques d’erreurs. La règle principale lors de la création d’une base est donc d’éviter toute redondance d’information, en créant autant de tables que nécessaire.

Découpez l’information en tables

Pour respecter ce principe, nous allons donc créer trois tables : une table Chambres, une table Clients et une table Réservations. La table Chambres regroupera simplement la liste des chambres de l’hôtel, le tarif de base, et l’équipement (baignoire ou pas). Cette table sera quasiment figée (elle ne changera que quand l’hôtel effectuera des travaux d’amélioration ou des ajustements tarifaires). La table Clients aura les champs : Nom, prénom, adresse, téléphone. La seconde règle pour bien définir une table est de s’assurer qu’un (ou parfois plusieurs) champ permet d’identifier de manière unique un enregistrement. Ainsi, dans la table Chambres, vous ne pourrez pas définir deux chambres ayant le même numéro. En revanche, rien n’interdit plusieurs de vos clients de porter le même nom. Pour cette raison, on définit, dans la table Clients, un Identifiant Client (IDClient), qui sera généré arbitrairement et automatiquement par le système.Enfin, une troisième table représentera les Réservations, chacune pouvant être définie comme l’association d’une chambre à un client donné, pour une nuit (date) spécifiée. Bien entendu, une chambre ne peut être réservée par deux clients simultanément pour une même nuit.

Créez une nouvelle base…

Il est temps de passer à la pratique ! Lancez OpenOffice Base. L’assistant d’ouverture et de création se lance automatiquement. Sélectionnez Créer une base de données et cliquez sur Suivant. Choisissez l’option Non, je ne souhaite pas que la base de données soit référencée (vous pourrez toujours le faire ensuite si vous avez besoin d’y accéder depuis le tableur Calc) puis cliquez sur Terminer : vous êtes alors invité à choisir le nom du fichier dans lequel sera enregistrée la base : saisissez HotelDuNord.odb et validez par Enregistrer.

… puis la table Chambres

Créer une table consiste essentiellement à définir la liste des champs de celle-ci, en précisant systématiquement leur type. Il est important de définir correctement le type de chaque champ, car en fonction de celui-ci, les possibilités de tri ou de recherche seront différentes. Ainsi, un champ Texte permet de stocker, par exemple, des noms, que vous pourrez trier par ordre alphabétique. Le nombre maximal de caractères que pourra contenir ce champ doit être précisé. Un champ Numérique peut, au choix, être de type Entier (Integer) ou Décimal. D’autres types courants sont les modèles Date, Heure ou Date/Heure (qui permet d’enregistrer une date ET une heure), ou encore le type Booléen (dont les deux seules valeurs possibles sont Oui ou Non). Cliquez, dans la zone Tâches, sur le lien Créer une table en mode Ébauche.

Définissez les champs

La partie supérieure de la fenêtre du mode Ébauche permet de définir le nom et le type de chaque champ (la description est un commentaire optionnel), la partie inférieure est réservée aux propriétés du champ sélectionné. Saisissez dans la première ligne vide, pour la colonne Nom de champ : Numero. Notez que les noms de champs ne doivent pas comporter d’espace, ni de ponctuation. Nous vous conseillons de ne pas utiliser d’accents afin d’éviter des soucis en cas de changement de système d’exploitation. Sélectionnez dans la liste déroulante Type de champ : Integer [INTEGER]. À la seconde ligne, saisissez comme Nom de champ : Tarif et comme Type de champ : Décimal [DECIMAL]. Précisez dans la zone Propriétés du champ : Décimales : 2. Enfin, à la troisième ligne, saisissez Baignoire dont le type est Oui/Non [BOOLEAN].

Déterminez une clé primaire

Rappelez-vous : la table Chambres ne doit jamais contenir deux enregistrements ayant le même numéro de chambre (autrement dit, chaque numéro doit être unique). Pour cela, il faut définir, pour la table Chambre, une Clé primaire sur le champ Numéro.Une clé primaire doit systématiquement être définie pour chaque table afin de respecter la non-duplication des données, vue à l’étape 03. Cliquez tout à gauche de la première ligne (Numero), dans la case grise : la ligne est sélectionnée et la flèche verte se déplace. Faites un clic droit sur cette flèche et choisissez la commande Clé primaire. Une petite clé apparaît à droite de la flèche verte. Enfin, cliquez sur l’icône Enregistrer. Nommez la table Chambres et validez par OK. Vous pouvez fermer la fenêtre Ébauche. Base se chargera de renseigner automatiquement la clé primaire.

Ajoutez la table clients

Créez une nouvelle table en mode Ébauche. Le premier champ, que vous appellerez IDClient, est le numéro permettant d’identifier le client. Il est de type Integer [INTEGER]. Ce numéro doit s’incrémenter automatiquement à chaque nouveau client : dans les propriétés, choisissez AutoValeur : Oui, ce qui indique à Base qu’il doit affecter la clé primaire à ce champ. Les autres champs sont Nom, Prenom, Adresse et Telephone, tous quatre de type Texte [VARCHAR] (la taille sera limitée par défaut à 50 caractères). Pour que l’utilisateur de la base soit contraint de saisir systématiquement ces informations, choisissez l’option Saisie requise : Oui pour les quatre champs. Enfin, enregistrez la table sous le nom Clients et refermez la fenêtre Ébauche de table.

Créez la table réservations

Élaborez de même la troisième table : les champs sont respectivement Nuit de type Date [DATE], Numero de type Integer [INTEGER], IDClient de type Integer [INTEGER] (précisez Saisie requise : Oui), et Prix de type Décimal [DECIMAL] (précisez Saisie requise : Oui et Décimales : 2). Il ne peut y avoir qu’un Numero de chambre affecté à une Nuit donnée. Nous allons donc former la clé primaire avec les deux champs Nuit ET Numero. Pour y parvenir, cliquez sur la case grise située à gauche de Nuit. Maintenez la touche Majuscule appuyée puis cliquez sur la case grise de la seconde ligne. Les deux lignes sont sélectionnées. Faites un clic droit de la souris sur la flèche verte et choisissez la commande Clé primaire. Une clé apparaît au niveau des deux premières lignes. Enregistrez la table Reservations et refermez la fenêtre Ébauche.

Définissez des relations entre tables

C’est maintenant que l’intérêt du découpage en tables de la base de données va apparaître. En effet, lors de l’utilisation de la base, pour réserver une chambre, il faut éviter de définir, dans la table Reservations, un numéro de chambre qui n’existe pas, autrement dit qui ne figure pas dans la table Chambres. Pour cela, vous allez établir un lien entre le champ Numero de la table Reservations et le champ Numero de la table Chambres. De même, vous établirez un lien entre le champ IDClient de la table Reservation et le champ éponyme de la table Clients. D’une manière plus générale, ces liens, appelés relations, permettent de définir les contraintes entre les tables. Vous allez d’abord choisir les trois tables entre lesquelles il faut poser des relations. Déroulez le menu Outils, Relations. Sélectionnez Chambres, cliquez sur Ajouter, sélectionnez Clients, cliquez sur Ajouter, sélectionnez Reservations, cliquez sur Ajouter et enfin Fermer. Cliquez, dans la table Chambres, sur Numero et faites-le glisser sur le champ Numero de la table Reservations. La fenêtre Relations apparaît : cochez les cases Mise à jour cascade et Supprimer la cascade.

Utilisez les mises à jour en cascade

Dès lors, chaque modification sur la table Chambre sera reportée automatiquement dans la table Reservations. Ainsi, si, dans la table Chambre, vous renumérotez la chambre 13 en 113, toutes les réservations de la chambre 13 deviendront des réservations de la chambre 113. Validez par OK. Une ligne relie désormais les deux tables. Le chiffre 1 s’affiche à l’extrémité près de la table Chambres, alors que “ n ” s’affiche près de la table Reservations. Cela signifie qu’une relation “ 1 à plusieurs ” a été créée. Un enregistrement de la table Chambres peut désormais correspondre à plusieurs enregistrements de la table Reservations. Autrement dit, une chambre peut être reliée à plusieurs réservations. Procédez de même en glissant le champ IDClient de la table Clients vers IDClient de la table Reservations et en cochant Mise à jour cascade et Supprimer la cascade dans la fenêtre Relations. Enfin, cliquez sur Enregistrer et fermez la fenêtre Ébauche.

🔴 Pour ne manquer aucune actualité de 01net, suivez-nous sur Google Actualités et WhatsApp.


Stéphane Darget