|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
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.
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
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 ?
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#3 | ||||
|
Expert Confirmé
![]() Inscription : mai 2002 Messages : 1 669 ![]() |
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 :
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 :
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 |
||||
|
|
10
|
|
|
#4 | ||||||||
![]() ![]() |
Bonjour et bienvenue dans le monde des bases de données relationnelles !
Citation:
Citation:
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". Citation:
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 ? Citation:
Citation:
Voir mon billet de blog sur la bonne écriture des règles de gestion. Citation:
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. Citation:
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. Citation:
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||||||
|
10
|
|
|
#5 | |||||||
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
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:
Citation:
Citation:
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
__________________
C'est en respectant les autres que l'on se fait respecter. |
|||||||
|
|
00
|
|
|
#6 | |||||||
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
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:
Citation:
Citation:
Citation:
Citation:
Civilisation -1,n----localiser----0,n- Point localiser comporte alors deux attributs : debut et fin Citation:
Citation:
__________________
C'est en respectant les autres que l'on se fait respecter. |
|||||||
|
|
00
|
|
|
#7 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Quel logiciel gratuit de modélisation pouvez-vous me conseiller ? J'ai essayé OpenModelSphere qui semble sur-dimensionner par rapport à mes besoins.
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#8 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Bon j'ai trouvé. Je vais ré-écrire les associations.
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#9 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
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é ?
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#10 | |||
![]() ![]() |
J'ai corrigé le lien dans mon message précédent.
Je lis les associations... Citation:
Citation:
Citation:
Il y a peut-être un petit problème sur la dernière association. Selon ce schéma, une civilisation ne peut être localisée en un lieu qu'une seule fois. Ne peut-il exister une civilisation qui peut être localisée en X à une période, en partir puis y revenir à une autre période ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#11 | |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Citation:
Civilisation -n,n----------localiser--------0,n- Lieu Il me vient alors une question : en général pour une civilisation il y a un et un seul lieu invariant avec le temps, le fait d'avoir un lieu évoluant avec le temps est plutôt l'exception. Ce détail a-t-il sa place au moment de la modélisation. Plus généralement : une entité A est en relation avec 1 et une seule entité B mais pour un et un seul cas particulier, une entité A n'est en relation avec aucune entité B. Ce point doit-il se gérer à ce moment de la conception ou plus tard ?
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
|
00
|
|
|
#12 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Est-ce que DBDesigner peut-être intéressant pour modéliser ?
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Toujours pour le même projet :
Un pourtour est une liste de points (je dis bien liste et pas ensemble) car les points sont ordonnés. Si un point figure dans le pourtour il n'y figure qu'une seule fois. Comment représenter cela.
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#14 | |||||
![]() ![]() |
Citation:
Une civilisation est localisée dans plusieurs lieu et un lieu peut localiser plusieurs civilisation. Cette fois, il faudrait qu'une civilisation participe au moins deux fois à l'association. Je ne pense pas que ce soit ce que tu veux dire. Citation:
Citation:
A -1,1----associer----0,n- B Mais le cas où A n'est pas associé à un B ne peut pas respecter ce schéma. Il faut donc, dès la conception, faire ce MCD : A -0,1----associer----0,n- B Citation:
Je ne conseillerais pas ce logiciel à un débutant en modélisation car son schéma de base est le schéma Entity/Relationship qui est plus proche du MLD de Merise que du MCD et permet de faire facilement des erreurs. Tu peux par contre essayer Open Modelsphere. Citation:
Un pourtour est composé de points et un point peut entrer dans la composition de plusieurs pourtours. MCD : pourtour -1,n----composer----0,n- point Les tables SQL étant à considérer comme des ensembles, la notion de liste ordonnée doit être implémentée via une colonne qui définira l'ordre des points dans le pourtour. C'est donc une propriété portée par l'association. À noter que les bons SGBDR contiennent des outils pour enregistrer et manipuler des entités géographiques. En la matière, il vaut mieux utiliser Postgresql que MySQL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||
|
00
|
|
|
#15 | |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Pour le premier point : en fait ce sont les civilisations nomades qui peuvent voyager avant de se fixer quelque part. Exemple les wisigoths commencent à faire parler d'eux en Grèce, puis en Italie, en Aquitaine et enfin en Espagne.
Mais ces cas ne sont pas la majorité. Pour éviter l'interprétation inévitable quand on précise la réalité de ce que l'on parle j'ai préféré aborder le problème conceptuel avec cet exemple d'entité A lié à un et un seul B sauf pour un cas. Dans OpenModelSphere ils n'ont pas l'air d'accepter la multiplicité n,n à moins que ce ne soit ?,?. Est-il nécessaire voire utile de préciser dés cette phase de construction quel SGBD on pense utiliser (je ne suis pas du tout fixé). Comment indique-t'on sur le schéma l'attribut ordre pour l'association composer dans ce que tu as indiqué ? Citation:
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
J'ai vu que certains ont réussi à insérer le diagramme de leur MCD dans leur message. Comment font-ils ? Une copie d'écran ?
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
00
|
|
|
#17 | ||||
![]() ![]() |
Citation:
Comme je l'ai dit dans mon précédent message, n,n oblige toute civilisation à être localisée au moins deux fois. Si on met en oeuvre un mécanisme vérifiant cette contrainte dans la BDD, il faut donc aussi un mécanisme qui oblige à enregistrer au moins deux localisations en même temps qu'une nouvelle civilisation. Si vraiment tu tiens à cette cardinalité mini multiple, puisque n signifie plusieurs et que plusieurs commence à 2, la bonne cardinalité serait alors 2,n. Ça je crois que la méthode Merise le prévoit. Citation:
D'autre part, comme les logiciels de modélisation modernes sont capables de générer le MLD puis le code SQL de la BDD, plus tôt tu définis le SGBD que tu vas utiliser et plus tôt tu peux spécifier, dès le MCD, les types des données, lesquels peuvent avoir des psécificités selon le SGBD employé. Citation:
Citation:
Je crois qu'il y a une rubrique d'aide au forum en haut de la liste des forums.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||
|
00
|
|
|
#18 | |
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
En réponse au message de CinePhil la cardinalité de l'association localiser est bien de 1,n.
La modélisation telle qu'elle apparaît sous OpenModelSphere en image jointe . Ma base de données est donc réduite. Mon problème actuel est comment représenter une liste. CinePhil m'a expliqué mais j'ai du mal à exploiter sa réponse. Ainsi Citation:
Une autre question qui me vient au sujet des points. Deux solutions s'offrent à moi vu mes contraintes pour les latitudes et longitudes. Représenter les points par un entier seulement et calculer la latitude et la longitude à partir de ce nombre ou faire comme indiqué sur le schéma. Y-a-t'il une meilleure solution ?
__________________
C'est en respectant les autres que l'on se fait respecter. |
|
|
|
00
|
|
|
#19 | ||||||
![]() ![]() |
Citation:
Citation:
Citation:
Ta modélisation de l'entité type Point est bonne. Voyons ton MCD... Jusqu'à présent, nous n'avons abordé dans cette discussion que les parties : Paragraphe - Civilisation - Point - Pourtour Je découvre maintenant le reste. Citation:
Une civilisation appartient à un à plusieurs pays et un pays peut "être la propriété" d'une seule civilisation. N'y a t-il pas des pays qui ont vu se succéder plus d'une civilisation ? France : Gaulois, Romains, Francs avant de devenir des Français ? Citation:
Un pays peut avoir au plus un nom et un nom nomme de un à plusieurs pays. Encore récemment, des pays ont changé de nom, sans qu'ils changent forcément de frontières (pourtour). Zaïre => République Démocratique du Congo. Citation:
Un pays est limité par un seul pourtour et un pourtour limite de un à plusieurs pays. Au cours de l'Histoire, de nombreux pays ont changé de pourtour, sans forcément changer de nom, ou ont gardé leur pourtour et ont changé de nom, ou les deux en même temps ! Du fait de l'association entre pays et pourtour d'une part, et du chemin Pays - Civilisation - Point - Pourtour d'autre part, une civilisation peut être localiser en un point appartenant à un pourtour qui n'est celui d'aucun pays de cette civilisation. On appelle ça une boucle dans le MCD et c'est source d'incohérence potentielle de données. Je pense que tu devrais revoir toute cette partie du MCD. Soit tu définis qu'un pays est un certain pourtour d'une date de début à une date de fin et que durant cette période il peut porter plusieurs noms, soit tu définis qu'un pays a un nom d'une date de début à une date de fin et qu'il peut avoir plusieurs pourtours. Ensuite, puisque la civilisation appartient à un pays d'une date de début à une date de fin, il ne me semble pas très opportun de localiser une civilisation sur un point du pourtour, c'est à dire à sa frontière. Comme je l'ai dit, il existe dans les systèmes d'information géographiques intégrés aux SGBD des outils pour manipuler les polygones. Entre autre, je crois qu'il existe des outils pour calculer le barycentre d'un polygone et ainsi pouvoir écrire un texte centré sur ce point.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||||||
|
00
|
|
|
#20 | ||||||||
|
Membre du Club
![]() Inscription : janvier 2004 Messages : 144 ![]() |
Citation:
Bon ma conversion est faite rapidement et n'est peut-être pas juste ou peut être simplifiée mais je sais que c'est faisable. Ceci étant c'est un point secondaire. Citation:
Citation:
Pays -0,1----nommer----1,n- Nom Citation:
Pays -1,1----limiter----1,n- Pourtour Citation:
Citation:
Je n'ai pas compris ce problème de boucle. Je vais creuser ce point. Citation:
Citation:
De plus je pensais utiliser H2 qui a l'avantage de s'insérer dans un programme en java. L'utilisateur final qui a installé le programme installera en même temps H2 qui gérera seulement les accès en lecture à la base qui elle aussi est chargée en même temps que le programme.
__________________
C'est en respectant les autres que l'on se fait respecter. |
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com