Я бы выбрал третий вариант, представляющий собой гибрид существующего дизайна и решения № 2.Столбцы, которые существуют в вашей таблице, теперь представляют ваш «нейтральный» или язык по умолчанию.Затем вы должны добавить таблицу для каждого объекта, для которого нужны переведенные значения, которые будут содержать PK основной таблицы, ключ для кода языка и столбец для каждого значения в родительской таблице, для которого требуется перевод. Так что у нас может быть
Create Table product_translations
(
product_id int not null References product( id )
, language_code varchar(5) not null
, name ...
, description ...
, Primary Key ( product_id, language_code )
...
)
Тогда ваши запросы будут выглядеть следующим образом:
Select P.product_id
, Coalesce( PT.name, P.name ) As Name
From product As P
Left Join product_translations As PT
On PT.product_id = P.product_id
And PT.language_code = 'en-UK'
Это означает, что для каждого запроса, для которого вы запрашиваете информацию о продукте, потребуется Левое соединение с таблицей переводов, а затем решите, что делать, еслинет значения перевода: верните языковой термин по умолчанию (как в моем примере выше) или верните ноль.