Хороший дизайн таблицы базы данных для хранения локализованных версий данных [закрыто]
-
02-07-2019 - |
Вопрос
Я пытаюсь создать несколько таблиц для хранения некоторых данных, которые позже должны быть преобразованы на другие языки.Кто-нибудь может предоставить некоторые "лучшие практики" или рекомендации для этого?
Спасибо
Решение
Допустим, у вас есть таблица продуктов, которая выглядит следующим образом:
Products
----------
id
price
Products_Translations
----------------------
product_id
locale
name
description
Затем вы просто присоединяетесь к product_id = product.id и где locale='en-US'
конечно, это влияет на производительность, поскольку теперь вам нужно объединение, чтобы получить имя и описание, но позже оно допускает любое количество локалей.
Другие советы
Я полагаю, что было бы полезно получить дополнительную информацию о том, что вы делаете.Можете ли вы привести несколько примеров полученных данных?И что вы подразумеваете под динамикой?Что со временем будет вставлено много данных и внесено много изменений в данные или что данные должны быть доступны только в течение небольшого периода времени.
В общем, вам, вероятно, следует рассматривать родительскую таблицу с общими нелокализованными данными и дочернюю таблицу с локализованными данными и языковым ключом.Если под динамикой вы подразумеваете, что она часто меняется, вы можете захотеть взглянуть на использование триггеров и чего-то вроде флага "translationRequired", чтобы отметить вещи, которые нуждаются в переводе после внесения изменений.
Можете ли вы описать природу "динамических данных"?
Одним из способов реализовать это было бы иметь 3 разные таблицы:
- Языковая таблица
- В этой таблице будут храниться язык и ключ :
[1, English], [2, Spanish]
- Таблица определения данных
- При первом вводе динамических данных внесите запись в эту таблицу с указанием идентификатора данных:
[1, 'Data1'], [2, 'Data2']
- Таблица Data_Language данных
- Эта таблица свяжет язык, определение данных и перевод
So: [Data_Language, Data_Definition, Language, Translation] [1, 1, 1, 'Red'] [2, 1, 2, 'Rojo'] [3, 2, 1, 'Green'] [4, 2, 2, 'Verde'] etc ...
Когда динамические данные будут введены, создайте запись по умолчанию на "английском" языке, а затем переведите на досуге.