Задача заключается в том, чтобы добавить еще одну колонку для мультиязычности, назвав DocTypeEn, в котором будет перевод.
Ага... а потом захочется на немецкий, на китайский... так и будешь поля добавлять?
Классический подход - таблица текстовых литералов
CREATE TABLE translation (
token_id INT, -- идентификатор строки
language_id INT, -- идентификатор языка
PRIMARY KEY (token_id, language_id),
value VARCHAR(100) NULL DEFAULT NULL
);
Соответственно зная номер строки, который нужен, и язык, получаем значение
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @language_name;
Впрочем, обычное состояние - это когда не все строки переведены. Тогда используется
SELECT COALESCE((
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @language_name;
), (
SELECT value
FROM translation
JOIN language USING (language_id)
WHERE token_id = @token_id
AND language_name = @default_language_name;
)) value;
То есть для литералов. имеющих перевод, возвращаются именно они, а для ещё не имеющих - значение на языке по умолчанию.
============
С другой стороны, вывод сообщений на экран - это интерактивное взаимодействие, где начхать на производительность. А коли так, то сообщения можно хранить в одном поле в виде JSON объекта, типа
{
"ru":"Выход",
"en":"Quit"
}
Но и для такой схемы получение литерала для дефолтного языка при отсутствии перевода - актуально.