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 :

Traduction d'attributs multilingues [MLD]


Sujet :

Schéma

  1. #1
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut Traduction d'attributs multilingues
    Bonsoir,

    Je sors de mes étoiles variables pour vous soumettre un autre problème concernant la traduction d'attributs.

    Dans une base de données classique de catalogue (produits + gammes de produits + catégories + caractéristiques des produits + ... ), je dois insérer les traductions de tous les éléments textuels, notamment les intitulés des produits et des gammes produits ainsi que les descriptions des produits et des gammes de produits ; je pense que cela est généralisable à tous les autres attributs à traduire (comme les noms des catégories, les caractéristiques etc.

    J'ai étudié les différentes approches déjà soumises dans le forum :
    - https://www.developpez.net/forums/d6...d-multilingue/
    - https://www.developpez.net/forums/d1...usage-langues/

    Je suis arrivé aux solutions suivantes :

    Solution 1

    Nom : solution1.png
Affichages : 558
Taille : 43,4 Ko

    Solution 2

    Nom : solution2.png
Affichages : 537
Taille : 49,4 Ko

    Est-ce que ces deux solutions sont justes ?
    Je pense que la deuxième apporterait plus de souplesse et plus de possibilités de généralisation à toutes les entités de la base mais je me demande s'il n'y a pas de problèmes de cardinalités. Qu'en pensez-vous ?
    Est-ce qu'une troisième solution, basée sur l'héritage, ne serait pas envisageable ? Un intitulé de produit et un intitulé de gamme héritant d'une entité parente (intitulé). Idem pour les descriptions.

    Merci à vous
    Vincent

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Sur le premier schéma et si je le lis correctement...

    Un produit a un a plusieurs libellés et descriptions. => OK
    Un libellé ou une description ne sont que pour un produit. => OK
    Un libellé ou une description correspondent à zéro ou une langue. => Ne faudrait-il pas "à une et une seule langue" ? Un libellé ou une description non rattachée à une langue, ce serait bizarre, non ?
    Une langue traduit de un à plusieurs libellé ou description de produit ou de gamme. => Je mettrais par contre là "traduit de zéro à plusieurs...". Vous pouvez avoir la référence de toutes les langues mais pas forcément avoir encore traduit tous les libellés ou descriptions.
    Un produit appartient à zéro à une gamme. => Êtes-vous sûr qu'il existe des produits n'appartenant à aucune gamme ?
    Une gamme contient de un à plusieurs produits. => Ne pouvez-vous créer une gamme avant d'y associer les produits ?

    Remarques en passant :
    1) Je n'aimerais pas avoir à taper une référence de produit de 45 caractères !
    2) Une gamme ne pourrait-elle pas être codée (produit informatique : code INF) ?

    Le second schéma me semble inutilement compliqué... et du coup, le premier aussi !

    En MCD, je verrais cela ainsi :
    Produit -1,1----avoir----0,1- Libelle -1,1----traduire----0,n- Langue
    |-----------1,1----avoir----0,1- Description -1,1----traduire----0,n-|

    Idem pour Gamme, associée aux mêmes entités types Libellé et Description.
    Avec des contraintes appropriées permettant d'exclure qu'un libellé ou une description de Produit soit aussi associé à une gamme et vice-versa, je pense que ça fonctionne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  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 000
    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 000
    Points : 30 895
    Points
    30 895
    Billets dans le blog
    16
    Par défaut
    Salve Vincent et Philippe,


    La solution 1 a l’avantage (au moins apparent) de la simplicité.

    Mais comme le fait observer Philippe, pourquoi cette cardinalité 0,1 portée par les pattes côté LANGUE ?

    La solution 2 comporte une contradiction par rapport à la solution 1 :

    Selon la solution 1, un LIBELLE_GAMME peut facultativement faire référence à au plus une LANGUE.

    Selon la solution 2, un LIBELLE_GAMME fait référence à au moins et au plus un LIBELLE, lequel fait référence à au moins et au plus une LANGUE, donc un LIBELLE_GAMME fait référence à au moins et au plus une LANGUE. Toutes choses égales, ceci vaut pour tous les libellés et descriptions.

    La solution 2 comporte vraisemblablement une redondance :

    Si l’attribut type_libelle de la table TYPE_LIBELLE sert à distinguer les libellés des produits de ceux des gammes, alors oui, il y a redondance avec l’existence des tables LIBELLE_GAMME et LIBELLE_PRODUIT. En effet, en l’état du modèle, qu’est-ce qui empêche qu’une occurrence de LIBELLE_PRODUIT fasse référence à une occurrence de LIBELLE, mais avec type_libelle_id_type_libelle = "gamme" ?

    Par ailleurs, la solution 2 devrait comporter une contrainte d’exclusion entre LIBELLE_GAMME et LIBELLE_PRODUIT, à moins que tel libellé puisse servir aussi bien pour un libellé de gamme qu’un libellé de produit (mais à quoi ressemble alors la valeur prise par type_libelle_id_type_libelle ?) Toutes choses égales, ceci vaut pour DESCRIPTION GAMME et DESCRIPTION PRODUIT.

    Dans tous les cas, cela se terminera avec un trigger garantissant la validité de la redondance. Vous me direz que dans la FAQ Merise on trouve un exemple avec ce genre de redondance, mais vous comprendrez que je ne peux pas être d’accord, car il n’y est fait aucune mention du contrôle d’icelle.

    Une incidente quant à la FAQ :

    Je pense qu’un bricoleur maladroit a modifié ce qu’a écrit Dominique Nanci (RIP). Le bricoleur s’exprime dans un français plus que douteux, en effet quand on lit :

    « cela exige que l'héritage est un partition »

    « ça dépend comment la base de données gère ces vides. »

    On peut avoir des doutes... Et je ne parle pas de la ponctuation. Par contre, Dominique Nanci connaissait sa langue.

    En passant, j’ignorais qu’une base de données pouvait gérer quelque chose...

    Etc.

    ------------ fin de l’incidente ------------------


    Pour en revenir à la solution 2 où LIBELLE_GAMME et LIBELLE_PRODUIT sont manifestement des spécialisations de LIBELLE, je trouve qu’elle n’offre qu’un bien maigre avantage en réduisant les associations avec LANGUE, alors que les redondances qui l’accablent sont sources d’anomalies si l’on n’y prend garde.


    Est-ce qu'une troisième solution, basée sur l'héritage, ne serait pas envisageable ? Un intitulé de produit et un intitulé de gamme héritant d'une entité parente (intitulé)
    Quelle différence avec la solution 2 ?


    @Philippe,

    Quand tu écris :

    Produit -1,1----avoir----0,1- Libelle -1,1----traduire----0,n- Langue
    Un produit n’aurait donc qu’un seul libellé ?
    (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
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    @Philippe,

    Quand tu écris :

    Produit -1,1----avoir----0,1- Libelle -1,1----traduire----0,n- Langue

    Un produit n’aurait donc qu’un seul libellé ?
    Mea culpa... et content de constater que tes yeux vont mieux !

    Produit -1,n----avoir----0,1- Libelle -1,1----traduire----0,n- Langue
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 000
    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 000
    Points : 30 895
    Points
    30 895
    Billets dans le blog
    16
    Par défaut
    Merci Philippe, hélas, pour le c’est cuit...
    (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
    Membre régulier
    Homme Profil pro
    Webmaster
    Inscrit en
    Septembre 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2016
    Messages : 67
    Points : 90
    Points
    90
    Par défaut
    Bonjour Philippe et François

    J'admet humblement que mes MLD n'ont pas la rigueur requise
    En fait, je souhaitais principalement soumettre deux approches de résolution de mon problème plutôt que soumettre des MLD rigoureux. Je m'aperçois qu'il est quand même plus efficace de faire preuve de rigueur.

    Un libellé ou une description correspondent à zéro ou une langue. => Ne faudrait-il pas "à une et une seule langue" ? Un libellé ou une description non rattachée à une langue, ce serait bizarre, non ?
    Peste soit ma distraction ! Je suis encore dans les cardinalités Merise alors que ce MLD est réalisé sous MySQL Workbench...
    Effectivement :
    - un libellé (une description) est rattaché à une langue et une seule.
    - une langue peut posséder 0 ou plusieurs libellés
    Je vais modifier le MLD

    Un produit appartient à zéro à une gamme. => Êtes-vous sûr qu'il existe des produits n'appartenant à aucune gamme ?
    Oui, cela fait partie des règles de gestion (que je n'ai pas écrites... honte sur moi). Il est en effet possible qu'un produit ne fasse pas partie d'une gamme.

    Une gamme contient de un à plusieurs produits. => Ne pouvez-vous créer une gamme avant d'y associer les produits ?
    Je souhaite pouvoir indiquer qu'il n'existe pas de gamme sans produit.

    Concernant le typage des attributs, j'ai fait au plus simple, en prenant les valeurs par défaut de MySQL Workbench et sans faire preuve d'aucune rigueur.

    Philippe, je pense que votre solution est sans doute la plus logique.


    Pour la solution 2, j'admet qu'elle est très alambiquée. Il s'agit d'un essai.
    En fait, je cherche à "mutualiser" les entités du schéma 1 puisque la plupart des entités et des attributs sont redondants : LIBELLE_GAMME/LIBELLE_PRODUIT et DESCRIPTION_GAMME/DESCRIPTION_PRODUIT. Virtuellement, on peut constater cette redondance pour toutes les autres entités possibles du catalogue (LIBELLE_CATEGORIE/DESCRIPTION_CATEGORIE, LIBELLE_CARACTERISTIQUE/DESCRIPTION_CARACTERISTIQUE, etc.). La seule variation porte sur le type d'entité concernée par le libellé ou la description.
    Du coup, je me demandais s'il n'existait pas une solution permettant de rassembler dans une même entité LIBELLE et dans une entité DESCRIPTION tous les libellés et toutes les descriptions possibles, quelles que soient les langues, et en définissant un TYPE DE LIBELLE et un TYPE DE DESCRIPTION ; une vue permettant éventuellement de filtrer les libellés/descriptions par langue.

    Vincent

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Virtuellement, on peut constater cette redondance pour toutes les autres entités possibles du catalogue (LIBELLE_CATEGORIE/DESCRIPTION_CATEGORIE, LIBELLE_CARACTERISTIQUE/DESCRIPTION_CARACTERISTIQUE, etc.). La seule variation porte sur le type d'entité concernée par le libellé ou la description.
    En corrigeant mon MCD selon la remarque pertinente de fsmrel, j'ai déjà donné la réponse à la problématique des libellés à traduire pour beaucoup de choses :
    Citation Envoyé par CinéPhil
    En MCD, je verrais cela ainsi :
    Produit -1,n----avoir----0,1- Libelle -1,1----traduire----0,n- Langue
    |-----------1,n----avoir----0,1- Description -1,1----traduire----0,n-|

    Idem pour Gamme, associée aux mêmes entités types Libellé et Description.
    Avec des contraintes appropriées permettant d'exclure qu'un libellé ou une description de Produit soit aussi associé à une gamme et vice-versa, je pense que ça fonctionne.
    Idem donc pour tout libellé ou toute description de quoi que ce soit.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2016, 11h12
  2. [MySQL] Sit multilingue : traduction dynamique des noms de page ?
    Par frakosun dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/07/2009, 12h53
  3. Traduction de "attribut java" en anglais
    Par piotrr dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 31/05/2008, 10h42

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