2010-04-06 5 views
4

Nous créons une base de données de commerce électronique de grande taille qui doit permettre la saisie de données dans plusieurs langues. Par exemple, la table des produits aura besoin d'une ou plusieurs traductions pour le nom, la description, MetaTitle, MetaKeywords, MetaDescription et ainsi de suite.Base de données multilingue avec Entity Framework 4 Guidage

Il y a plusieurs façons d'y parvenir d'un point de vue de la conception de base de données relationnelle. Mais Entity Framework 4 ajoute quelques contraintes et la performance est une grande préoccupation.

problème similaire comme dans Multilingual Database Design

Voici un exemple ensemble de tables que nous envisageons:

[Product] 
- Id (PK) 
- CreateDate 
- NamePhraseId (FK) 
- DescriptionPhraseId (FK) 
- Price 
- ... 

[Phrase] 
- id (PK) 
- Invariant 

[Translation] 
- id (PK) 
- PhraseId (FK) 
- LanguageCulture (Example: en-US) 
- Translation 

Nous pourrions ajouter une table de consultation de LanguageCulture.

Cette méthode a ses avantages et ses inconvénients comme d'autres méthodes. Nous ne voulons pas avoir à créer de tables supplémentaires pour chaque colonne de table pouvant nécessiter une traduction (pas de ProductName, de tables ProductDescription par exemple) car cela rendrait notre modèle de données trop volumineux.

Dans l'exemple ci-dessus, un nom de produit aura zéro ou une phrase avec une ou plusieurs traductions. Si je me souviens, Entity Framework nécessite 1 à 1 relations d'avoir la même clé primaire sur les tables, je ne sais pas si c'est le même cas avec 0 ou 1 relations mais cela peut être un dealbreaker pour la méthode ci-dessus.

J'ai eu beaucoup de mal à trouver de bonnes informations sur Entity Framework et des directives de conception de bases de données/modèles multilingues. J'apprécierais grandement les conseils et l'orientation en mettant l'accent sur un bon design et la meilleure performance possible.

Merci d'avance!

Répondre

0

Étant donné le support POCO d'EF4, je dirais que la conception de votre base de données devrait avoir moins à voir avec EF et plus à voir avec un bon design multilingue. Selon la documentation, EF prend en charge les relations "zéro ou un". Il suffit de rendre le PhraseId dans votre table Translation Nullable et cela devrait entraîner une relation 0..1.

+0

Merci Dave. POCO n'est pas vraiment le problème (nous utiliserons POCO), ce sont les requêtes LINQ to Entities auxquelles je faisais référence concernant les contraintes. Avec la version 3.5, les clés étrangères ont disparu, ce qui complique la création de plusieurs relations entre la table Product et la table Phrase, par exemple pour les colonnes traduisibles. Je comprends que les clés étrangères sont visibles avec EF4, mais nous ne l'avons pas encore essayé, donc je ne sais pas s'il y a des pièges. Je suis vraiment à la recherche de conseils sur une structure/modèle multilingue idéal avec EF4 avec la performance, la simplicité et l'évolutivité à l'esprit. Merci encore! – Tony