Вопрос
Я уверен, что многие из вас столкнулись с проблемой локализации базы данных в приложении. Если вы этого не сделали, я был бы уверен в том, что вероятность того, что вы сделаете это в будущем, достаточно велика. Я говорю об хранении нескольких переводов текстов (и то же самое можно сказать о валюте и т.д.) Для ваших объектов базы данных.
Например, классическая таблица "Категория" может иметь столбец "Имя" и "Описание", который должен быть глобализирован. Один из способов - создать таблицу "Текст" для каждого из ваших сущностей, а затем выполнить соединение, чтобы получить значения на основе предоставленного языка.
Это дает вам множество таблиц "Текст", по одному для каждого объекта, который вы хотите локализовать, с добавлением TextType для различения различных текстов, которые он может хранить.
Мне любопытно, есть ли какие-либо, задокументированные, лучшие практики/шаблоны проектирования при внедрении такой поддержки в базу данных SQL Server 2005/2008 (я имею в виду RDBMS, поскольку он может содержать поддерживаемые ключевые слова и что помогает при реализации)?
Мысли о подходе 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
И вы вернете продукт со всеми локализованными текстами, что означало бы, что вам придется делать извлечение на стороне клиента. Самой большой проблемой здесь является, очевидно, количество дополнительных данных, которые вам придется возвращать по каждому запросу. Преимущества будут более чистым, без таблиц поиска, объединений и т.д.
Btw, какой бы метод я ни использовал в своем проекте, я все равно буду использовать Linq To SQL (.NET Platform) для запроса базы данных (подход XML должен быть проблемой, поскольку он вернет XElement, который может быть интерпретированная клиентская сторона)
Поэтому предложение о шаблонах проектирования локализации базы данных и, возможно, комментарии к мысли XML, было бы очень оптимизировано.