|
||||||||||||||||||||||||||||||||||||||||||||||
|
Avant de créer votre propre base de données et de commencer la saisie de données, vous devez vous familiariser avec certaines notions de base de MUIbase. Projets Un projet MUIbase se compose de tous les éléments dont vous avez besoin pour gérer vos données. Cela va de l'interface graphique aux programmes écrits pour le projet en passant par la saisie des données. Un projet peut être chargé, sauvegardé ou effacé du disque. Toute modification d'un projet n'est effectuée qu'en mémoire. Vous pouvez revenir à tout moment à l'état de la dernière sauvegarde en rechargeant le projet. MUIbase est capable de gérer de multiples projets en parallèle. Ainsi il n'est pas nécessaire de démarrer MUIbase une deuxième fois pour charger un autre projet. De plus, plusieurs instances de MUIbase peuvent accéder à un même projet. Plusieurs instances peuvent lire un projet mais une seule peut le modifier. Ceci devrait fonctionner au travers d'un réseau lorsque le projet est disponible sur un lecteur partagé. Tables MUIbase organise les données en tables. Une table est constituée de lignes et de colonnes : une ligne correspond à un enregistrement alors qu'une colonne correspond à un champ. Voici un exemple de structure pour un carnet d'adresses :
Il existe un genre de table particulier qui ne peut contenir qu'un seul enregistrement. Ce genre de table est très utile pour contrôler un projet de base de données. Par exemple, vous pouvez y mettre des boutons pour exécuter des taches diverses ou un champ en lecture seule pour afficher une information concernant le projet. Voici un exemple : supposez que vous ayez une base de données pour gérer votre compte bancaire dans laquelle vous entrez vos revenus et vos dépenses. Une table à un seul enregistrement pourrait contenir un champ en lecture seule de type Réel qui afficherait la différence. Chaque table dispose de deux pointeurs d'enregistrement : un vers l'enregistrement actuellement affiché dans l'interface graphique (nommé pointeur d'enregistrement GUI) et un vers l'enregistrement courant lors de l'exécution d'un programme MUIbase (nommé pointeur d'enregistrement de programme). Vous pouvez définir autant de tables que vous le désirez dans un projet MUIbase. Les tables peuvent être ajoutées, renommées ou effacées d'un projet. Enregistrements Un enregistrement correspond à une ligne d'une table. Il contient toutes les informations d'un élément de la table, par exemple dans une table gérant des adresses, un enregistrement correspond à une adresse. Chaque enregistrement se voit assigner un numéro qui définit son emplacement dans la table. Ce numéro peut changer si vous ajoutez ou effacez des enregistrements. Il existe pour chaque table un enregistrement appelé "initial record" avec des valeurs par défaut qui permet l'entrée de nouveaux enregistrements. L'enregistrement initial porte toujours le numéro d'enregistrement 0. Les enregistrements d'une table peuvent être ajoutés, modifiés ou effacés. Ils ne sont pas forcément présent en mémoire mais sont chargés et stockés quand c'est nécessaire. Le nombre maximum d'enregistrements dans une table est limité par deux choses : le numéro de l'enregistrement, est une valeur 32 bits de type entier, ce qui donne en théorie un maximum de 4 294 967 295 enregistrements. La deuxième limitation (et la plus contraignante) concerne la mémoire parce que chaque enregistrement génère un petit fichier qui est gardé en mémoire. Malgré tout, MUIbase est capable de travailler sur 10 000 enregistrements et plus. Champs Un champ correspond à une colonne d'une table. Il définit le type et l'apparence de la colonne correspondante. Les champs d'une table peuvent être ajoutés, renommés ou effacés. Le nombre de champ par table n'est pas limité. Pour chaque champ vous devez définir un type qui spécialise le contenu de ce champ. Reportez-vous au paragraphe suivant pour avoir la liste des types de champs disponible. Les types disponibles pour les champs sont les suivants :
Les champs de type texte (en anglais "String") contiennent une seule ligne de texte. Les champs textes sont les types de champ les plus souvent rencontrés dans un projet de base de données. Par exemple, une base de données relationnelle pourrait contenir le nom, la rue et la ville d'une personne chacun dans son propre champ Texte. Pour un champ Texte, vous devez définir le nombre maximum de caractères autorisés. Ce nombre n'affecte pas directement la consommation en mémoire ou la place sur le disque parce que seul le contenu effectif du champ est stocké (d'autres systèmes de base de données appellent cette fonctionnalité texte compressé). En cas de besoin, ce nombre peut être modifié après avoir défini un champ Texte. Les champs texte peuvent également servir à stocker des polices de caractères et des noms de fichiers. Concernant les noms de fichiers, des afficheurs externes peuvent être appelés pour afficher leur contenu. De plus, une classe image interne permet de visualiser l'image d'un fichier. Les champs texte ne peuvent pas prendre la valeur spéciale NIL. Champs entier Les champs de type Entier (en anglais "Integer") stockent des nombres entiers compris entre -2 147 483 648 et 2 147 483 647. Ils sont principalement utilisés pour stocker des quantités de toute nature, par exemple le nombre d'enfants d'une personne, le nombre de titres présents sur un CD. Les champs entiers peuvent prendre la valeur spéciale NIL, ce qui équivaut à un nombre entier non défini. Champs réels Les champs de type Réel (en anglais "Real") stockent des nombres à virgules compris entre -3.59e308 et +3.59e308. Ils sont utilisés pour stocker des nombres de toute nature, par exemple des sommes d'argent perçues ou dépensées. Pour chaque champ Réel, vous pouvez définir le nombre de chiffres après la virgule pour l'affichage, bien que la valeur stockée soit d'une précision arbitraire. Les champs réels peuvent prendre la valeur spéciale NIL, ce qui équivaut à un nombre réel non défini. Champs booléen Les champs de type Booléen (en anglais Bool) stockent une seule information. Ils sont utilisés pour stocker des valeurs oui/non ou vrai/faux, par exemple dans un projet de gestion de commandes, un champ Booléen peut stocker l'information "paiement effectué ?". Les champs Booléens ne peuvent avoir que TRUE (mot anglais pour VRAI) ou NIL comme valeur. Dans ce cas, NIL équivaut à la valeur FALSE (mot anglais pour FAUX). Champs choix Les champs de type Choix (en anglais "Choice") enregistrent une donnée parmi une liste de données. Par exemple, pour un projet de carnet d'adresses un champ de type Choix peut être utilisé pour enregistrer le nom du pays, qui se trouve dans une liste de pays du genre France, Canada, Allemagne ou autres. Les champs de type Choix n'enregistrent pas le texte lui-même mais le numéro correspondant au texte dans la liste de données (index). Le nombre de données ainsi que les données peuvent être modifiées une fois que le champ a été créé. Cependant, si vous modifiez un champ de type Choix, les valeurs des enregistrements existants ne seront pas modifiées pour refléter ce changement. Les champs de type Choix ne peuvent pas prendre la valeur NIL. Champs date Les champs de type Date enregistrent des dates du calendrier. Par exemple un champ de type Date pourrait stocker les dates d'anniversaire. Pour visualiser ou enregistrer des champs de type Date, il faut que le format soit du style JJ.MM.AAAA, MM/JJ/AAAA ou AAAA-MM-JJ, dans lequel JJ, MM et AAAA sont des valeurs à deux et quatre chiffres qui correspondent respectivement au jour, au mois et à l'année. Les dates peuvent prendre la valeur NIL, ce qui correspond à une date non définie. Champs heure Les champs de type Heure (en anglais "Time") enregistrent l'heure ou la durée. Par exemple, un champ de type heure pourrait enregistrer la durée des pistes d'un CD. Pour visualiser ou enregistrer des champs de type heure, il faut que le format soit du style HH:MM:SS, MM:SS ou HH:MM, dans lequel HH représente les heures, MM les minutes, et SS les secondes. En interne, les heures sont stockées en nombre de secondes à partir de 0:00. Les heures peuvent dépasser 23:59:59 jusqu'au temps maximum de 596523:14:07, en revanche les valeurs négatives ne sont pas possibles. Les heures peuvent prendre la valeur NIL, ce qui signifie une durée non définie. Champs mémo Les champs de type Mémo (en anglais "Memo") enregistrent du texte de longueur variable et sur plusieurs lignes. La longueur du texte est gérée dynamiquement ce qui veut dire que la mémoire est allouée d'après la longueur actuelle du texte. Par exemple dans un projet de gestion de films, un mémo pourrait enregistrer les résumés des films. Les mémos ne peuvent pas prendre la valeur NIL. Champs Référence Les champs de type Référence (en anglais "Reference") sont particuliers et n'existent probablement pas dans d'autres systèmes de base de données. Les références stockent un pointeur vers un autre enregistrement. Cet autre enregistrement peut se trouver dans la même table que celle contenant la référence mais aussi dans une toute autre table. Par exemple dans un projet de gestion généalogique, deux champs de type Référence pourraient stocker les pointeurs vers l'enregistrement respectivement du père et de la mère. Autre exemple dans un projet de gestion de CD et de chansons, une table contenant les chansons pourrait avoir une référence qui pointerait vers les enregistrements des CD correspondants. Pour l'affichage d'une référence, n'importe quel champ de l'enregistrement référencé peut être utilisé. La valeur d'une référence peut être saisie en sélectionnant un enregistrement parmi la liste des enregistrements de la table référencée. Les références peuvent prendre la valeur NIL, ce qui correspond à un pointeur vers l'enregistrement initial de la table "externe". Champs virtuels Les champs de type Virtuel (en anglais "Virtual") n'enregistrent pas d'information dans la base de donnée elle-même mais effectuent des calculs dynamiques quand c'est nécessaire. Par exemple, dans un projet de gestion de factures où un champ Réel contiendrait les sommes hors taxes, un champ Virtuel pourrait calculer les prix TTC. Le champ Virtuel serait calculé à partir des valeurs hors taxes à chaque fois que l'on voudrait connaître sa valeur. Il existe trois façons de visualiser des champs virtuels : booléen, texte et liste. Cela permet d'afficher la valeur d'un champ Virtuel sous forme de valeur VRAI/FAUX, de texte sur une seule ligne en incluant nombres, dates et heures, ou sous forme d'une liste de textes. Par exemple pour afficher tous les titres d'un CD. Les champs virtuels peuvent prendre la valeur NIL, ce qui correspond à FAUX dans le mode booléen, non défini dans le mode texte et vide dans le mode liste de textes. Boutons Les champs de type Bouton (en anglais "Button") ne constituent pas vraiment un type de champ parce qu'ils ne stockent pas et n'affichent pas d'information. Les boutons sont plutôt utilisés pour lancer des programmes MUIbase. Certains types de champ peuvent avoir une valeur spéciale appelée NIL. Cette valeur spéciale se traduit par une valeur non définie, par exemple pour un type date, elle est interprétée comme une date inconnue. La valeur NIL est similaire à la valeur NULL que l'on trouve dans d'autres systèmes de base de données. Notez qu'une fois le type de champ défini, il ne peut plus être changé. Tableau des types de champ La table suivante récapitule tous les types champ disponibles :
Chaque type de champ nécessite une certaine quantité de mémoire pour stocker la valeur dans un enregistrement. À l'exception des types Virtuel et Bouton, tous les autres types ont besoin d'un en-tête de 2 octets pour le stockage interne de l'information. De plus, de l'espace spécifique à chaque type est nécessaire pour stocker la valeur actuelle. La table suivante montre les besoins en mémoire et en espace de stockage sur disque avec l'en-tête de 2 octets pour chaque type.
Ici on entend par LONGUEUR DU TEXTE la longueur du texte à stocker et par LONGUEUR DU TEXTE MULTI LIGNES la taille du texte multi lignes à stocker. Associations Maintenant vous êtes en mesure de mettre vos informations sous forme de table avec enregistrements et champs. Mais peut être voudriez-vous associer différentes tables. Par exemple, si vous répertoriez votre collection de CD, vous pourriez avoir besoin de deux tables, une pour les CD eux-mêmes et une autre pour les chansons se trouvant sur ces CD. Bien sûr vous pourriez également avoir toutes les chansons dans la table du CD mais dans ce cas, vous auriez un nombre fixe de titres par CD. Maintenant que vous avez ces deux tables, il est nécessaire de relier chaque chanson au CD dont elle fait partie. Cette étape se nomme association entre les deux tables. Dans MUIbase, on utilise un champ de type Référence pour mettre en place une association. Lors de la mise en place d'un champ de type Référence dans une table, vous créez automatiquement une association entre la table contenant ce champ et la table à laquelle il se réfère. On peut distinguer les classes suivantes pour les associations :
Les associations "Un à Un" sont les plus simples. Pour chaque enregistrement on a zéro ou un partenaire dans la même table ou dans une autre table. Par exemple dans une base de données gérant vos acteurs favoris, vous pourriez utiliser un champ de type Référence nommé marié avec qui montrerait la personne avec qui cet acteur est marié. Un acteur qui serait célibataire aurait une valeur NIL pour ce champ. Évidemment, personne ne vous empêche d'associer le champ marié avec de plusieurs acteurs avec la même personne. Quoi qu'il en soit en programmant MUIbase, il est possible de déceler ce genre de cas et d'agir en conséquence. Associations "Un à plusieurs" Les associations "Un à plusieurs" sont utiles pour associer un ensemble d'enregistrements avec un enregistrement de la même table ou dans une autre table. Par exemple, pour un projet de gestion de compte bancaire vous pourriez définir une table pour tous vos comptes bancaires et une autre table répertoriant toutes vos transactions. Maintenant vous voudriez sûrement savoir à quel compte appartient une transaction. Donc vous créez, dans la table des transactions, un champ de type Référence associé à la table des comptes. Les associations "Un à plusieurs" sont les associations les plus couramment utilisées. Vous pouvez les utiliser pour gérer toute structure de type hiérarchique, par exemple des CD et leurs chansons ou des comptes bancaires et leurs transactions ou encore des arbres généalogiques, etc. Les associations "Un à plusieurs" servent également de base à la réalisation d'associations "Plusieurs à plusieurs" comme vous le verrez dans le chapitre suivant. Associations "Plusieurs à plusieurs" Les associations "Plusieurs à plusieurs" sont utilisées dans le cas où vous voudriez relier un ensemble d'enregistrements à un autre ensemble d'enregistrements. Par exemple, dans un projet de gestion d'acteurs et de films, vous auriez deux tables, une pour les acteurs et une autre pour les films. Supposez que vous vouliez connaître les acteurs d'un film. Dans ce cas vous pourriez créer, dans la table des acteurs, un champ Référence vers la table des films. Mais de cette façon, vous ne pourriez avoir qu'un seul film référencé pour chaque acteur parce qu'il n'existe qu'un seul champ Référence dans la table des acteurs. Ce dont vous avez besoin c'est d'un nombre illimité de références depuis la table des acteurs vers la table des films. Cette opération s'effectue en ajoutant une nouvelle table qui ne contient que deux champs Référence, l'un pointant vers la table des acteurs tandis que l'autre pointera vers la table des films. À partir de maintenant vous pouvez établir des associations en ajoutant de nouveaux enregistrements à cette table. Pour chaque association acteur-film, vous ajoutez un nouvel enregistrement et sélectionnez l'acteur et le film dans les champs Référence correspondants. Pour savoir dans quels films a joué un acteur, vous n'avez plus qu'à chercher dans la nouvelle table tous les enregistrements relatifs à cet acteur, ce qui montrera tous les films qui lui sont associés. MUIbase pourrait automatiquement effectuer ce genre de recherche et afficher le résultat dans une liste. Les tables suivantes montrent comment relier un groupe d'acteurs avec un groupe de films.
À partir de ces tables, vous pouvez voir que Mel Gibson a joué dans les films Tequila Sunrise, Mad Max et Braveheart ou que dans le film Batman, les acteurs principaux sont Michael Keaton, Jack Nicholson et Kim Basinger. Interface graphique MUIbase utilise une interface graphique organisée de façon hiérarchique pour afficher le contenu des enregistrements et stocker des données. Chaque projet utilise sa propre fenêtre principale, qui contiendra les éléments graphiques ainsi que les fenêtres secondaires. Ces éléments graphiques sont aussi appelés objets d'affichage. Une table est affichée dans son propre environnement visuel appelé fiche. Une fiche ne peut afficher qu'un seul enregistrement à la fois. Sa représentation ainsi que les champs qui composent la fiche sont modifiables par l'utilisateur. Voici la liste des éléments graphiques disponibles pour créer un environnement visuel :
Les fenêtres sont utilisées pour scinder les informations d'un projet vers différentes zones indépendantes. Chaque projet a automatiquement sa propre fenêtre principale. En cas de besoin, par exemple si la taille de la fenêtre principale est trop grande, on peut créer des fenêtres supplémentaires, qui peuvent elles-mêmes avoir des fenêtres secondaires. Pour chaque fenêtre secondaire, on peut placer un bouton dans la fenêtre du niveau supérieur afin de faciliter l'ouverture de la fenêtre secondaire. Ce bouton ressemble à un bouton de texte mais peut contenir un petit icône pour le distinguer des autres boutons. La fenêtre principale ne peut avoir de fenêtre au niveau supérieur. Elle est donc dépourvue de bouton fenêtre. Fermer une fenêtre principale équivaut à fermer le projet en cours. Une fenêtre peut avoir d'autres éléments graphiques pour enfant. Une image par défaut est affichée si aucun enfant n'a été ajouté à la fenêtre. Fiches Une fiche permet d'afficher le contenu d'une table. On ne peut voir qu'un enregistrement de la table à la fois. La fiche peut incorporer un onglet pour contrôler la table (voir le paragraphe suivant). Les autres éléments graphiques tels que les objets de champ ou de texte peuvent être placés dans une fiche pour montrer le contenu d'un enregistrement. Les fiches ne peuvent pas être placées à l'intérieur d'autres fiches car cela générerait une hiérarchie de fiches et par prolongement de tables. Pour mettre en place une hiérarchie de tables, on utilise une association de type 1:n entre deux tables. Onglets Un onglet est une zone rectangulaire de petite taille mais large positionnée au bord supérieur d'une fiche. Un onglet peut afficher un titre, par exemple le nom correspondant à la table, une paire de chiffres montrant le numéro de l'enregistrement actuel et le nombre total d'enregistrements, et plusieurs boutons pour contrôler la table, par exemple pour afficher l'enregistrement précédent ou suivant. On ne peut définir qu'un seul onglet par fiche. Si vous mettez un onglet dans une fiche, cela se traduit par une bordure supplémentaire, sinon aucune bordure n'est affichée. Objets de Champs Les objets de champ sont utilisés pour afficher le contenu d'un des champs d'un enregistrement. Suivant le type de champ, l'élément graphique sera soit une zone de texte (pour les types texte, entier, réel, date et heure), une case à cocher (pour le type booléen), un bouton cyclique ou une série de boutons radio (pour le type choix), une zone d'édition (pour le type mémo), une liste (pour le type référence), un texte, une case à cocher ou une liste (pour le type virtuel) et enfin un bouton texte ou bouton image (pour le type bouton). Dans certains cas, l'élément graphique peut être une zone de texte si l'objet de champ est en lecture seule. Objets texte Les objets texte sont utilisés pour introduire ou décrire les autres éléments d'une fiche ou pour afficher un texte statique. Images Les images peuvent être affichées n'importe où dans une fenêtre. Une image peut être un motif, une zone colorée ou bien une image d'un fichier externe. La taille de l'image peut être fixe ou redimensionnable. Une image est statique. Pour stocker des images dans une table, vous devez utiliser un champ de type Texte. Objets d'espacement Les objets d'espacement sont utilisés pour insérer des espaces dans la présentation d'une fenêtre ou dans la fiche d'une table. Un objet d'espacement peut avoir une barre horizontale (ou verticale) pour délimiter d'autres éléments graphiques. Groupes Les éléments graphiques peuvent être classés en groupes horizontaux ou verticaux. Le placement des éléments se fait de gauche à droite (groupe horizontal) ou du haut vers le bas (groupe vertical). Un groupe peut entourer ses éléments d'un cadre rectangulaire, peut afficher un titre en haut du groupe et peut insérer des espaces entre ses éléments. Objets balance Les objets balance peuvent être placés entre d'autres objets d'une fenêtre, d'une fiche ou d'un groupe. Un objet balance permet à l'utilisateur de contrôler les dimensions de ses éléments fils et par conséquent la place prise par chacun. Registres Un registre peut être utilisé pour disposer les éléments graphiques sur plusieurs pages mais avec une seule de ces pages visible à la fois. Cela est très utile lorsque l'interface utilisateur devient trop importante et que vous ne voulez pas l'étendre sur plusieurs fenêtres.
|