2

SQL 2008 を使用して .NET でマルチテナント アプリケーションを開発しています。各テナントは独自の言語を指定できます。たとえば、中国の会社が私のアプリケーションを使用し、すべてのデータを並べ替えて漢字で検索できるようにする場合があります。また、ドイツの会社が私のアプリケーションを使用し、すべてのデータを並べ替えてドイツ語の文字で検索できるようにする場合があります。

テナント ID でセグメント化されたすべてのデータを格納する 1 つのデータベースが必要です。

テーブルは次のようになります。

メンバー

テナント ID メンバー ID 名

1234 5678 ジョン

1235 5679 ジェーン

データは Unicode 列 (nvarchar) に格納されます。また、フルテキスト インデクサーを使用してデータのインデックスを作成したいと考えています。

すべてのデータが同じデータベースに格納されているマルチテナント環境で照合を処理するにはどうすればよいですか?

クエリ文字列で照合を指定する必要がありますか (つまり、SELECT * FROM Members ORDER By Name Collat​​e (中国語))? 特に列のインデックスが特定の言語でソートされている場合、照合を動的に渡す際にパフォーマンスの問題はありますか?

それとも、言語ごとにデータベースを用意し、実行時に使用する接続文字列を決定する方がよいでしょうか?

また、全文索引をどのように処理するのが最善でしょうか? 1 つの言語でしかインデックスを作成できず、テーブルごとに 1 つのインデックスしか指定できないと思います。

他に考慮すべきことはありますか?

ありがとう!

4

1 に答える 1

1

私はあなたの状況を信じています。あなたには次のいずれかしか選択できません。

  • アプリケーション層で照合を処理します(これは私が過去に行ったことです)
  • DBを非正規化し、コンテンツを言語ごとの個別のテーブルに保持します(そして、将来的には多くの問題に対処しますが、実行可能かもしれません)

全文検索での複数の言語(私が非常に精通しているトピックではありません)に関しては、MSDNにいくつかのドキュメントがあります。これは、列ごとのレベルで言語を示す必要はないようですが、 BLOBまたはXML言語設定を使用します。

SQL Server 2005の全文検索は、インデックス作成時にBLOBおよびXMLドキュメントのドキュメント指定の言語設定を尊重します。

それでも、それはあなたが望むものではないかもしれません。

于 2010-08-14T13:28:39.277 に答える