Проектирование схемы базы данных для многоязычного веб-сайта

Возможный дубликат:
Каковы наилучшие методы для проектирования нескольких языков?

Я разрабатываю многоязычный веб-сайт, и я заинтересован в разработке схемы базы данных для него. Подумайте, есть таблица "Статьи"

Articles (Id, AddedByUser, AddedDate, Title, Description, Body, ViewCount).

Для реализации нескольких языков существует два пути.

Первый способ - создать одну таблицу

Articles (Id, AddedByUser, AddedDate, TitleRU, TitleEN, DescriptionRU, DescriptionEN, BodyRU, BodyEN, ViewCount).

Второй способ - создать три таблицы

Articles (Id, AddedByUser, AddedDate, ViewCount). 
ArticlesLocalized(Id, ArticleId, Title, Description, Body, LanguageId)
Languages(Id, Name)

Какой способ лучше?

Ответ 1

Несколько таблиц - это, безусловно, путь. Это упростит запросы (вы сможете использовать полностью параметризованные запросы - ex "… WHERE language=?" - вместо того, чтобы конкатенировать строки - ex "SELECT Title" + lang_code), это упростит добавление новых языков (если это применимо), и вы у меня будут теплые нечеткие чувства от нормальных нормализованных данных (я мог ошибаться, но я считаю, что опция с несколькими столбцами нарушает 1NF).

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

Ответ 2

Я согласен с Дэвидом. Также вы можете подумать, что делать, если отсутствует требуемый язык. Возможно, сделайте LEFT JOIN с ArticlesLocalized и установите параметр "default language" в Languages, чтобы получить что-то, даже если статья не была переведена.