Прежде всего, вы должны пересмотреть свой выбор ключей.Ваш текущий дизайн (атомные суррогатные ключи везде ) допускает несогласованность повсюду.Если у вас нет дополнительных, не упомянутых ограничений для нескольких таблиц, вы можете, например, иметь один Result_detail, принадлежащий Вопросу A из Викторины B, но с Опцией, принадлежащей Вопросу C из Викторины D, а также Результатом, принадлежащим Викторине E.
И если у вас нет дополнительных, не упомянутых ключей, ваш дизайн допускает практические дубликаты.Например, вы можете иметь два идентичных Result_details, за исключением идентификатора, что может означать, что рассматриваемый пользователь дважды ответил на один и тот же вопрос в одном и том же результате.Это может быть функция, позволяющая пользователю пройти один и тот же тест несколько раз, но вы, вероятно, не хотите, чтобы несколько одинаковых (или разных, в этом отношении) ответов на один и тот же вопрос в рамках одного и того же результата теста.На самом деле, это довольно хороший пример того, как некритическое введение суррогатных ключей в некоторых случаях полностью пропускает точку ключей.
Result_details.Is_right выглядит избыточным.Можете ли вы получить Result_detail, который подходит, даже если его Option не установлен?
Есть и другие проблемы, кроме как ответить на ваш главный вопрос: если у вас фиксированное количество языков (особенно если все вопросы иу опций есть строки на всех языках), вы можете просто добавить столбцы с вопросами и опциями для каждого языка.Если кто-то кричит о первой нормальной форме, игнорируйте их (или попросите их формально определить 1NF).
Если у вас неограниченное количество языков, переместите столбцы Вопрос и Вариант в отдельные таблицы вместе сСтолбец языка и внешние ключи для таблиц Вопрос и Вариант соответственно.Например, используйте ISO 639 для значений столбца Language;таким образом, вам не обязательно нужна языковая таблица.