Многоязычная база данных с руководством Entity Framework 4 - PullRequest
4 голосов
/ 07 апреля 2010

Мы создаем большую базу данных электронной коммерции, которая должна учитывать данные на нескольких языках. Например, таблице продукта потребуется один или несколько переводов для имени, описания, мета-заголовка, мета-ключевых слов, мета-описания и т. Д.

Есть несколько способов сделать это с точки зрения проектирования реляционных баз данных. Но Entity Framework 4 добавляет несколько ограничений, и производительность вызывает большую озабоченность.

Аналогичная проблема, как в Многоязычный дизайн базы данных

Вот пример набора таблиц, который мы рассматриваем:

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

[Phrase]
- id (PK)
- Invariant

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

Мы также можем добавить справочную таблицу LanguageCulture.

Этот метод имеет свои плюсы и минусы, как и другие методы. Нам не нужно создавать дополнительные таблицы для каждого столбца таблицы, для которых может потребоваться перевод (без ProductName, например таблиц ProductDescription), так как это сделает нашу модель данных слишком большой.

В приведенном выше примере название продукта будет содержать ноль или одну фразу с одним или несколькими переводами. Насколько я помню, Entity Framework требует, чтобы отношения 1: 1 имели один и тот же первичный ключ в таблицах, я не знаю, является ли это тем же случаем с отношениями 0 или 1, но это может быть нарушителем для вышеуказанного метода.

Мне было очень трудно найти хорошую информацию о Entity Framework и руководстве по проектированию многоязычной базы данных / модели. Я был бы очень признателен за советы и рекомендации с акцентом на хороший дизайн и наилучшую производительность.

Заранее спасибо!

1 Ответ

0 голосов
/ 07 апреля 2010

Учитывая поддержку POCO в EF4, я бы сказал, что дизайн вашей базы данных должен иметь меньше общего с EF, а больше - с хорошим многоязычным дизайном.

Согласно документации, EF поддерживает отношения "ноль или один". Просто сделайте PhraseId в вашей таблице Translation пустыми, и это должно привести к соотношению 0..1.

...