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 :

Du bon usage des langues [MCD]


Sujet :

Schéma

  1. #1
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut Du bon usage des langues
    Bonjour à tous.

    J'essaie de faire un MCD "propre" ayant une partie "tables de références".
    Ces tables sont sous la forme : "Code - Libellé" (cf . Image 1)

    ex : Table des "Types"
    T1;Nom Type 1
    T2;Nom Type 2
    etc..

    Je voudrais intégrer proprement la notion de langues (traduction des libelles)
    Naturellement j'arrive à un MCD comme celui décrit dans l'image 2
    Avec 2 entités supplémentaires (Libelle et Langue) et une association portant l'information de "libelle traduit"
    Mes entités de références sont alors en lien avec le 'Libelle'

    Lors du passage du MCD au MPD j'obtiens logiquement une table de 'libelle' qui ne contient que des ID et dont l'utilité est nulle...

    Est-ce mon MCD qui est erroné ou dois-je "forcer" dans mon MPD les associations avec la table "Libelle_langue" et détruire la table "libellé" ?

    merci de vos conseils avisés
    Images attachées Images attachées    

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour GAEREL,

    Je ne connais pas très bien le formalisme que tu utilises, mais je pense que ton MCD est erroné.

    Suggestion (dans JMerise) :



    Pas trop le temps de commenter, ce soir.
    Images attachées Images attachées  

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 121
    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 : 8 121
    Points : 31 642
    Points
    31 642
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    @ Gaërel,

    Citation Envoyé par GAEREL Voir le message
    Lors du passage du MCD au MPD j'obtiens logiquement une table de 'libelle' qui ne contient que des ID et dont l'utilité est nulle...
    Est-ce mon MCD qui est erroné ou dois-je "forcer" dans mon MPD les associations avec la table "Libelle_langue" et détruire la table "libellé" ?
    Si vous faites disparaître la table LIBELLE, les clés étrangères portées par les tables Type de truc et Categorie de machin devront faire référence à la clé primaire de la table LIBELLE_LANGUE, donc à la paire d’attributs {CodeLangue, IdLibelle}, et la table TYPE de truc ressemblera à ceci :

    IdType    CodeLangue    IdLibelle
         1    fr                    1
         1    en                    1
         2    fr                    2
         2    en                    2
         3    fr                    3
         3    en                    3
       ...    ...                 ...
    C'est-à-dire que chaque type de truc devra désormais faire référence à la table LIBELLE_LANGUE autant de fois qu’il y a de langues (avec pour conséquence que l'attribut CodeLangue devra participer à la clé primaire de la table Type de truc en compagnie de IdType ).

    En fait quand vous dites que l’utilité de la table LIBELLE est nulle, vous allez un peu vite, car cette table est un point d’ancrage, une référence qui vous permet justement de faire abstraction des langues au niveau de la table Type de truc, c'est-à-dire de ne pas multiplier le nombre de lignes de cette table par le nombre de langues utilisées par l’application.


    @Richard,

    Puisque vous établissez une ternaire entre les entités-types TYPE, CATEGORIE et TABLE_CHAMP, par définition elles ne sont pas indépendantes les unes des autres : un type entretient une relation avec une catégorie en même temps qu’avec un champ de table. Exemple :
    — Le champ H1 est lié au moins et au plus au type T1 et au moins et au plus à la catégorie C1.

    — Le type T1 est lié au plus au champ H1 et au plus à la catégorie C1.

    — La catégorie C1 est liée au plus au champ H1 et au plus au type T1.

    Mais je ne sache pas que la dépendance que vous avez établie entre TYPE et CATEGORIE fasse partie du corpus de règles inféré du MCD de Gaërel.

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Fsmrel,

    Citation Envoyé par Fsmrel
    une ternaire entre les entités-types TYPE, CATEGORIE et TABLE_CHAMP, par définition elles ne sont pas indépendantes les unes des autres : un type entretient une relation avec une catégorie en même temps qu’avec un champ de table.
    ==> non, il n'y aucune dépendance. Mais, je n'avais pas trop le temps de développer, hier. Je m'y colle maintenant :

    Le contenu des tables serait le suivant :

    Type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Id
    --
    1
    2
    3
    4
    ...

    Categorie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Id
    --
    1
    2
    3
    4
    5
    ...
    Table_Champ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Table        Id_Element_Table
    --------     -----------------
    "Type"       1
    "Type"       2
    "Type"       3
    "Categorie"  1
    "Type"       4
    "Categorie"  2
    "Categorie"  3
    "Categorie"  4
    "Categorie"  5
    ...
    Langue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IdLangue  Nom_Langue
    --------  ---------------
    1         Français
    2         Anglais
    3         Espagnol
    ...
    Table_Champ_Langue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Table        Id_Element_Table IdLangue  Texte
    --------     ---------------- --------  ------------------------------
    "Type"       1                1         Libellé type1 en français
    "Type"       2                1         Libellé type2 en français
    "Type"       3                1         Libellé type3 en français
    "Type"       4                1         Libellé type4 en français
    "Categorie"  1                1         Libellé catégorie1 en français
    "Categorie"  2                1         Libellé catégorie2 en français
    "Categorie"  3                1         Libellé catégorie3 en français
    "Categorie"  4                1         Libellé catégorie4 en français
    "Categorie"  5                1         Libellé catégorie5 en français
    "Type"       1                2         Libellé type1 en anglais
    "Type"       2                2         Libellé type2 en anglais
    "Type"       3                2         Libellé type3 en anglais
    "Type"       4                2         Libellé type4 en anglais
    "Categorie"  1                2         Libellé catégorie1 en anglais
    "Categorie"  2                2         Libellé catégorie2 en anglais
    "Categorie"  3                2         Libellé catégorie3 en anglais
    "Categorie"  4                2         Libellé catégorie4 en anglais
    "Categorie"  5                2         Libellé catégorie5 en anglais
    "Type"       1                3         Libellé type1 en espagnol
    "Type"       2                3         Libellé type2 en espagnol
    "Type"       3                3         Libellé type3 en espagnol
    "Type"       4                3         Libellé type4 en espagnol
    "Categorie"  1                3         Libellé catégorie1 en espagnol
    "Categorie"  2                3         Libellé catégorie2 en espagnol
    "Categorie"  3                3         Libellé catégorie3 en espagnol
    "Categorie"  4                3         Libellé catégorie4 en espagnol
    "Categorie"  5                3         Libellé catégorie5 en espagnol
    ...
    Mais, sans doute, n'est-ce pas très académique, côté Merise...

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Je ne connais rien dans ces MCD et autres, mais je vous explique un peu comment moi je fais - et ferais :


    • Mes objets référenceraient des choses comme "Type1_L", "Type2_L", et...

    • J'aurais ensuite un fichier, une table, ou ce que vous voulez, multilingue, du style

      langages=français,english,español,...

      Type1_L = { "Oui", "Yes", "Si" ..}
      ...
      ou

      langages=français,english,español,...
      et
      français.txt
      Type1_L Oui
      ..
      english.txt
      Type1_L Yes
      ..

    • Et 2 fonctions : setlanguage et gettext ( Char_ID ) (par exemple gettext("Type1_L"))..


    M'enfin, hein, ça c'est juste mon idée ..

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Souviron34,

    Hum... pas très pratique à exploiter... par exemple (entre autres) :

    langages=français,english,español,...

    Type1_L = { "Oui",, "Si", ..} ==> pas encore de traduction en anglais ;
    Type2_L = { "Oui", "Yes",, ..} ==> pas encore de traduction en espagnol ;
    Type3_L = { ,, "Si", ..} ==> pas encore de traduction en fraçais et en anglais ;
    Type4_L = { "Oui",,, ..} ==> pas encore de traduction en anglais et en espagnol ;
    ...
    ==> il faut jouer avec les virgules...

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    euh non....

    Il suffit de ne pas inclure le langage dans la liste


    Moi j'ai déjà fait ça pour un soft obligatoirement bilingue - voire trilingue - en dynamique, et ça marche parfaitement..

  8. #8
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    Merci de vos réponses rapides

    @fsmrel
    Je vais effectivement garder mon entité centrale des identifiants.
    L'argument suivant m'a convaincu :
    car cette table est un point d’ancrage, une référence qui vous permet justement de faire abstraction des langues
    @Richard_35
    A l'inverse j'ai moi aussi un peu de mal à comprendre votre formalisme...
    L'association "Cataloguer" ne va elle pas entraîner la création d'une table supplémentaire lors du passage au MLD puis au MPD ???
    J'essaie de simplifier... pas d'en rajouter..

    @souviron34
    Je travaille dans un environnement international.
    Nos logiciels gèrent (à ce jour) déjà 7 langues différentes et des centaines de libellés
    Je me dois d’être donc le plus "dynamique" possible, rien en dur dans le code.
    L'ajout de nouveaux libellés et de nouvelles langues doit se faire sans modification du code.

    @Pour tous
    Ma question est plus une question de fond sur la bonne conceptualisation d'un tel problème.
    Je connais (et ai déjà mis en place) la solution technique.
    Plus que "quel est le format des tables" ma question était "quel est le bon MCD ?"

  9. #9
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour GAEREL,

    Citation Envoyé par GAEREL
    A l'inverse j'ai moi aussi un peu de mal à comprendre votre formalisme...
    ==> je comprends. Peut-être qu'en étudiant le contenu des tables, ce sera plus parlant.


    Citation Envoyé par GAEREL
    L'association "Cataloguer" ne va elle pas entraîner la création d'une table supplémentaire lors du passage au MLD puis au MPD ???
    ==> normalement, non : étudies le contenu des tables.


    Citation Envoyé par GAEREL
    J'essaie de simplifier... pas d'en rajouter..
    ==> la simplification ne se mesure pas au nombre de tables.


    Citation Envoyé par GAEREL
    Je connais (et ai déjà mis en place) la solution technique.
    Plus que "quel est le format des tables" ma question était "quel est le bon MCD ?"
    ==> le MCD doit venir avant la mise en place de la solution technique. Donc, a fortiori, avant la création des tables. Essayer de faire correspondre un MCD avec des tables déjà créées semble hasardeux...

  10. #10
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 121
    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 : 8 121
    Points : 31 642
    Points
    31 642
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par GAEREL Voir le message
    quel est le bon MCD ?
    Le vôtre.

    Remplacez quand même par 1,N la cardinalité 0,N portée par la patte connectant LIBELLE et LIBELLE_LANGUE.

  11. #11
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    Merci.

    Bon week-end.

  12. #12
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 121
    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 : 8 121
    Points : 31 642
    Points
    31 642
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par Richard_35 Voir le message
    ==> non, il n'y aucune dépendance.
    Sur la base de votre exemple, la ternaire n’a évidemment pas lieu d’être.

    Le MLD inféré de votre exemple est le suivant :





    Il n’y a pas de clé étrangère pour brancher la table TABLE_CHAMP avec la table TYPE d’une part et la table CATEGORIE d’autre part, sinon il faudrait que chaque valeur appartenant à la colonne IdElementTable de la table TABLE_CHAMP soit aussi une valeur appartenant à la colonne TypeId de la table TYPE, or la valeur 5 appartenant à la colonne IdElementTable de la table TABLE_CHAMP n’est pas une valeur appartenant à la colonne TypeId de la table TYPE.

    Par rétroconception le MCD devient le suivant :




    Et reconnaissez que ça n'est pas très orthodoxe, ça ressemble à du trapèze sans filet...

  13. #13
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonsoir Fsmrel,

    Citation Envoyé par Fsmrel
    Et reconnaissez que ça n'est pas très orthodoxe, ça ressemble à du trapèze sans filet...
    ==> je le reconnais volontiers :
    Citation Envoyé par Richard_35
    Mais, sans doute, n'est-ce pas très académique, côté Merise...
    ==> du fait que nous travaillons, là, sur le nom des tables. Il est bien difficile, alors, de faire rentrer l'engin dans une solution merisienne...

    Merci quand même d'avoir étudier la solution.

  14. #14
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    J'en rajoute une couche : merci à vous deux d'avoir travaillé sur ce sujet

  15. #15
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 121
    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 : 8 121
    Points : 31 642
    Points
    31 642
    Billets dans le blog
    16
    Par défaut
    Merci aussi Gaërel,

    Alors n'oubliez pas de voter pour Richard et François qui ont bien transpiré !

  16. #16
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    N'oublions pas Souviron34 qui a pris la peine d'étudier le sujet et de proposer une solution.

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

Discussions similaires

  1. [2.x] Du bon usage des FormEvents
    Par exotux dans le forum Symfony
    Réponses: 4
    Dernier message: 23/01/2014, 12h39
  2. [2.x] Bon usage des Bundle ?
    Par XIII2008 dans le forum Symfony
    Réponses: 7
    Dernier message: 02/03/2012, 15h48
  3. Bon usage des Sessions
    Par Rezouce dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2008, 11h47
  4. [Delphi - Firebird] Comment faire bon usage des transactions?
    Par Lili21 dans le forum Connexion aux bases de données
    Réponses: 2
    Dernier message: 07/05/2007, 21h59
  5. Quel est le bon usage des fichiers "*.bpk" ?!
    Par bnadem35 dans le forum C++Builder
    Réponses: 3
    Dernier message: 12/09/2006, 18h31

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