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

Diagrammes de Classes Discussion :

Problème de modélisation UML en vue de créer une base de donnée.


Sujet :

Diagrammes de Classes

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Problème de modélisation UML en vue de créer une base de donnée.
    Pour une base de donnée touristique, les règles sont:

    Departement contient des Communes qui contiennent des Lieux

    Un Hotel appartient à un lieu et possède un site Web

    Un site Web peut être lié à une Commune, ou non !

    Ce qui donne ce diagramme:

    Nom : siteweb.png
Affichages : 4243
Taille : 6,4 Ko


    Il n'y a pas un problème avec la boucle Commune Site Web Hotel Lieu ?

    Est ce qu'il existe une meilleure solution ?

  2. #2
    Membre régulier Avatar de theocbr
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2019
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2019
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    Je ne vois pas de soucis quelconque, mais rajoute des Id à tes tables !
    Tu pourrais également rajouter des associations pour y voir plus claire !

    Pourquoi penses tu qu'il y a un problème ?
    “L’homme est la mesure de toute chose” Protagoras
    "Goutte après goutte l'eau finit par creuser le marbre"

    Pensez à mettre !
    Si un message vous a aidé , pensez à mettre !

    Mon Twitter
    Ma Veille Techno

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Via le chemin Hotel > Lieu > Commune, , on peut atterrir sur la commune C1,

    Via le chemin Hotel > SiteWeb > Commune, on peut atterrir sur la commune C2.

    Si C1 et C2 doivent désigner la même commune, il y a un problème. Si la base de données utilisée est du genre SQL, ça pourra être résolu au moyen d’une contrainte (mise en oeuvre par exemple d’un trigger affecté à la table Hotel).

     
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Problème de modélisation d'une base de donnée.
    Merci d'avoir pris le temps de lire le schéma.

    J'ai rajouté les id sauf pour la table Commune ou le contexte permet d'utiliser la chaîne Commune comme clé primaire. (une particularité du système considéré)

    En fait le problème que je soupçonnais s'est révélé pleinement avec la contribution de "fsmrel" ... et avec un rapide maquettage fait sur Base dans Libre Office.

    Le cœur du problème c'est qu'on peut avoir deux lieux identiques (dont le nom est identique) situés dans deux communes différentes.

    Exemple fictif dans le Gard: (Nimes, Canet) (Bagnols, Canet)


    Pour le problème des lieux dont le nom est identiques, une précédente solution (dans la version ancienne de la base datée de 20 ans ) consistait à définir une table séparée:

    Relation(idLieu, Commune, Lieu)

    Ensuite on définit chaque objet à partir de son idLieu, solution qui marche bien mais oblige à gérer une table supplémentaire et pas mal de jonglage dans les formulaires.

    Evidemment l'ancienne base étant dans Access et la nouvelle dans Base, je pourrais faire un transfert et basta. Mais c'est pas possible parce qu'il y avait des erreurs de conception gênantes et que je dois tout réécrire. Et tant qu'à faire si je peux simplifier le système (Commune, Lieu) ...

    J'en suis arrivé provisoirement à ce schéma et ca ne va toujours pas !

    Nom : tests.png
Affichages : 2181
Taille : 10,0 Ko


    Ce qui m'intéresserait c'est de voir les différentes solutions possibles ...

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 965
    Points : 30 777
    Points
    30 777
    Billets dans le blog
    16
    Par défaut
    Bonsoir passant13,


    Pour être plus à l’aise, je bascule vers Looping (gratuit) qui permet de représenter des MCD aussi bien que des diagrammes de classes.

    Le diagramme de classes ci-dessous :

    Nom : passant13_uml_01.png
Affichages : 1825
Taille : 18,9 Ko

    est issu du MCD :

    Nom : passant13_mcd_01.png
