2011-12-24 3 views
0

Je travaille sur le site web multi-lang. Essayer de concevoir un schéma db optimal à cette fin.Schéma de tables pour site web multilingue MySQL

enter image description here

Comme vous le voyez, il y a 2 tables: langs et menu. Mon idée est la suivante:

Par ex. Jetons un coup d'oeil à la génération de navigation multilingue à partir de la table MySQL. En backend PHP, tout en générant la navigation à partir de la base de données

  • Obtenir toutes les données de la ligne de la table menu
  • jointure gauche deuxième table - langs (par name domaine de menu tableau) et obtenir des données de la colonne de langue définie (par ex . en, ru)

Comment pensez-vous, est-ce optimal, ou existe-t-il une solution plus efficace? S'il vous plaît, donnez-moi des réponses liées à la base de données, pas de fichier. (par exemple, gettext, ... etc)

Répondre

1

Il serait préférable que le tableau langs contienne une colonne language, avec une ligne pour chaque traduction. Cela vous permet d'ajouter une autre langue ultérieurement et d'appliquer uniquement des modifications de données (plutôt que d'avoir à réécrire des requêtes). Comme vous l'avez déjà laissé entendre, effectuer une jointure à gauche et revenir à une langue par défaut maintenue directement dans le tableau menus est également une bonne idée (dans ce cas, vous n'avez pas besoin de contenir une traduction pour par exemple en dans la table langs, puisque la version anglaise sera toujours disponible).

Vous pouvez également envisager de stocker les traductions spécifiques à chaque pays (si, par exemple, il y a plusieurs pays de langue espagnole où les traductions peuvent être différentes), et à la suite d'une stratégie de repli des conclusions: language-country, language, English traductions.

+0

Vous voulez dire quelque chose comme ça? http://prntscr.com/4u7je –

+0

@TuralTeyyuboglu - oui, bien que je fasse la clé primaire de la table 'langs'' ID, language' de sorte que toutes les traductions pour le menu '1' aient un' ID' de '1'. –

+0

Dois-je utiliser une clé étrangère, comme la deuxième solution? Est-ce que je vais travailler plus vite? –

1

Vous pouvez normaliser plus comme ceci:

  • tokenname: id, jeton (par exemple, (1, programme), (2, menu))
  • Localisations: id, tokenname_id, lang, texte

Les tables qui référencent des chaînes se réfèrent ensuite à la chaîne par tokenname.id en tant que clé étrangère.

Notez que vous aurez besoin d'une sorte de langage de mini-template pour les localisations de texte.

+0

"Les tables qui référencent les chaînes puis se réfèrent à la chaîne par tokenname.id comme une clé étrangère." Je ne comprends pas bien cette partie. S'il vous plaît, soit expliquer ici ou je vous attends dans le salon de discussion. http: // chat.stackoverflow.com/rooms/6113/multilang-website –