2010-07-04 3 views
1

Как вы предлагаете создавать таблицы при работе с несколькими языками на сайте? Скажем, например, что у нас есть таблица, называемая продуктом. Это может содержать такие вещи, как SKU, цену, порядок сортировки и другие настройки. Название и описание, однако, будут доступны на нескольких языках. если эти тексты будут в отдельных таблицах, таких как:Как создавать таблицы при использовании нескольких языков

ТПС product_lang_en
product_id | имя | описание
tbl product_lang_de
product_id | имя | Описание

Или все собраны в одной таблице
TBL product_lang
product_id | lang | имя | описание

Последний чувствует себя более правильно и сохранит целостность базы данных, если будет добавлен новый язык. Есть ли разница в производительности, чтобы иметь в виду, когда таблицы растут? Простота обслуживания и т.д.

Приветствия

ответ

4

Второй дизайн, безусловно, лучше. Четкие подсказки о первом: две таблицы имеют одинаковые столбцы, а факты о данных указаны в именах таблицы («en», «de»).

Что касается производительности, это может быть даже лучше с одной таблицей, чем с двумя (или более). Если вы создадите правильные индексы (например, вам понадобится один на lang), тогда вам нужно будет получить доступ только к одной таблице, чтобы найти описание любого продукта.

+0

Thanks Ned! Это было то, что я думал, но мы еще не приходили в базы данных в школе, и я хочу начать дальше =) –

+0

+1 за включение не только правильного ответа, но и подсказки, чтобы определить ту же ситуацию в будущем :) – psmears

0

Я хочу предложить другое решение:

product 
-------------------------------------- 
id SKU(or any other internal name) 
//depending on the structure, you can skipp the id and replace it with the SKU/... 

lang 
-------------------------------------------------- 
id product_id name  lang  description 

Это может кажется недостатком, но для меня это будет иметь некоторые преимущества:

  • Там может быть больше информации, связанной с продуктом, что действительно относится к продукту, например цена, НДС, ....
  • При удалении одного продукта у вас могут быть ограничения, которые удаляют также соответствующие языки для него
  • SKU Из моего примера может быть практически все, что помогает внутреннему (что означает, что не подвергается воздействию пользователь) номер, имя независимо. Таким образом, нет необходимости, чтобы кто-то просматривал все языки для определенного продукта. В вашем втором дизайне может оказаться довольно сложно, чтобы кто-то удалил продукты на разных языках.
  • Приложение, получающее доступ к данным, может самостоятельно решить, на каком языке он должен доставляться. При выполнении пользовательского интерфейса вам просто нужно беспокоиться об уникальном идентификаторе из таблицы продуктов, а код может решить, какой язык является правильным, и выбрать соответствующие строки.
  • Как упоминалось выше, Нед Батчелдер, индексы очень важны, и (этот подход будет медленнее, конечно) будет очень небольшим, но удобство обслуживания будет легче передаваться ИМО, поскольку нет необходимости знать, что происходит в lang (буквально, я думаю, вы понимаете) ,

Это может показаться немного выше, но я думаю, что я бы пошел с таким подходом.

Смежные вопросы