Что Вы думаете о наличии связанной таблицы преобразования для каждой переводимой таблицы?
CREATE TABLE T_PRODUCT (pr_id интервал, ЦЕНОВОЕ ЧИСЛО (18, 2))
CREATE TABLE T_PRODUCT_tr (pr_id INT FK, languagecode varchar, pr_name текст, pr_descr текст)
Таким образом, если бы у Вас есть несколько переводимый столбец, он только потребовал бы, чтобы единственное соединение получило его +, так как Вы не автоматически генерируете translationid, может быть легче импортировать объекты вместе с их связанными переводами.
отрицательная сторона этого - то, что, если у Вас есть сложный механизм нейтрализации языка, Вы, возможно, должны реализовать это для каждой таблицы преобразования - при доверии некоторой хранимой процедуре, чтобы сделать это. Если Вы сделаете это из приложения, то это, вероятно, не будет проблемой.
Сообщенный мне, что Вы думаете - я также собираюсь принять решение на этом для нашего следующего приложения. До сих пор мы использовали Ваш 3-й тип.
Третья опция является лучшей по нескольким причинам:
-Adam
Я обычно шел бы для этого подхода (не фактический sql), это соответствует Вашей последней опции.
table Product
productid INT PK, price DECIMAL, translationid INT FK
table Translation
translationid INT PK
table TranslationItem
translationitemid INT PK, translationid INT FK, text VARCHAR, languagecode CHAR(2)
view ProductView
select * from Product
inner join Translation
inner join TranslationItem
where languagecode='en'
, поскольку наличие всех переводимых текстов в одном месте делает обслуживание настолько легче. Иногда переводы произведены на стороне к бюро переводов, этот способ, которым можно отправить им всего один большой файл экспорта и импортировать его назад столь же легко.
Прежде, чем идти в технические детали и решения, необходимо остановиться на минуту и задать несколько вопросов о требованиях. Ответы могут оказать огромное влияние на техническое решение. Примеры таких вопросов были бы:
- Будет все языки использоваться все время?
- Кто и когда заполнит столбцы различными языковыми версиями?
- Что происходит, когда пользователю будет нужен определенный язык текста и в системе нет ни одного?
- Только тексты должны быть локализованы или существуют также другие объекты (например, ЦЕНА может быть сохранена в $ и € потому что они могли бы отличаться)