:: Utilisateurs Réfugiés SpiceGuid ► Les opérations Entités-Relations

Version d'archive

  • Ce site est en lecture seule. Certains liens dynamiques peuvent ne pas fonctionner correctement.

Les opérations Entités-Relations

Après avoir présenté le modèle Entités-Relations , on présente deux opérations élémentaires sur ces diagrammes ainsi qu'un programme BDD ( Base De Données ) qui implante ces deux opérations.

Le programme éric

Eric (Entity-Relationship Interactive Calculator) est le petit frère de Georges .

Il est précompilé pour MS-Windows et Linux x86.

fam_page_white_ocaml

 La source est écrite en OCaml .

eric.zip 263,52 kB

La jointure

C'est le mécanisme de base d'ajout dans la base de données.

Au lancement du programme la base est totalement vide.

La commande join permet d'ajouter des diagrammes dans la base.

join ([Cat] On [Mat]).

La BDD est irredondante, tout nouveau diagramme est jointuré avec les concepts et les relations nouvelles ou existantes.

Par exemple les deux commandes suivantes :

join ([Woman Sarah] SpouseOf [Man John]).
join ([Woman Sarah] ColleagueOf [Man John]).

Sont équivalentes à cette unique commande :

join ([Woman Sarah*w] SpouseOf [Man John*m]) (w ColleagueOf m).

Car les concepts de départ et d'arrivée des relations sont les mêmes.

ER_graphe7
fam_comment

La jointure s'effectue également sur les relations, il ne peut pas y avoir deux relations de même nom reliant les deux même concepts de départ aux deux même concepts d'arrivée.


La sélection

C'est le mécanisme de base de la requête dans la base de données.

Seuls les concepts peuvent être variables, on reconnaît une variable-concept à ce qu'elle a un marqueur mais pas d'étiquette. La recherche tente d'associer une étiquette-concept à chaque variable-concept de sorte que le (ou les) graphe résultant soit dans la base de données. Les relations ne sont jamais des variables, ce sont toujours des constantes.

join ([Liquid Water] Boil [Celsius +100]).
join ([Liquid Azote] Boil [Celsius -196]).
select ([*liquid] Boil [*temp]).

Renvoie toutes les températures d’ébullition connues.

select ([*w] ColleagueOf [*m])(w SpouseOf m).

Renvoie toutes les personnes w et m qui sont à la fois collègues et époux.

select
  ([Believe *b] Experiencer [*t])
  (b Theme [Proposition *p])
  (p Statement [Want *w])
  (w Experiencer [*e])
  (w Theme [Situation *s])
  (s Description [Marry *m])
  (m Agent e).

Renvoie toutes les personnes t qui pensent qu'une personne e veut se marier (on ne demande ni avec qui, ni où, ni quand).

Renvoie tous les verbes de la contine de la souris verte :

select
  ([*v0] Then [*v1])
  (v1 Then [*v2])
  (v2 Then [*v3])
  (v3 Then [*v4])
  (v4 Then [*v5])
  (v5 Then [*v6])
  (v6 Then [*v7])
  (v7 Then [*v8])
  (v8 Then [*v9]).

Où l'on voit que le temps de recherche reste raisonnable malgré l'abondance de concepts variables Smile

fam_comment

Les graphes imprimés par la commande select ont exactement la même syntaxe que les graphes acceptés par la commande join

Spoiler (Sélectionnez le texte dans le cadre pointillé pour le faire apparaître)

Techniquement, la sélection est le problème dit de Hom(G,H) , soit la recherche de tous les homomorphismes du graphe G (le motif) vers le graphe H (la BDD). Ce problème est connu pour être NP-complet .


Sauvegarder

La commande save sauvegarde la base de donnée en cours dans le fichier BDD indiqué.

save "database.eric".
fam_error

Le chemin d'accès doit toujours avoir le caractère / comme séparateur et ce même sous MS-Windows. Par exemple save "F:/Concept graphs/BDD.eric". est une commande valide tandis que save "F:\Concept graphs\BDD.eric". est une commande invalide.


Charger

La commande load efface la base de données en cours et charge le fichier BDD indiqué.

load "database.eric".
fam_comment

