2008-09-25 8 views

Répondre

14

Disons que vous avez une table de produits qui ressemble à ceci:

Products 
---------- 
id 
price 

Products_Translations 
---------------------- 
product_id 
locale 
name 
description 

Alors que vous venez de rejoindre sur product_id = product.id et où locale = 'en-US'

Bien sûr, cela a un impact sur les performances, puisque vous avez maintenant besoin d'une jointure pour obtenir le nom et la description, mais cela permet d'avoir un certain nombre de paramètres plus tard.

+0

J'aime ça, intelligent. Et travaillez sans douleur avec les ORM. –

0

Je Beleve que plus d'informations sur ce que vous faites serait utile. Pouvez-vous donner quelques échantillons des données? Et que voulez-vous dire par dynamique? Qu'il y aura beaucoup de données insérées au fil du temps et beaucoup de changements aux données ou que les données doivent seulement être disponibles pour une courte période de temps.

0

En général, vous devriez probablement regarder un parent avec des données non localisées communes, et une table enfant avec les données localisées et la clé de langue. Si, par dynamique, vous voulez dire qu'il change fréquemment, vous voudrez peut-être jeter un coup d'œil à l'utilisation des déclencheurs et quelque chose comme un indicateur «translationRequired» pour marquer les choses qui ont besoin d'être traduites après un changement.

0

Pouvez-vous décrire la nature des «données dynamiques»?

Une façon de mettre en œuvre ce serait d'avoir 3 tables différentes:

  • Table Langue
    • Ce tableau stockerait la langue et une clé:
 
    [1, English], 
    [2, Spanish] 
  • Définition des données Tableau
    • Lorsque des données dynamiques est d'abord entré faire un enregistrement dans ce tableau avec et identifiant les données:
 
     [1, 'Data1'], 
     [2, 'Data2'] 
  • Data_Language Tableau
    • Cette table reliera la langue, la définition des données et la traduction
 
     So: [Data_Language, Data_Definition, Language, Translation] 
      [1, 1, 1, 'Red'] 
      [2, 1, 2, 'Rojo'] 
      [3, 2, 1, 'Green'] 
      [4, 2, 2, 'Verde'] 

      etc ... 

Lorsque les données dynamiques est entré créer la valeur par défaut d'enregistrement « anglais » puis traduire à votre guise.

+0

Pourquoi avez-vous une colonne Data_Language? Pourquoi ne pas simplement mettre le PK à (Data_Definition, Language)? –

+0

La colonne Data_Language ressemble à l'ID de la colonne. Ce n'est pas un mauvais design à mon point de vue, donc pour moi +1. –

Questions connexes