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 11:36]
Francesco Beretta [Le modèle logique ou relationnel]
intro_histoire_numerique:modele_logique [2020/10/31 16:42]
Francesco Beretta [Un exemple de modèle conceptuel]
Ligne 12: Ligne 12:
  
  
-Sur ce graphique représentant ​le modèle conceptuelon reconnaît ​des classes avec leurs propriétés, des relations (orientées) entre les classes ​et leurs cardinalités.+\\ 
 +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) 
 +  * représenter les liens familiaux: parents, fratrie, jumeaux, etc. 
 +  * gérer les différentes appellations des personnes 
 +  * 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 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 40: Ligne 52:
 \\ \\
  
-person(//​pk_person//,​ name, definition, death_date, ​__fk_birth_brought_into_life__) \\+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//,​ 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) \\
  
-specializes_tag(//pk_specializes_tag//, __fk_tag__) \\+pursuit(//pk_pursuit//, __fk_person__,​ __fk_occupation__,​ __fk_organisation__,​ begin_date, end_date, sources, notes) \\
  
-pursuit(//pk_pursuit//, __fk_person____fk_occupation__begin_dateend_date) \\+organisation(//pk_organisation//, __fk_geographical_place__namedefinitionnotes) \\
  
-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_person_by_mother__, __fk_geographical_place__) \\+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__,​ sources, notes) \\ 
 + 
 +union_type(//​pk_union_type//,​ name, definition, notes) \\ 
 + 
 +geographical_place(//​pk_geographical_place//,​ name, definition, longitude,​latitude,​ __fk_geographical_place_type__,​ notes) \\ 
 + 
 +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 ​ ===== 
 + 
 +\\ 
 +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:​
  
-geographical_place(//pk_geographical_place//name, definitionlongitude,latitude__fk_geographical_place_type__) \\+  * 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 variableutilisable pour les labels et noms)Size: 150 (la saisie sera limitée à 150 caractères 
 +    * definitiondata type: TEXT 
 +  * **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'​
  
-geographical_place_type(//pk_geographical_place_type//, name, definition) \\+  * 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 
 +    * ajouté 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