Affichages : 1732
Taille : 17,9 Ko

    Je rappelle que les cardinalités (multiplicités) du MCD sont inversées par rapport à celles du diagramme de classes.
    La cardinalité 1,1(R) portée par la patte connectant COMMUNE et COM_DEP se lit : la commune C est identifiée relativement au département D, ce qui veut dire qu’au stade SQL, la clé primaire de la table COMMUNE sera la paire {departementId, communeId}. En plus, l’identification relative a donné lieu à une composition UML.



    Citation Envoyé par passant13 Voir le message
    J'ai rajouté les id sauf pour la table Commune ou le contexte permet d'utiliser la chaîne Commune comme clé primaire. (une particularité du système considéré)
    Utiliser des propriétés naturelles (par exemple Commune) pour les clés primaires a causé des ravages dans le passé et ça n’est pas fini. L’attribut CommuneId du MCD (ou idCommune, peu importe le mode de nommage) est artificiel, et donnera lieu en SQL à la clé primaire de la table COMMUNE, tandis que le code de la commune (communeCodeInsee ci-dessus) fera l’objet d’une clé alternative (contrainte "UNIQUE" en SQL). L’attribut communeId étant artificiel, il s’en suit qu’il ne doit avoir aucune valeur sémantique, il est donc invariant et garantit la validité des liens entre les tables SQL (clés étrangères référençant les clés primaires). Les valeurs des identifiants artificiels n’ont pas à être utilisées par les applications, lesquelles, pour accéder aux données useront des clés alternatives telles que {departementNumero}, {communeCodeInsee}, {lieuCode}, etc.


    Citation Envoyé par passant13 Voir le message
    Le cœur du problème c'est qu'on peut avoir deux lieux identiques (dont le nom est identique) situés dans deux communes différentes.
    Dans les diagrammes ci-dessus, un lieu détermine une commune, ce qui n’interdit aucunement que le même nom de lieu existe pour deux communes différentes. Exemple :

    COMMUNE {departementId   communeId   communeCodeInsee   ...}
             5               1           30189              ...
             5               4           30028              ...
    
    LIEU {departementId    communeId   lieuId   lieuCode   lieuNom   ...}
          5                1           1        C0041      Canet     ...
          5                4           1        C0178      Canet     ...
    
    Les attributs soulignés sont les éléments de la clé primaire des tables.


    Citation Envoyé par passant13 Voir le message
    J'en suis arrivé provisoirement à ce schéma et ca ne va toujours pas !
    Il faut faire disparaître l’attribut #Commune de la classe Lieu, il sera accessible en SQL par une requête de jointure entre les tables COMMUNE et lieu. Exemple :

    SELECT communeCodeInsee 
    FROM   LIEU AS x JOIN COMMUNE AS y ON x.departementId = y.departementId
                                      AND x.communeId = y.communeId
    WHERE  lieuCode = 'C0041'
    ;
    
    Vous observerez qu’on ne se sert absolument pas des valeurs des attributs artificiels departementId, communeId, on n’utilise que les valeurs des attributs naturels (lieuCode dans cet exemple).

    En passant, à partir de cette de cette requête vous pouvez concevoir une vue SQL (qui n’est jamais qu’une table virtuelle) :

    CREATE VIEW LIEU_COMMUNE (communeCodeInsee, lieuCode, lieuNom) 
    AS
        SELECT communeCodeInsee, lieuCode, lieuNom 
        FROM   LIEU AS x JOIN COMMUNE AS y ON x.departementId = y.departementId
                                     AND x.communeId = y.communeId
    ; 
    On obtient le résultat en accédant à la vue :

    SELECT communeCodeInsee 
    FROM   LIEU_COMMUNE
    WHERE  lieuCode = 'C0041'
    ;
    
    L’emploi des vues plutôt que des tables devrait vous faciliter la vie pour les formulaires et compagnie.

    On reviendra plus tard sur l’histoire des sites Web.


    Annexe :

    Code SQL généré par Looping, hors Web (notez la présence de "UNIQUE")

    CREATE TABLE DEPARTEMENT(
       departementId INTEGER,
       departementNumero VARCHAR(3) NOT NULL UNIQUE,
       departementNom VARCHAR(32) NOT NULL UNIQUE,
       PRIMARY KEY(departementId)
    );
    
    CREATE TABLE COMMUNE(
       departementId INTEGER,
       communeId INTEGER,
       communeCodeInsee VARCHAR(6) NOT NULL UNIQUE,
       communeNom VARCHAR(48) NOT NULL,
       PRIMARY KEY(departementId, communeId),
       FOREIGN KEY(departementId) REFERENCES DEPARTEMENT(departementId)
    );
    
    CREATE TABLE LIEU(
       departementId INTEGER,
       communeId INTEGER,
       lieuId INTEGER,
       lieuCode VARCHAR(8) NOT NULL UNIQUE,
       lieuNom VARCHAR(48) NOT NULL,
       PRIMARY KEY(departementId, communeId, lieuId),
       FOREIGN KEY(departementId, communeId) REFERENCES COMMUNE(departementId, communeId)
    );
    
    CREATE TABLE HOTEL(
       hotelId INTEGER,
       hotelCode VARCHAR(8) NOT NULL UNIQUE,
       hotelNom VARCHAR(48) NOT NULL,
       departementId INTEGER NOT NULL,
       communeId INTEGER NOT NULL,
       lieuId INTEGER NOT NULL,
       PRIMARY KEY(hotelId),
       FOREIGN KEY(departementId, communeId, lieuId) REFERENCES LIEU(departementId, communeId, lieuId)
    ); 
     
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Problème de modélisation.
    A part merci je ne peux rien ajouter d'autre car il va me falloir un petit moment pour assimiler tout ca et faire des tests !

    Je dispose de Looping mais j'ignorais qu'il pouvait produire le source SQL. Mes diagrammes viennent de StarUML qui me suffit car je travaille directement en UML.

    Pour le problème de la table siteWeb, je reviens dès que j'ai digéré toutes ces infos

    Cordialement.

  7. #7
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour,

    Modéliser directement en UML un schéma relationnel de base de données peut induire quelques difficultés en termes de conception, car le formalisme des diagrammes de classes UML n'a pas été conçu pour ça au départ.
    L'époque où UML devait tout remplacer est révolue, et les concepteurs de bases de données reviennent de plus en plus vers une modélisation entité-association qui est parfaitement adaptée à la génération des modèles logiques de données et au code SQL qui va avec.
    Bon courage pour votre projet : avec fsmrel, vous êtes entre de très bonnes mains !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

  8. #8
    Membre éprouvé

    Homme Profil pro
    Consultant ERP
    Inscrit en
    Janvier 2013
    Messages
    372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 372
    Points : 1 202
    Points
    1 202
    Par défaut Modélisation
    Côté UML sur le site il y a aussi bouml,
    je contribue à pgModeler (mySQLWorkbench pour PostgreSQL) qui est super chouette!

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Problème de modélisation. [RESOLU]
    Voilà la solution retenue.

    J'ai ajouté un identifiant à toutes les classes. En UML tout objet a un identifiant et souvent on l'omet en conception, mais c'est plus clair avec.

    Pour les lieux j'ai retenu les clés primaires: Département(département) Commune(département, commune) et Lieu(département, commune, lieu)

    C'est un peu lourd mais en effet ca marche.

    Pour les sites Web le couple (département, commune) pour éviter les doublons.

    Et un grand merci aux aidants. Et je suis en train de lire "Modélisation Conceptuelle des Données, une approche pragmatique" pour me perfectionner !

    PS. Le système complet fait 19 tables et produit des fiches touristiques ou des cartes (genre carteslozere.free.fr). De quoi bien occuper ma retraite

  10. #10
    Membre émérite
    Avatar de Paprick
    Homme Profil pro
    Professeur des Universités
    Inscrit en
    Juin 2019
    Messages
    650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Professeur des Universités
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2019
    Messages : 650
    Points : 2 657
    Points
    2 657
    Par défaut
    Citation Envoyé par passant13 Voir le message
    je suis en train de lire "Modélisation Conceptuelle des Données, une approche pragmatique" pour me perfectionner !
    Excellent choix ! Je plaisante ! Mais, en tout cas, n'hésitez pas à me dire ce que vous en avez pensé.
    Bonne lecture !
    Patrick Bergougnoux - Professeur des Universités au Département Informatique de l'IUT de Toulouse III
    La simplicité est la sophistication suprême (Léonard de Vinci)
    LIVRE : Modélisation Conceptuelle de Données - Une Démarche Pragmatique
    Looping - Logiciel de modélisation gratuit et libre d'utilisation

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

Discussions similaires

  1. Modélisation MERISE pour créer une base de donnée ?
    Par Mika2008 dans le forum NetBeans
    Réponses: 3
    Dernier message: 20/02/2010, 13h28
  2. Créer une base de Données en Arabe
    Par elmessoussi dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 26/07/2006, 14h52
  3. Réponses: 5
    Dernier message: 07/11/2005, 12h11
  4. Comment créer une base de donnée Access ?
    Par Soulama dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/10/2005, 15h56
  5. créer une base de donnée à partir d'un script
    Par illegalsene dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/08/2005, 15h08

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