Quelle est la meilleure façon de créer une base de données multilingue? Créer une table localisée pour chaque table rend la conception et les requêtes complexes, dans les autres cas, ajouter une colonne pour chaque langue est simple mais pas dynamique, aidez-moi à comprendre quel est le meilleur choix pour les applications d'entreprise
sql
database
database-design
Arsen Mkrtchyan
la source
la source
Réponses:
Ce que nous faisons, c'est créer deux tableaux pour chaque objet multilingue.
Par exemple, la première table ne contient que des données indépendantes de la langue (clé primaire, etc.) et la deuxième table contient un enregistrement par langue, contenant les données localisées plus le code ISO de la langue.
Dans certains cas, nous ajoutons un champ DefaultLanguage, afin de pouvoir revenir à cette langue si aucune donnée localisée n'est disponible pour une langue spécifiée.
Exemple:
Avec cette approche, vous pouvez gérer autant de langues que nécessaire (sans avoir à ajouter des champs supplémentaires pour chaque nouvelle langue).
Mise à jour (2014-12-14): veuillez consulter cette réponse , pour obtenir des informations supplémentaires sur l'implémentation utilisée pour charger des données multilingues dans une application.
la source
id
: D. Pour expliquer, chacunid
représente une signification à laquelle vous pouvez attacher des mots de n'importe quelle langue dans une table relationnelle, vous obtenez donc deux tables,meaning
(id) etword
(id, sense_id), leid
dans leword
tableau représente le mot id, leid
dans lemeaning
représente le sens qui est universel.Je recommande la réponse publiée par Martin.
Mais vous semblez préoccupé par le fait que vos requêtes deviennent trop complexes:
Vous pensez donc peut-être qu'au lieu d'écrire des requêtes simples comme celle-ci:
... vous devrez commencer à écrire des requêtes comme celle-ci:
Pas une très jolie perspective.
Mais au lieu de le faire manuellement, vous devez développer votre propre classe d'accès à la base de données, qui pré-analyse le SQL qui contient votre balisage de localisation spécial et le convertit en SQL réel que vous devrez envoyer à la base de données.
L'utilisation de ce système peut ressembler à ceci:
Et je suis sûr que vous pouvez faire encore mieux cela.
La clé est d'avoir vos tables et champs nommés de manière uniforme.
la source
Je trouve que ce type d'approche fonctionne pour moi:
La table ProductDetail contient toutes les traductions (pour le nom du produit, la description, etc.) dans les langues que vous souhaitez prendre en charge. En fonction des exigences de votre application, vous souhaiterez peut-être décomposer le tableau Pays pour utiliser également les langues régionales.
la source
J'utilise la prochaine approche:
Produit
ProductID OrderID, ...
Information sur le produit
ProductID Titre Nom LanguageID
Langue
Culture du nom LanguageID, ....
la source
La solution de Martin est très similaire à la mienne, mais comment géreriez-vous une description par défaut lorsque la traduction souhaitée n'est pas trouvée?
Cela nécessiterait-il un IFNULL () et une autre instruction SELECT pour chaque champ?
La traduction par défaut serait stockée dans la même table, où un indicateur comme "isDefault" indique si cette description est la description par défaut au cas où aucune n'a été trouvée pour la langue actuelle.
la source