MUIbase Support This Project
programmable relational database
with graphical user interface
This page is also available in Deutsch English

Documentation

La documentation ci-dessous fait partie de la distribution de MUIbase. Elle est également disponible sous forme de PDF.


[ << ] [ >> ]           [Sommaire] [Table des matières] [Index] [ ? ]

5. Concepts de base

Avant de créer votre propre base de données et de commencer à y entrer des données, vous devez vous familiariser avec certaines notions de base de MUIbase.


5.1 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.


5.2 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 :

 

    Nom               | Rue	              | Ville
    ------------------|---------------------|------------------------
    Steffen Gutmann   | Wiesentalstr. 30    | 73312 Geislingen/Eybach
    Charles Saltzman  | University of Iowa  | Iowa City 52242
    Nicola Müller     | 21W. 59th Street    | Westmont, Illinois 60559

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.


5.3 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 32bits de type entier, ce qui donne en théorie un maximum de 4294967295 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.


5.4 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 délimite le contenu de ce champ. Reportez-vous au paragraphe suivant pour avoir la liste des types de champs disponible.


5.5 Types de champ

Les types disponibles pour les champs sont les suivants:

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é.


5.5.1 Champs texte

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.


5.5.2 Champs entier

Les champs de type Entier (en anglais Integer) stockent des nombres entiers compris entre -2147483648 et 2147483647. 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.


5.5.3 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 les 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 absolue.

Les champs réels peuvent prendre la valeur spéciale NIL, ce qui équivaut à un nombre réel non défini.


5.5.4 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).


5.5.5 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 `USA', `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.


5.5.6 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', `JJ/MM/AAAA' ou `AAAA-MM-JJ', dans lequel `JJ', `MM' et `AAAA' sont des valeurs à 2 et 4 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.


5.5.7 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.


5.5.8 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 s'effectue de manière dynamique 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.


5.5.9 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".


5.5.10 Champs virtuels

Les champs virtuels (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 sommes toutes taxes comprises. 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, sous forme 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.


5.5.11 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.


5.6 Tableau des types de champ

La table suivante récapitule tous les types champ disponibles :

 

Type        Description                             peut prendre NIL ?

String      Pour stocker du texte de 1..999 caractères.          Non
(Texte)     Le texte peut servir également à stocker des noms de fichiers, des noms de polices ou une chaîne dans une liste de chaînes. Pour les noms de fichiers, vous pouvez ajouter une zone montrant le contenu du fichier sous forme d'image.

Integer     Pour stocker des nombres entiers.             Oui
(Entier)

Real        Pour stocker des nombres réels.             Oui
(Réel)

Bool        Valeur booléenne VRAI ou NIL.                            Oui (NIL = Faux)
(Booléen)

Choice      Un nombre parmi n nombres.             Non
(Choix)     Les nombres sont représentés par des étiquettes de texte.

Date        Pour stocker des dates (1.1.0000- 31.12.9999). Oui

Time        Pour stocker des horaires (00:00:00-596523:14:07).  Oui
(Heure)

Memo        Texte sur plusieurs lignes de longueur illimitée.    Non
(Mémo)

Reference   Pour stocker un pointeur vers un enregistrement dans une autre table.   Oui (NIL = enregistrement initial)
(Référence)

Virtual     Pour afficher des résultats à partir d'un programme MUIbase.   Oui
(Virtuel)

Button      Pour lancer un programme de fonction.       Non (non disponible)
(Bouton)


5.7 Consommation mémoire

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.

 

Type               besoin en Mémoire               besoin en espace disque

Texte              2 + 4 + longueur du texte + 1  2 + longueur du texte + 1
Entier             2 + 4                      2 + 4
Réel               2 + 8                      2 + 8
Booléen            2 + 0                      2 + 0
Choix              2 + 2                      2 + 2
Date               2 + 4                      2 + 4
Heure              2 + 4                      2 + 4
Mémo               2 + 4 + longueur du texte multi lignes + 1    2 + longueur du texte multi lignes + 1
Référence          2 + 4                      2 + 4
Virtuel            0                          0
Bouton             0                          0

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.


5.8 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 :


5.8.1 Associations « Un à Un »

Les associations un à un sont les plus simples où 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.


5.8.2 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 cette 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érarchisé, par exemple des CD avec les chansons ou des comptes bancaires avec les transactions ou encore des arbres généalogiques, etc.

Les associations un à plusieurs servent également de base à la réalisation d'associations plusieurs avec plusieurs comme vous le verrez dans le chapitre suivant.


5.8.3 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 des 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é tel 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.

 

      Titre           Pays
      ----------------------------
m1:   Batman          USA
m2:   Batman Returns  USA
m3:   Speechless      USA
m4:   Tequila Sunrise USA
m5:   Mad Max         Australie
m6:   Braveheart      USA

 

      Nom
      -------------------
a1:   Michael Keaton
a2:   Jack Nicholson
a3:   Kim Basinger
a4:   Danny DeVito
a5:   Michelle Pfeiffer
a6:   Geena Davis
a7:   Christopher Reeve
a8:   Mel Gibson
a9:   Kurt Russell
a10:  Sophie Marceau
a11:  Patrick McGoohan
a12:  Catherine McCormack
a13:  Christopher Walken

 

      FilmRef  ActeurRef
      ------------------
      m1        a1
      m1        a2
      m1        a3
      m2        a1
      m2        a4
      m2        a5
      m2        a13
      m3        a1
      m3        a6
      m3        a7
      m4        a8
      m4        a5
      m4        a9
      m5        a8
      m6        a8
      m6        a10
      m6        a11

À 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.


5.9 Interface graphique

MUIbase utilise une interface utilisateur (GUI ou graphical user interface) 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 :


5.9.1 Fenêtres

Les fenêtres sont utilisées pour diffuser 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 et 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.


5.9.2 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 panel 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 de l'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.


5.9.3 Onglets

Un panel est une zone rectangulaire de petite taille mais large, et qui est positionnée au bord supérieur d'une fiche. Un panel 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 panel par fiche. Si vous mettez un panel dans une fiche, cela se traduit par une bordure supplémentaire, sinon aucune bordure n'est affichée.


5.9.4 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.


5.9.5 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.


5.9.6 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 string (voir String type).


5.9.7 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.


5.9.8 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.


5.9.9 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.


5.9.10 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.


[ << ] [ >> ]           [Sommaire] [Table des matières] [Index] [ ? ]

Ce document a été généré le 11 Septembre 2016 par texi2html