Лучшая модель данных для мультитенантного многоязычного приложения в .NET с SQL 2008 - PullRequest
2 голосов
/ 13 августа 2010

Я разрабатываю мультитенантное приложение в .NET с SQL 2008. Каждый арендатор может указать свой собственный язык.Например, китайская компания может использовать мое приложение и хотеть, чтобы все их данные были отсортированы и доступны для поиска с помощью китайских символов.И немецкая компания может использовать мое приложение и хотеть, чтобы все их данные были отсортированы и доступны для поиска по немецким символам.

Я надеюсь иметь одну базу данных для хранения всех данных, сегментированных по тенантиде.

Таблица может выглядеть примерно так:

Члены

TenantID MemberID Имя

1234 5678 Джон

1235 5679 Джейн

Данные будут храниться в столбцах Unicode (nvarchar).Я также хотел бы использовать полнотекстовый индексатор для индексации данных.

Как лучше всего выполнять сортировку в многопользовательской среде, где все данные хранятся в одной базе данных?

Должен ли я указать параметры сортировки в строке запроса (т. Е. SELECT * FROM Members ORDER By Name Collate (Chinese))?Существуют ли проблемы с производительностью при динамической передаче параметров сортировки, особенно если индекс столбца отсортирован на одном конкретном языке?

Или было бы лучше иметь базу данных для каждого языка и определять во время выполнения, какую строку подключения использовать?

Кроме того, как лучше обрабатывать полнотекстовый индекс?Я полагаю, что он может индексировать только на одном языке, и вы можете указать только один индекс для таблицы.

Есть еще что-то, что можно рассмотреть?

Спасибо!

1 Ответ

1 голос
/ 14 августа 2010

Я полагаю, что в вашей ситуации у вас есть только выбор между:

  • Обработка сортировки на прикладном уровне (это то, что я делал в прошлом)
  • Денормализация вашей БД и сохранениесодержимое в отдельных таблицах для каждого языка (и в будущем придется столкнуться с большими трудностями, но это может быть выполнимо)

Что касается нескольких языков в полнотекстовом поиске (я не являюсь темойочень быстро), MSDN имеет некоторую документацию , в которой говорится, что у вас нет для указания языка на уровне столбцов, но вы можете использовать BLOB или XMLязыковые настройки:

Полнотекстовый поиск SQL Server 2005 учитывает языковые настройки, указанные в документе, в BLOB и XML-документах во время индексации.

Тем не менее, это может быть не такты хочешь.

...