Les fichiers BDD sont portables de Windows 32bits vers Linux 32bits et vice-versa. Pour une portabilité 64bits il faudrait recompiler la source.


Quitter

La fonction la plus importante de tout programme Smile

quit.

Le méta-modèle

Le méta-modèle entités/relations c'est le modèle exprimé dans son propre formalisme. Il est extrêmement compact.

ER_graph8
join
  ([Definition *def] Of [EntityRelationGraph])
  ([Set V *setV] RequiredBy def)
  ([Set E *setE] RequiredBy def)
  (setV Of [Vertex *v])
  (setE Of [Edge *e])
  (e Origin v)(e Destination v)
  (v LabelledWith [Concept])
  (e LabelledWith [Relation]).
fam_comment

Accessoirement le méta-modèle est aussi un schéma de conception pour l'implantation de Eric.


Conclusion

fam_accept

On a présenté un langage aussi élémentaire que possible pour la modélisation des connaissances ainsi qu'une implantation simple et efficace de ce langage.

fam_accept

De nombreuses extensions et variantes sont possibles pour ajouter de l'expressivité et/ou du raisonnement (assisté ou automatisé) à notre modèle de base.

fam_page_go

Le développement d'Eric continue .

Personne n'a encore marqué son appréciation pour cet article. Soyez le premier !

Les derniers commentaires

Sbirematqui il y a plus de 12 ans

Spiceguid, est il possible de faire un méta-méta modèle ? icon_razz

SpiceGuid il y a plus de 12 ans

Le méta-modèle est déjà son propre méta-méta-modèle. Enfin je crois. À vrai dire il va falloir que je méta-réfléchisse encore un peu pour en être méta-certain murpower

Sbirematqui il y a plus de 12 ans

Qu'est ce que mon vieux Georges vient faire ici ? sourire3
Ce truc ne fait que ressortir que des réponses toutes cuites à un élément donné, rien de méchant, mais au moins je me demande ce qu'est Éric. :-P

Si j'ai bien compris, Éric est un logiciel qui permet de stocker des diagrammes d'entités-relation, et de façon à ce que chaque élément soit relié aux autres... En bref, le rapport que je vois avec Georges, c'est qu'appliqué de manière analogue, ce système pourrait donner une culture à Georges et lui permettre de composer des phrases simples à partir des relations issues de la base de donnée. En poussant le concept, on pourrait avoir une série de concepts généraux sur lesquels on pourrait venir greffer des relations originales et propres à l'interlocuteur.

Dans le genre, si on identifie que utilisateur -> mère -> vivante et mère -> nom -> diane, on peut cracher "Comment va Diane votre mère ?"... :-P

M'enfin, intéressant, beau travail tout de même ! Smile
(*Sbirematqui va renterrer ses vieux trips*)

L'avenir, c'est le Tixel.

SpiceGuid il y a plus de 12 ans

Merci pour le compliment Smile

Ce qui me fait envie dans Georges c'est qu'il est totalement en ligne, et ça je ne sais pas comment le faire. C'est la fracture numérique entre les jeunes connectés (Ertaï et les autres) et les vieux crocodiles comme moi blaicon15

Mais un jour moi aussi j'apprendrai à vivre avec mon époque icon_razz

Ertaï, tiens toi prêt, New York est trop petit pour nous deux, l'un d'entre nous doit mourir, que le meilleur gagne duel2

Sbirematqui il y a plus de 12 ans

En fait, tout dépend... :-°

De toute façon, le PHP est Turing-complet, on peut tout faire avec, et notamment l'affichage en ligne. Je pense qu'au pire, on peut interfacer une console avec un site avec des sockets PHP, donc utiliser ERIC en ligne, mais développer un site en Ocalm est aussi possible avec la CGI...

Faut trouver une interface, une API, un moyen de faire communiquer le A avec le B ou d'utiliser B avec A. Smile

:: Utilisateurs Réfugiés SpiceGuid ► Les opérations Entités-Relations

© Copyright 2002-2024 Aeriesguard.com - Mentions légales
Aerie's Guard V 7.0
réalisé par Ertaï, designé par Ivaldir, illustré par Izual et Sophie Masure
Famfamfam