Vers le modèle universel (3)

Chose promise, chose due.
J'ai dit que le modèle de données à 2 entités est universel; je le prouverai sur quelques exemples.

Exemple 1. Je veux réaliser un agenda personnel sur mesure. Les caractéristiques élémentaires de cet agenda sont:
Nom,
Prénom,
N° de téléphone fixe domicile (plusieurs possibles)
N° de mobile (plusieurs possibles, mais est-ce utile)
Email (plusieurs possibles)
Ville domicile
Adresse domicile
Ville travail
Adresse travail
Société travail

Je veux pouvoir retrouver un contact:
Par son nom,
Par son prénom,
Par son n° de téléphone (mais c'est qui ce N° ?)
Par sa ville

De plus je veux mettre en oeuvre une relation de proximité entre Villes, de façon, par exemple à savoir quels sont mes contacts proches de Toulouse.

Il est assez évident de dire que l'entité OBJET comprend les types:
Nom de contact, Prénom de contact, ... Société de travail

Il est clair que chaque occurrence de Nom a pour objet père le type Nom de contact.
Idem pour les Prénoms, les N° de tel,... les Sociétés de travail.

On voit bien comment ranger ces données élémentaires dans l'entité OBJET; par exemple:
ID ID_PERE LIB PARAMETRE
1 Racine
2 1 Racine des objets
3 1 Racine des noms de relations entre objets
11 2 Nom de contact
12 2 Prénom de contact
13 2 Ville de contact
...
101 11 DUPONT
102 12 CHRISTIAN
...

Il faut maintenant mettre en place toutes les relations utiles entre ces données élémentaires. D'abord définir la notion de contact, c'est à dire expliquer que DUPONT est le nom d'un contact, CHRISTIAN, le prénom de CE contact, ... Pour cela il faut créer un nouveau type d'objet (classe) que nous appellerons Fiche contact

21 2 Fiche contact
100 21 -vide- (la fiche contact a un identifiant mais pas de désignation commune)
Pour dire que DUPONT est le nom de la fiche contact de ID=100 , il faut:
Créer la relation correspondante dans OBJET, faire la liaison adhoc dans LIEN; idem pour dire que CHRISTIAN est le prénom de la fiche 100, etc ...

ID ID_PERE LIB PARAMETRE
500 3 Nom du contact
501 3 Prénom du contact
502 3 Ville du contact

ID ID_ORIGINE ID_DESTINATION ID_RELATION
123 100 101 500
234 100 102 501
...

C'est l'ensemble des relations dont ID_ORIGINE est égal à 100 qui définit quelles sont les données élémentaires de la fiche contact 100.

Si on souhaite à l'inverse savoir quelle est la fiche contact correspondant à tel nom, on peut rechercher dans OBJET le type Nom de contact par son LIB. Par exemple: rechercher les OBJET tels que LIB=DUPONT et type=Nom de contact, soit ID_PERE=11. On trouve alors ID=101.

rechercher alors les LIEN tels que ID_DESTINATION=101 et ID_RELATION=500 (cad correspondant à une relation Nom du contact)
Une autre possibilité est de créer la relation inverse:
ID ID_PERE LIB PARAMETRE
505 3 Contact du Nom

ID ID_ORIGINE ID_DESTINATION ID_RELATION
456 101 100 505

L'intérêt de la relation inverse, réside dans la normalisation de la navigation en base d'une part et de l'accélération des accès d'autre part puisque la relation inverse est une sorte d'index de recherche optimal. De plus les relations inverses précisent les chemins de recherche qui sont fonctionnellement utiles.

Rappel: Retrouver un contact Par son nom,Par son prénom,Par son n° de téléphone (mais c'est qui ce N° ?),Par sa ville
De plus je veux mettre en oeuvre une relation de proximité entre Villes, de façon, par exemple à savoir quels sont mes contacts proches de Toulouse.

On ajoutera donc les noms de relations inverses:
ID ID_PERE LIB
506 3 Contact du Prénom
507 3 Contact ayant ce téléphone
508 507 Contact ayant ce fixe
509 507 Contact ayant ce mobile
510 3 Contact dans cette ville
511 510 Contact habitant cette ville
512 510 Contact travaillant dans cette ville
513 3 Ville proche de cette ville

Et on créera tous les objets et toutes les relations inverses utiles:
ID ID_PERE LIB
113 13 TOULOUSE
103 13 LABEGE

ID ID_ORIGINE ID_DESTINATION ID_RELATION
567 100 103 502
678 103 100 511
679 113 103 513
...

Notre agenda commence à prendre tournure; il peut apparaître très compliqué par rapport à un tableau de lignes de contacts. Mais il faut remarquer que par rapport à un tableau de contacts simple nous avons de nombreuses possibilités supplémentaires.Tout se passe comme si on pouvait :
ajouter dynamiquement de nouvelles colonnes au tableau de contacts,
parcourir ce tableau plus rapidement qu'un balayage séquentiel grâce aux relations inverses,
éclater une colonne existante en plusieurs nouvelles colonnes (Ville en phase 1 du projet puis Ville de résidence et Ville de travail en phase 2)

De plus nous montrerons dans l'article suivant, que l'on peut ajouter des colonnes correspondant à un autre projet que l'Agenda, sans jamais remettre en cause le modèle universel.

Un petit exemple de navigation pour finir:
Je suis arrivé à TOULOUSE. Quels sont mes contacts dans cette ville ou proches de cette ville ?
1. Recherche de la ville TOULOUSE dans OBJET donne ID=113
2. Recherche dans LIEN de ID_ORIGINE=113 et ID_RELATION=511; ne donne rien: je ne connais personne à TOULOUSE
3. Recherche dans LIEN de ID_ORIGINE=113 et ID_RELATION=513 (villes proches); donne ID_DESTINATION=103
4. Recherche dans LIEN de ID_ORIGINE=103 et ID_RELATION=511 (contact dans cette ville); donne ID_DESTINATION=100
5. Recherche dans LIEN de ID_ORIGINE=100 et ID_RELATION=500; donne ID_DESTINATION=101
6. Recherche dans OBJET de ID=101; donne Nom=LIB=DUPONT
7 Recherche dans LIEN de ID_ORIGINE=100 et ID_RELATION=501; donne ID_DESTINATION=102
8. Recherche dans OBJET de ID=102; donne Préom=LIB=CHRISTIAN
...

Au final je connais CHRISTIAN DUPONT qui habite à LABEGE, qui a tel N° de téléphone fixe, tel N° de mobile, et telle Adresse précise.Bien sûr cet exemple est volontairement simplifié pour qu'il soit facile à chacun de nous de comprendre le fonctionnement. Avec une machine, le déroulement de cet algorithme de recherche est extrêmement rapide et autorise des choses plus sophistiquées.

Par exemple, je peux demander à un système largement enrichi, ce qu'il sait de ROSE. Les réponses possibles seront:
La couleur ROSE, la fleur ROSE, la chanteuse ROSE, les noms de contacts ROSE Françoise, ROSE Louis, ...

Si je veux des précisions sur la chanteuse ROSE, le système pourra me donner le titre des chansons, le nom de l'éditeur, ses derniers concerts, ...

Convaincu par les possibilités de ce modèle universel ?

Edité le:05/03/2019