Вопрос
Я уверен, что многие из вас сталкивались с проблемой локализации серверной части базы данных для приложения. Если вы этого не сделаете, я бы с уверенностью сказал, что вероятность того, что вы сделаете это в будущем, достаточно велика. Я говорю о хранении нескольких переводов текстов (и то же самое можно сказать о валюте и т. Д.) Для ваших объектов базы данных.
Например, классическая таблица «Категория» может иметь столбцы «Имя» и «Описание», которые должны быть глобализированы. Один из способов - создать таблицу «Текст» для каждой из ваших сущностей, а затем выполнить объединение, чтобы получить значения на основе предоставленного языка.
Это оставляет вам множество таблиц «Текст», по одной для каждой сущности, которую вы хотите локализовать, с добавлением TextType, чтобы различать различные тексты, которые он может хранить.
Мне любопытно, есть ли какие-либо документированные шаблоны передового опыта / дизайна для реализации такого рода поддержки в базе данных SQL Server 2005/2008 (я говорю конкретно о СУБД, поскольку она может содержать поддерживаемые ключевые слова и такой который помогает в реализации)?
Мысли о подходе XML
Одна идея, над которой я играл (хотя пока только в моей голове), состояла в том, чтобы использовать тип данных XML, представленный в SQL Server 2005. Идея состояла в том, чтобы создать столбцы, которые должны поддерживать локализацию, типа данных XML (и связать схема к нему). XML будет содержать локализованные строки вместе с языковым кодом / культурой, к которой он привязан.
Что-то вроде
Product
ID (int, identity)
Name (XML ...)
Description (XML ...)
Тогда у вас будет что-то вроде XML
<localization>
<text culture="sv-SE">Detta är ett namn</text>
<text culture="en-EN">This is a name</text>
</localization>
Вы можете сделать это (это не рабочий код, поэтому я буду использовать *)
SELECT *
From Product
Where Product.ID = 10
И вы получите обратно продукт со всеми локализованными текстами, что будет означать, что вам придется делать извлечение на стороне клиента. Самая большая проблема здесь, очевидно, заключается в количестве дополнительных данных, которые вы должны будете возвращать при каждом запросе. Преимуществом будет более чистый дизайн без справочных таблиц, объединений и так далее.
Кстати, какой бы метод я ни использовал в своем проекте, я все равно буду использовать Linq To SQL (.NET Platform) для запроса к базе данных (подход XML должен быть проблемой, так как он возвращает XElement, который может быть интерпретируемая сторона клиента)
Таким образом, предложение по шаблонам проектирования локализации базы данных и, возможно, комментарии к мысли XML, будут очень оценены.