Соглашение об имени базы данных / столбца SQL + код языка - PullRequest
0 голосов
/ 09 мая 2018

Обычно в основных таблицах у нас есть столбец name, обычно на английском. Но что является лучшим соглашением об именовании столбцов, если оно у нас на разных языках. en_name лучше name_en? (имейте в виду, я буду использовать JPA и лица). Сейчас мне понадобятся следующие столбцы:

  • en_name для английского.
  • ar_name для арабского языка.
  • fr_name для французского.
  • de_name для немецкого языка.

    Кроме того, что лучше использовать двухбуквенные коды ISO 639-1 или трехбуквенный код ISO 639-2?

1 Ответ

0 голосов
/ 08 июня 2018

Это зависит от того, что вам нужно. Если вам нужны отдельные столбцы для хранения в переводах имен БД, я рекомендую использовать name_de, name_en ..., но это всего лишь мои предпочтения, легко понять и понять назначение столбца.

Но подумайте о фильтрации (поиске). Если вы предпочитаете этот метод с дополнительными столбцами в той же таблице, вам нужно будет добавить какой-либо переключатель в запросе (хранимой процедуре) для поиска имени по определенному языку - для английского вам нужно искать в name_en, в немецком - name_de. Поэтому я мог бы порекомендовать решение с отдельной таблицей для локализации со столбцами id, [master_table]_id, language_code и text (или имя).

Например, есть таблица item со столбцами id и name. Я бы создал таблицу item_localization со столбцами id, item_id, language_code и text. Таким образом, для строки (1, «имя») в таблице item в item_localization будет (1, 1, «en», «name-en»), (1, 2, «de», «name-de» «).

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

select item.*
from item
join item_localization on item_localization.item_id = item.id
where item_localization.language_code = "de" and item_localization.text like "%some_text%"

Но это только мой опыт и мысли.

...