IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Géographie des civilisations [MCD]


Sujet :

Schéma

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut Géographie des civilisations
    Bonjour,
    Je poste ici car je voudrai modéliser une base de données et je ne sais pas vraiment comment commencer.
    Voici le problème : depuis 10 ans à peu près j'accumule des données pour un programme qui présente celles-ci. Pour le moment ces données sont à la fois sous forme de fichier excel et programmation VBA (pour la maintenance de la base : essentiellement ajout de données et vérification de la cohérence de celles-ci) et sous forme de fichiers binaires et textes pour l'utilisation des données. les fichiers binaires et textes sont générés à partir de VBA Excel. Le programme existe en Visual Basic et en Java avec presque les mêmes formats de données. Dans les deux cas l'ensemble des données est chargé en mémoire pour utilisation.
    Je souhaite passer à une base de données qui permettent surtout de pouvoir utiliser les données sans tout charger en mémoire.
    Pour le moment seul le programmeur peut modifier les données (ajout, suppression, modification), l'utilisateur du programme lui n'a que l'accés en lecture (enfin pour le moment et encore ...).
    Je pense que le meilleur moyen de commencer est d'écrire en français ce que sont les données et à quoi elles servent (je crois que j'ai lu ça dans un des nombreux tutoriels que je lis depuis une semaine).
    C'est donc mon premier message à ce sujet. Le prochain rentrera dans le vif du sujet.

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut Les données elles-mêmes
    Je dispose d'un ensemble des textes de j'appelle paragraphes. Chaque paragraphe a un titre, une date de début, une date de fin, un texte, une civilisation de référence.
    Donc j'ai un objet ? entité ? modèle ? classe ? Paragraphe avec les attributs (propriétés) suivantes : titre, début, fin, texte, civilisation plus un identifiant qui servira de clé primaire.
    Les civilisations comporte un nom et une localisation
    J'ai donc une entité Civilisation avec les attributs nom, longitude, latitude.
    J'ai une relation entre les paragraphes et les civilisations :
    Chaque paragraphe fait référence à une et une seule civilisation.
    Une civilisation est référencée par 0, 1 ou plusieurs paragraphes.
    J'ai aussi une relation entre les paragraphes eux-mêmes :
    Chaque paragraphe est suivi par 0, 1 ou plusieurs paragraphes

    D'après mes lectures Paragraphes et Civilisations sont représentés par des rectangle avec en haut le nom de l'entité et en dessous la liste de ses attributs (avec leur type ... mais ce n'est pas un problème ici).
    Les relations sont représentées de la façon suivante :

    Paragraphes ------1,1--- Fait référence à ---- 0,n ------Civilisations
    Paragraphes ------0,n--- Suit ----0,n ------Paragraphes.

    Question : comment décrire la situation suivante ? La localisation d'une civilisation dépend de l'époque (pas nécessairement en lien avec celle d'un paragraphe). par exemple la civilisation A est localisée au point X avant -2000, en Y entre -2000 et -1000, et en Z après -1000 ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Il va vous falloir une entité localisation ou lieu ou...
    Cette entité va répertorier vos lieux.

    Ensuite il faudra une relation entre votre Civilisation et cette localisation.
    A ceci il va falloir rajouter cette notion de date, afin qu'une civilisation ne se retrouve pas en 2 lieu différent à une même date (et encore ce point est discutable).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Civilisation-0,n----------Situe--------------0,n-Lieu
                                 |
    Date-0,n---------------------
    Cette entité date ou période va, de mon point de vue, s'intégrer dans la relation Situe sans créer une table quand vous allez passer au MPD.

    Ce qui va nous donner :
    t_civilisation_civ (civ_id, ...)
    t_lieu_lie (lie_id, ....)
    a_civ_lie (#civ_id, #lie_id, periode_debut, periode_fin)

    La il faudra gérer la recouvrement des periodes pour qu'une civilisation ne se retrouve pas en 2 lieu identique pour la même période.


    Maintenant, vu que l'histoire est souvent approximative quand on parle de fait qui ce sont passés il y a très longtemps, vous pourriez avoir des inconnus au niveau des périodes.


    Pour contrer ce problème on pourrait alors transformer la relation Situe en entité, du coup le mcd deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Civilisation-0,n-----Presente----------1,1-Location-1,1---Situe---0,n-Lieu
                                                     |
    Date-0,N------------Concerne------------------0,2

    Au niveau Mpd, on utiliserai du coup une clef incrémentale pour l'entité Location afin de ne pas être géné par les périodes :
    t_civilisation_civ (civ_id, ...)
    t_lieu_lie (lie_id, ....)
    t_location_loc (loc_id, #civ_id, #lie_id, loc_periode_debut, loc_periode_fin)


    Vous pouvez attendre d'autre commentaire de personnes plus avisées que moi sur le sujet

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Tout d'abord merci d'avoir répondu si vite et d'accepter d'aider un débutant qui a bien du mal avec ces notions de BD.

    Citation Envoyé par punkoff Voir le message
    Bonjour,
    Il va vous falloir une entité localisation ou lieu ou...
    Cette entité va répertorier vos lieux.
    Oui en effet ce sera l'objet d'un prochain message
    Ensuite il faudra une relation entre votre Civilisation et cette localisation.
    A ceci il va falloir rajouter cette notion de date, afin qu'une civilisation ne se retrouve pas en 2 lieu différent à une même date (et encore ce point est discutable).
    Cela est déjà géré et je peux utiliser des procédures qui vérifient la cohérence des données. A un moment je dois faire des choix donc j'ai décidé qu'une "civilisation" (le terme est peut-être mal choisi) n'avait qu'un seul lieu à une certaine époque. En fait ce que j'appelle "civilisation" est un ensemble de pays ou régions dont l'histoire est commune.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Civilisation-0,n----------Situe--------------0,n-Lieu
                                 |
    Date-0,n---------------------
    Cette entité date ou période va, de mon point de vue, s'intégrer dans la relation Situe sans créer une table quand vous allez passer au MPD.

    Ce qui va nous donner :
    t_civilisation_civ (civ_id, ...)
    t_lieu_lie (lie_id, ....)
    a_civ_lie (#civ_id, #lie_id, periode_debut, periode_fin)
    La il faudra gérer la recouvrement des periodes pour qu'une civilisation ne se retrouve pas en 2 lieu identique pour la même période.
    Maintenant, vu que l'histoire est souvent approximative quand on parle de fait qui ce sont passés il y a très longtemps, vous pourriez avoir des inconnus au niveau des périodes.
    Pour contrer ce problème on pourrait alors transformer la relation Situe en entité, du coup le mcd deviendrait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Civilisation-0,n-----Presente----------1,1-Location-1,1---Situe---0,n-Lieu
                                                     |
    Date-0,N------------Concerne------------------0,2
    Au niveau Mpd, on utiliserai du coup une clef incrémentale pour l'entité Location afin de ne pas être géné par les périodes :
    t_civilisation_civ (civ_id, ...)
    t_lieu_lie (lie_id, ....)
    t_location_loc (loc_id, #civ_id, #lie_id, loc_periode_debut, loc_periode_fin)
    Vous pouvez attendre d'autre commentaire de personnes plus avisées que moi sur le sujet
    La seule chose qu'il me faut préciser dans ma description en français des données c'est qu'une "civilisation" ne peut avoir qu'un seul lieu à un moment donné. C'est un choix personnel car je souscris bien entendu à ce qui est dit au sujet de l'imprécision des localisations et des périodes de celles-ci. D'ailleurs quand je parle de période Debut,Fin il s'agit de [Debut,Fin[. De plus on doit avoir bien entendu Debut < Fin. De plus une civilisation a au moins une localisation.
    Donc peut-être ce schéma :
    L'entité Lieux comprend comme attribut une longitude, une latitude (plus bien sûr un identifiant qui servira de clé primaire).

    Donc je verrai cela (Entités en gras, relations en italique)

    Civilisation ---- 1,N ----- situe ---- 0,N ---- Lieux

    La relation "situe" (est-ce bien comme cela que l'on appelle les liens entre deux entités ?) comprendrait deux attributs Début et Fin

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Bonjour et bienvenue dans le monde des bases de données relationnelles !
    Je pense que le meilleur moyen de commencer est d'écrire en français ce que sont les données et à quoi elles servent
    Effectivement, c'est un bon début. On appelle aussi ça établir le "dictionnaire des données". Il s'enrichira au fur et à mesure de l'avancement de la conception avec des précisions telles que le type de données (caractères, numérique, date) et leur taille (longueur fixe ou variable pour les chaînes de caractères, quelle taille maxi pour les chaînes variables, degré de précision pour les nombres décimaux...).

    Je dispose d'un ensemble des textes de j'appelle paragraphes. Chaque paragraphe a un titre, une date de début, une date de fin, un texte, une civilisation de référence.
    Donc j'ai un objet ? entité ? modèle ? classe ? Paragraphe avec les attributs (propriétés) suivantes : titre, début, fin, texte, civilisation plus un identifiant qui servira de clé primaire.
    Si tu modélises à l'aide de la méthode Merise et de son célèbre "Modèle conceptuel de données" (MCD), on parle alors "d'entité" ou, plus rigoureusement, "d'entité type" et de "propriétés".
    Si par contre tu modélises à l'aide du langage UML et de son célèbre "Diagramme de classes", on parle alors de "classe" et "d'attributs".

    J'ai donc une entité Civilisation avec les attributs nom, longitude, latitude.
    Sur le principe, OK. On y ajoutera néanmoins un identifiant artificiel de type entier.
    Sur le fond, la latitude et la longitude ne sont-ils pas trop restrictifs pour y loger toute une civilisation ? Ne faudrait-il pas plutôt modéliser des régions pour localiser les civilisations ?

    J'ai une relation entre les paragraphes et les civilisations :
    Dans un MCD, on parle "d'association" pour ne pas confondre avec la "relation" de l'algèbre relationnelle qui correspond davantage à l'entité type.

    Chaque paragraphe fait référence à une et une seule civilisation.
    Une civilisation est référencée par 0, 1 ou plusieurs paragraphes.
    Paragraphes ------1,1--- Fait référence à ---- 0,n ------Civilisations
    OK. Pour simplifier et ne pas entraîner d'étourderies dit plutôt "Une civilisation est référencée par 0 à plusieurs paragraphes".
    Voir mon billet de blog sur la bonne écriture des règles de gestion.

    J'ai aussi une relation entre les paragraphes eux-mêmes :
    Chaque paragraphe est suivi par 0, 1 ou plusieurs paragraphes
    Paragraphes ------0,n--- Suit ----0,n ------Paragraphes.
    Idem.
    Un détail : on écrit le nom des entités types au singulier, là aussi pour lever toute ambiguïté quant au sens des associations.
    Il est d'usage également de nommer les associations à l'aide d'un verbe à l'infinitif, ce qui permet plus aisément de lire l'association dans les deux sens, une fois à la forme active, l'autre à la forme passive.

    D'après mes lectures Paragraphes et Civilisations sont représentés par des rectangle avec en haut le nom de l'entité et en dessous la liste de ses attributs (avec leur type ... mais ce n'est pas un problème ici).
    Les relations sont représentées de la façon suivante :
    La symbolique de l'entité type est bonne quand on dessine un MCD à la main ou à l'aide d'un logiciel de modélisation. L'association est représentée par un ovale contenant le verbe et éventuellement un trait horizontal de séparation lorsque l'association est porteuse de données.

    Mais sous forme textuelle, ta représentation ici est bonne. J'ai cependant pour habitude de séparer l'ensemble de l'association (verbe + cardinalités + traits de liaison) des entités types avec un espace.

    J'écrirais donc tes associations de la sorte :
    Paragraphe -1,1----Référencer----0,n- Civilisation

    Paragraphe -0,n----Suivre
    |------------------0,n-------|

    Mais es-tu sûr de ta règle de gestion et donc du MCD pour la succession des paragraphes ?
    Si je dis que les paragraphes B et C suivent le paragraphe A, cela peut vouloir dire :
    A -> B
    |---> C

    ou bien :
    A -> B -> C

    Et le modèle n'est pas le même ! Idem pour les prédécesseurs.

    Question : comment décrire la situation suivante ? La localisation d'une civilisation dépend de l'époque (pas nécessairement en lien avec celle d'un paragraphe). par exemple la civilisation A est localisée au point X avant -2000, en Y entre -2000 et -1000, et en Z après -1000 ?
    Il faut donc une entité type "Epoque".

    Règles de gestion :
    Une civilisation peut être localisée à plusieurs époques et une époque peut localiser plusieurs civilisations.

    Ici, je suppose, comme le suggère la structure de ton entité type "Civilisation", et que justement je contestais, qu'une civilisation ne peut être localisée qu'en un seul point géographique à une époque définie.

    MCD :
    Civilisation -1,n----localiser----0,n- Epoque

    L'association "localiser" est ici porteuse des coordonnées du point géographique.

    À toi de définir les bonnes règles de gestion. Elle pourraient amener à réaliser une association ternaire en considérant une entité type "Point_geographique" si une civilisation peut être localisée en plusieurs point à la même époque ou si plusieurs civilisations peuvent être localisées au même point à la même époque ou...

    Bon courage !

    EDIT : Punkoff a posté pendant que je rédigeais. Cela vous fait deux avis.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Tout d'abord merci de votre aide. J'ai lu les deux réponses dans l'ordre et je m'aperçois que certains des points que j'ai abordés dans ma réponse à Punkoff ont trouvé des réponses ou confirmation dans celle-ci.

    Citation Envoyé par CinePhil Voir le message
    Bonjour et bienvenue dans le monde des bases de données relationnelles !

    Effectivement, c'est un bon début. On appelle aussi ça établir le "dictionnaire des données". Il s'enrichira au fur et à mesure de l'avancement de la conception avec des précisions telles que le type de données (caractères, numérique, date) et leur taille (longueur fixe ou variable pour les chaînes de caractères, quelle taille maxi pour les chaînes variables, degré de précision pour les nombres décimaux...).


    Si tu modélises à l'aide de la méthode Merise et de son célèbre "Modèle conceptuel de données" (MCD), on parle alors "d'entité" ou, plus rigoureusement, "d'entité type" et de "propriétés".
    Si par contre tu modélises à l'aide du langage UML et de son célèbre "Diagramme de classes", on parle alors de "classe" et "d'attributs".


    Sur le principe, OK. On y ajoutera néanmoins un identifiant artificiel de type entier.
    Sur le fond, la latitude et la longitude ne sont-ils pas trop restrictifs pour y loger toute une civilisation ? Ne faudrait-il pas plutôt modéliser des régions pour localiser les civilisations ?
    En fait tout cela est inclus dans un ensemble plus vaste. Donc pour ce qui concerne les "civilisations", j'ai répondu dans la réponse à Punkoff.
    Dans un MCD, on parle "d'association" pour ne pas confondre avec la "relation" de l'algèbre relationnelle qui correspond davantage à l'entité type.

    OK. Pour simplifier et ne pas entraîner d'étourderies dit plutôt "Une civilisation est référencée par 0 à plusieurs paragraphes".
    J'essaierai de m'en souvenir.
    Voir mon billet de blog sur la bonne écriture des règles de gestion.
    Le lien ne semble pas marcher.

    Un détail : on écrit le nom des entités types au singulier, là aussi pour lever toute ambiguïté quant au sens des associations.
    Il est d'usage également de nommer les associations à l'aide d'un verbe à l'infinitif, ce qui permet plus aisément de lire l'association dans les deux sens, une fois à la forme active, l'autre à la forme passive.

    La symbolique de l'entité type est bonne quand on dessine un MCD à la main ou à l'aide d'un logiciel de modélisation. L'association est représentée par un ovale contenant le verbe et éventuellement un trait horizontal de séparation lorsque l'association est porteuse de données.

    Mais sous forme textuelle, ta représentation ici est bonne. J'ai cependant pour habitude de séparer l'ensemble de l'association (verbe + cardinalités + traits de liaison) des entités types avec un espace.

    J'écrirais donc tes associations de la sorte :
    Paragraphe -1,1----Référencer----0,n- Civilisation

    Paragraphe -0,n----Suivre
    |------------------0,n-------|

    Mais es-tu sûr de ta règle de gestion et donc du MCD pour la succession des paragraphes ?
    Si je dis que les paragraphes B et C suivent le paragraphe A, cela peut vouloir dire :
    A -> B
    |---> C

    ou bien :
    A -> B -> C

    Et le modèle n'est pas le même ! Idem pour les prédécesseurs.
    Il s'agit du premier modèle et non pas de la transitivité (les notions de relations, d'ensembles et de logiques ne me posent pas de problème étant de formation maths (agrégation de mathématiques).

    Il faut donc une entité type "Epoque".

    Règles de gestion :
    Une civilisation peut être localisée à plusieurs époques et une époque peut localiser plusieurs civilisations.

    Ici, je suppose, comme le suggère la structure de ton entité type "Civilisation", et que justement je contestais, qu'une civilisation ne peut être localisée qu'en un seul point géographique à une époque définie.

    MCD :
    Civilisation -1,n----localiser----0,n- Epoque

    L'association "localiser" est ici porteuse des coordonnées du point géographique.
    A priori il y aura une table Point alors qu'il n'y aura pas de table Epoque. Je pensais plutôt à
    Civilisation -1,n----localiser----0,n- Point
    localiser comporte alors deux attributs : debut et fin
    À toi de définir les bonnes règles de gestion. Elle pourraient amener à réaliser une association ternaire en considérant une entité type "Point_geographique" si une civilisation peut être localisée en plusieurs point à la même époque ou si plusieurs civilisations peuvent être localisées au même point à la même époque ou...
    Par décision personnelle, une civilisation ne peut être qu'à un lieu en même temps. Par contre effectivement un même lieu peut servir à diverses civilisations.
    Bon courage !
    Merci

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut Quel logiciel de modélisation ?
    Quel logiciel gratuit de modélisation pouvez-vous me conseiller ? J'ai essayé OpenModelSphere qui semble sur-dimensionner par rapport à mes besoins.

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut
    Citation Envoyé par Patrice Henrio Voir le message
    Le lien ne semble pas marcher.
    Bon j'ai trouvé. Je vais ré-écrire les associations.

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    469
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 469
    Par défaut Mes règles de gestion (chap 1)
    Un paragraphe est un texte avec un titre, une date de début, une date de fin
    Une civilisation est un nom
    Un lieu est un point avec une longitude et une latitude

    Les associations :
    Un paragraphe dépend d'une et une seule civilisation
    Chaque paragraphe peut suivre plusieurs paragraphe (éventuellement aucun) et être suivi par plusieurs paragraphes (éventuellement aucun). Si je note cette relation -> (et x> pour la négation de cette relation) il s'agit du schéma A -> B et A->C. Dans ce cas on a B x> C et C x> B. De même si A->B alors B x> A.
    Une civilisation est localisée en un et un seul lieu à une date donnée.

    Les MCD
    Paragraphe -1,1-----référencer---------0,n- Civilisation
    Paragraphe -0,n-----suivre-------------0,n- Paragraphe
    Civilisation -1,n------localiser-----------0,n- Lieu
    l'association localiser a les attributs debut et fin avec la contrainte debut < fin

    Ai-je bien défini la situation ? Mon dictionnaire est-il bien commencé ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Formalisation graphique des algorithmes
    Par David R. dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 08/12/2012, 10h21
  2. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18
  3. [langage] comment créer des fichiers ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2002, 16h33
  4. Comparer des fichiers de données : Quel Langage ?
    Par Anonymous dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 24/04/2002, 22h37
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo