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

PHP & Base de données Discussion :

optimisation table de translation


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut optimisation table de translation
    Bonjour,
    j'ai deux choix de concevoir une table de translation :

    1- une table qui contient la translation des langues dans un champs (chaque champ représente une langue)
    table translation (id, fr, en,....)

    2- une table pour chaque langue
    table translation_fr, translation_en,...etc.

    pour le premier cas, il faut lire uniquement toutes les lignes du champs adéquat de la langue en cours,
    pour le deuxième cas , il faut lire toutes les lignes de la table adéquate

    quelle est la solution la plus optimale pour la bonne gestion de mes ressources en particulier la mémoire ?

    merci.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Tu ne donnes pas beaucoup d'infos et ni comment tu comptes accéder aux traductions.

    Une 3e possibilité vers laquelle je tendrais avec une ligne par langue et, mettons, une clef d'accès en Français :

    language (§code, name)
    term (§key, §#language_code, value)

    Exemple :

    language
    'EN', 'English'
    'IT', 'Italiano'

    translation
    'Salut', 'EN', 'Hello'
    'Salut', 'IT', 'Ciao'

    On pourrait ajouter une 3e table "term" qui contiendrait les clefs d'accès et remplacer translation.key par translation.term_id.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut
    merci pour votre réponse, oui c'est ce que j'ai fait :
    cas 1 :
    table translation [id, fr, en,....] id=code de la variable à traduire, fr, en c'est le nom des champs contenant les valeur de chaque langue
    exemple id=cancel, fr=Annuler, en=Cancel
    l'accès se fait de sort : select id, $_SESSION['language] from translation

    cas 2 :

    table translation_fr(id, label)
    table translation_en(id, label)

    l'accès se fait de sorte : select * from translation_$_SESSION['language]

    exemple la varible $_SESSION['language] ='fr';
    je veux savoir quelle est la plus optimale, si on doit charger une liste considérable de lignes ?

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Il faut donner des éléments de contexte, car une traduction n'est que très rarement une bijection entre deux langues.
    Selon le besoin et donc les règles de gestion, la solution à mettre en place coté BDD sera différente.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Il faut donner des éléments de contexte, car une traduction n'est que très rarement une bijection entre deux langues.
    Selon le besoin et donc les règles de gestion, la solution à mettre en place coté BDD sera différente.
    merci pour votre réponse, j'ai pas compris votre réponse, c'est plus littéraire que technique.

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    oui c'est ce que j'ai fait
    Non pas du tout, sur ton 1er cas tu avais une table contenant 1 langue par colonne
    Dans ma proposition il y a 1 langue par ligne

    Obtenir la traduction de "Salut" en italien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL value
    FROM translation
    WHERE key = 'Salut' AND language_code = 'IT'
    Avec tes solutions :

    Cas 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL label_it
    FROM translation
    WHERE key = 'Salut'
    Cas 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL label
    FROM translation_it
    WHERE key = 'Salut'
    Outre le fait qu'ajouter une nouvelle langue te fait toucher à chaque fois la structure de ta base de données,
    ces 2 dernières requêtes ne sont pas paramétrables "proprement" car les variables sont des noms d'objet (colonne puis table)
    alors que dans ma proposition il s'agit de valeurs

    Ceci dit on n'en sait toujours pas plus sur le contexte
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2002
    Messages : 726
    Points : 352
    Points
    352
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Dans ma proposition il y a 1 langue par ligne
    Merci pour votre réponse, dans ce cas vous me proposez une nouvelle idée

    dans votre cas ça m'évite de touche à la structure de la base.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 088
    Points : 38 393
    Points
    38 393
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par ouldfella Voir le message

    Citation Envoyé par escartefigue Voir le message
    Bonjour,

    Il faut donner des éléments de contexte, car une traduction n'est que très rarement une bijection entre deux langues.
    Selon le besoin et donc les règles de gestion, la solution à mettre en place coté BDD sera différente.
    merci pour votre réponse, j'ai pas compris votre réponse, c'est plus littéraire que technique.
    Prenons des exemples

    du français vers l'anglais
    CAR (le véhicule) ==> COACH
    CAR (la conjonction signifiant parce que) ==> BECAUSE

    de l'anglais vers le français
    CONTEXT ==> CONTEXTE
    CONTEXT ==> LOCALISATION

    Donc, un même mot donne plusieurs traductions, ici j'en ai cité deux dans chaque cas, mais il peut y en avoir bien plus.

    Donc, selon ce que vous souhaitez faire, la solution à mettre en oeuvre, tant d'un point de vue base de données que traitements, n'est pas la même.

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

Discussions similaires

  1. Optimisation tables dans ma BDD
    Par shelko dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/05/2008, 17h51
  2. Réponses: 19
    Dernier message: 31/01/2008, 21h01
  3. Optimisation table Mysql - Partitionnement
    Par thibaut06 dans le forum Requêtes
    Réponses: 1
    Dernier message: 16/01/2008, 02h20
  4. [Optimisation] Tables avec champs textes
    Par sietjp dans le forum Administration
    Réponses: 4
    Dernier message: 10/01/2008, 22h21
  5. Eradication doublons relatifs et optimisation table
    Par boby67 dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/06/2007, 03h04

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