Outils pour utilisateurs

Outils du site


intro_histoire_numerique:modele_logique

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
intro_histoire_numerique:modele_logique [2020/10/31 14:05]
Francesco Beretta [Un exemple de modèle conceptuel]
intro_histoire_numerique:modele_logique [2020/10/31 16:45]
Francesco Beretta [Ajouter de nouvelles tables]
Ligne 12: Ligne 12:
  
  
-Sur ce graphique représentant le modèle conceptuel, on reconnaît les classes avec leurs propriétés,​ et les relations (orientées) entre les classes avec leurs cardinalités. 
 \\ \\
-Ce modèle conceptuel permet de traiter un questionnement ​de base relevant de la méthode proposopographique,​ comprenant ces aspects:+Ce modèle conceptuel permet de traiter ​(de manière relativement simple mais efficace) ​un questionnement ​ relevant de la méthode proposopographique,​ comprenant ces aspects:
   * dater et localiser les naissances des personnes (afin de les afficher sur une carte)   * dater et localiser les naissances des personnes (afin de les afficher sur une carte)
   * représenter les liens familiaux: parents, fratrie, jumeaux, etc.   * représenter les liens familiaux: parents, fratrie, jumeaux, etc.
   * gérer les différentes appellations des personnes   * gérer les différentes appellations des personnes
   * classifier les personnes avec une classification définie par l'​utilisateur (//tags//)   * classifier les personnes avec une classification définie par l'​utilisateur (//tags//)
-  * traiter les métiers et autres occupations des personnes, leur évolution dans le tempset pouvoir les cartographier+  * traiter les métiers et autres occupations des personnes, leur évolution dans le temps et pouvoir les cartographier 
 +  * traiter les spécialisation des métiers et leur appartenances à différents domaines. 
 + 
 +Sur le modèle conceptuel on reconnaît les classes avec leurs propriétés et les relations (orientées) entre les classes avec leurs cardinalités. 
 + 
 +Pour les classes qui représentent des événements,​ comme la naissance, union, poursuite d'une activité, ainsi que sur les appellations,​ une propriété '​sources'​ a été ajoutée permettant d'​accueillir sous forme de source l'​origine précise de cette information. Si on souhaite mettre des considérations semblables pour les objets (personnes, lieux, etc.) on les ajoutera dans la propriété '​notes'​ qui figurera dans toutes les tables (cf. ci-dessous). Le '​sourçage'​ est spécifique (et virtuellement obligatoire) pour toutes les informations concernant les objets), d'où une propriété explicite. 
 ===== Le modèle logique ou relationnel ===== ===== Le modèle logique ou relationnel =====
  
Ligne 47: Ligne 52:
 \\ \\
  
-person(//​pk_person//,​ name, definition, gender, death_date, __fk_birth__) \\+person(//​pk_person//,​ name, definition, gender, death_date, __fk_birth__, notes) \\
  
-appellation(//​pk_appellation//,​ __pk_person__,​ name) \\+appellation(//​pk_appellation//,​ __pk_person__,​ name, sources, notes) \\
  
-tag(//​pk_tag//,​ __fk_parent_tag__,​ name, definition) \\+tag(//​pk_tag//,​ __fk_parent_tag__,​ name, definition, notes) \\
  
-tags(//​pk_tags//,​ __fk_person__,​ __fk_tag__) \\+tags(//​pk_tags//,​ __fk_person__,​ __fk_tag__, notes) \\
  
-pursuit(//​pk_pursuit//,​ __fk_person__,​ __fk_occupation__,​ __fk_organisation__,​ begin_date, end_date) \\+pursuit(//​pk_pursuit//,​ __fk_person__,​ __fk_occupation__,​ __fk_organisation__,​ begin_date, end_date, sources, notes) \\
  
-organisation(//​pk_organisation//,​ __fk_geographical_place__,​ name, definition) \\+organisation(//​pk_organisation//,​ __fk_geographical_place__,​ name, definition, notes) \\
  
-occupation(//​pk_occupation//,​ name, definition) \\+occupation(//​pk_occupation//,​ name, definition, notes) \\
  
-specializes_occupation(//​pk_specializes_occupation//,​ __fk_parent_occupation__,​ __fk_child_occupation__) \\+specializes_occupation(//​pk_specializes_occupation//,​ __fk_parent_occupation__,​ __fk_child_occupation__, notes) \\
  
-birth(//​pk_birth//,​ date, __fk_geographical_place__,​ __fk_union__) \\+birth(//​pk_birth//,​ date, __fk_geographical_place__,​ __fk_union__, sources, notes) \\
  
-union(//​pk_union//,​ __fk_union_type__,​ begin_date, end_date, __fk_person_1__,​ __fk_person_2__) \\+union(//​pk_union//,​ __fk_union_type__,​ begin_date, end_date, __fk_person_1__,​ __fk_person_2__, sources, notes) \\
  
-union_type(//​pk_union_type//,​ name, definition) \\+union_type(//​pk_union_type//,​ name, definition, notes) \\
  
-geographical_place(//​pk_geographical_place//,​ name, definition, longitude,​latitude,​ __fk_geographical_place_type__) \\+geographical_place(//​pk_geographical_place//,​ name, definition, longitude,​latitude,​ __fk_geographical_place_type__, notes) \\
  
-geographical_place_type(//​pk_geographical_place_type//,​ name, definition) \\+geographical_place_type(//​pk_geographical_place_type//,​ name, definition, __fk_parent_geographical_place_type__,​ notes) \\
  
 +
 +**N.B.** Il est conseillé de mettre sur toutes les tables une propriété de type texte appelé '​Notes'​ qui servira à saisir tout type de remarque, ​ aspect à compléter, source ou document dont est issue l'​information,​ etc. Cette propriété n'est pas indiquée dans le modèle conceptuel pour ne pas l'​alourdir mais elle figure dans le modèle logique.
 +
 +\\
  
 ===== Création de la base de données SQLite qui implémente le modèle logique ou relationnel ​ ===== ===== Création de la base de données SQLite qui implémente le modèle logique ou relationnel ​ =====
  
 \\ \\
 +Après avoir défini le modèle logique ou relationnel,​ on passe à la réalisation physique de la base de données, à son implémentation avec le logiciel SQLite.
 +
 +
 +Pour ce faire nous allons utiliser le client graphique SQLite Studio (cf. [[intro_histoire_numerique:​modelisation_bases_donnees#​sqlitestudio|cette page]]).
 +\\
 +Les instructions qui suivent permettent de guider l'​utilisateur dans les tout premiers pas et elles ne remplacent pas le manuel d'​utilisation est disponible sur [[https://​github.com/​pawelsalawa/​sqlitestudio/​wiki/​User_Manual|cette page]] qu'on doit avoir toujours sous la main.
 +
 +
 +==== Création de la base de données ====
 +
 +
 +Instructions:​
 +
 +  * créer un dossier (répertoire) dans le dossier dédié au cours et l'​appeler '​bases_sqlite'​ (sous-entendu bases de données sqlite) qui va contenir une ou plusieurs bases de données
 +  * ouvrir le logiciel SQLiteStudio
 +  * dans le menu //​Database//​ ou avec le bouton correspondant activer la commande 'Add a database'​
 +  * choisir le type par dévaut SQLite3
 +  * appuyer sur le bouton '​+'​ en vert
 +  * entrer un nom pour la base de données (sans espaces, seulement avec des '​_'​ entre les paroles, et sans accents), par ex. __prosopographie__
 +  * naviguer vers le dossier '​bases_sqlite'​ précédemment créé.
 +  * appuyer sur le bouton '​Enregistrer'​
 +  * on revient à la boîte de dialogue '​Database',​ on lit le chemin vers le fichier SQLite et son nom, prosopographie.db,​ et on valide avec le bounton '​OK'​.
 +
 +La nouvelle base de données s'​affiche dans la liste des bases de données à gauche. Appuyer deux fois sur elle et l'​ouvrir.
 +
 +
 +==== Ajouter de nouvelles tables ====
 +
 +\\
 +Instructions:​
 +
 +  * commencer par ajouter des tables qui n'ont pas de clés étrangères,​ par ex. '​geographical_place_type'​
 +  * click droit sur '​Tables'​ à gauche dans la liste des objets de la base de données et '​Create a table'
 +  * insérer le nom de la table
 +  * ajouter des colonnes à partir du modèle logique ou relationnel avec le bouton ajout de colonne (ligne verte au milieu), clicker pour ajouter chaque colonne:
 +    * pk_geographical_place_type,​ data type: INTEGER, click sur case //Primary key// car ce sera la clé primaire de la table.
 +      * Une colonne clé primaire de type entier (//​integer//​) sera autoincrémentée de 1 à n
 +      * Pour des tables avec un très grand nombre de lignes utiliser le type de valeur BIGINT
 +    * name, data type: VARCHAR (caractères de longueur variable, utilisable pour les labels et noms), Size: 150 (la saisie sera limitée à 150 caractères
 +    * definition, data type: TEXT
 +    * notes, data type: TEXT
 +    * ajouter la clé étrangère vers la même table (relation réflexive de classement)
 +      * la colonne s'​appellera '​fk_parent_geographical_place_type'​
 +      * elle sera de type INTEGER
 +      * on coche ensuite Foreign Key et on ouvre '​Configure'​
 +      * on choisit la '​Foreign table' : geographical_place_type
 +      * on choisit la '​Foreign column':​ '​pk_geographical_place_type'​
 +      * on coche MATCH ce qui va introduire un contrôle automatique
 +      * on applique: '​Apply'​
 +      * on crée la colonne
 +
 +  * **IMPORTANT** : sauvegarder la table en appuyant sur le bouton vert en forme de '​V'​
 +    * apparaît alors l'​instruction SQL qui sera envoyée à la base de données et que vous pourriez aussi envoyer directement pour créer de nouvelles tables en la collant et exécutant dans 'Tools > Open SQL Editor'​
 +    * appuyer sur '​OK'​
 +
 +  * créer la table '​geographical_place'​ avec la même méthode
 +  * après avoir créé clé primaire, nom et descriptif, ajouter:
 +    * les champs //​longitude//​ et //​latitude//​ qui seront de type NUMERIC
 +    * ajouter la clé étrangère vers la table '​geographical_place_type'​
 +      * la colonne s'​appellera '​fk_geographical_place_type'​
 +      * elle sera de type INTEGER
 +      * on coche ensuite Foreign Key et on ouvre '​Configure'​
 +      * on choisit la '​Foreign table' : geographical_place_type
 +      * on choisit la '​Foreign column':​ '​pk_geographical_place_type'​
 +      * on coche MATCH ce qui va introduire un contrôle automatique
 +      * on applique: '​Apply'​
 +      * on crée la colonne
 +      * on n'​oublie pas d'​__enregistrer la nouvelle table__ !
 +
 +
 +On procède ainsi pour toutes les autres tables.
  
 +A noter que on ne pourra pas créer la table '​person'​ ou '​birth'​ directement avec toutes les clé étrangères,​ car '​birth'​ dépend de '​union'​ qui dépend à son tour de '​person'​.
 +  * on créer d'​abord la table '​person'​
 +  * on ajoute la colonne INTEGER pour la clé étrangère vers '​birth'​ qui sera appelée '​fk_birth'​ et on ne renseigne pas le lien vers la clé primaire
 +  * on enregistre la table '​person'​
 +  * on crée ensuite '​union',​ puis '​birth'​
 +  * enfin on va modifier la table '​person'​ (click droit sur la table et 'Edit the table'​),​ modifier la colonne (double-click sur la colonne) et on ajoutera la référence de la clé étrangère vers la table '​birth'​
  
  
intro_histoire_numerique/modele_logique.txt · Dernière modification: 2024/03/04 13:55 par Francesco Beretta