2011-04-20 10 views
0

サービスを開発しているのは、各クライアントユーザが予定を立てることができるようにすることです。 データベース内の戦略(MS SQL SERVER)が各クライアントに適していますか?データベース内のクライアントごとのテーブル

このような戦略は、複雑なテーブルロックを単純化し、除外すると考えています。

答えて

0

マルチテナントアプリケーションを構築しようとしているようです。私はクライアントごとに1つのテーブルをお勧めしません。むしろ、私は2つのソリューションのいずれかをお勧めします:

  1. は同じテーブルにすべてのクライアント(テナント)のデータを統合し、識別子によって分離します。言い換えれば、すべてのトップレベルのテーブルには、各クライアントのデータを識別して分離する「ClientId」または「TenantId」と呼ばれる外部キーがあります。このアプローチの欠点は、データベースのサイズが大幅に大きくなり、大規模なデータベースは複雑なサイズのデータ​​ベースを管理するためです。さらに、開発者がClientIdでフィルタリングするのを忘れて、あるクライアントが別のクライアントのデータを見るというクエリを作成するリスクがあります。

  2. クライアントごとに1つのデータベース。より極端なソリューションですが、クライアントのアプリケーションをホストする場合、各クライアントのデータのサイズに大きな違いがある場合、またはクライアントがデータ分離を絶対的に保証したい場合に役立ちます。

+0

1つのテーブルから256までの制限があるため、外来キーの状況は当てはまりません。反対側には、各クライアントのデータを含む1つのテーブルを格納する必要があります。並列作業の場合、多くのユーザー(100〜1000)が1つのテーブルにアクセスできるため、クライアントごとに1つのテーブルがある場合は、1〜10人のユーザーになります。 – Alexandr

+0

@Alexandr - ハァッですか?トップレベルの各テーブルには、クライアントのテーブルを参照する* 1つの*外部キー列があります。 – Thomas

+0

@Alexandr - クライアントごとにFK列を追加することは間違いありません。それは意味をなさないし、正規化されておらず、不要です。代わりに、各トップレベルのテーブルには、すべてのクライアントのデータが含まれています。ここでは、FKである単一の列とクライアントの表を区別します。 – Thomas

関連する問題