サービスを開発しているのは、各クライアントユーザが予定を立てることができるようにすることです。 データベース内の戦略(MS SQL SERVER)が各クライアントに適していますか?データベース内のクライアントごとのテーブル
このような戦略は、複雑なテーブルロックを単純化し、除外すると考えています。
サービスを開発しているのは、各クライアントユーザが予定を立てることができるようにすることです。 データベース内の戦略(MS SQL SERVER)が各クライアントに適していますか?データベース内のクライアントごとのテーブル
このような戦略は、複雑なテーブルロックを単純化し、除外すると考えています。
マルチテナントアプリケーションを構築しようとしているようです。私はクライアントごとに1つのテーブルをお勧めしません。むしろ、私は2つのソリューションのいずれかをお勧めします:
は同じテーブルにすべてのクライアント(テナント)のデータを統合し、識別子によって分離します。言い換えれば、すべてのトップレベルのテーブルには、各クライアントのデータを識別して分離する「ClientId」または「TenantId」と呼ばれる外部キーがあります。このアプローチの欠点は、データベースのサイズが大幅に大きくなり、大規模なデータベースは複雑なサイズのデータベースを管理するためです。さらに、開発者がClientIdでフィルタリングするのを忘れて、あるクライアントが別のクライアントのデータを見るというクエリを作成するリスクがあります。
クライアントごとに1つのデータベース。より極端なソリューションですが、クライアントのアプリケーションをホストする場合、各クライアントのデータのサイズに大きな違いがある場合、またはクライアントがデータ分離を絶対的に保証したい場合に役立ちます。
1つのテーブルから256までの制限があるため、外来キーの状況は当てはまりません。反対側には、各クライアントのデータを含む1つのテーブルを格納する必要があります。並列作業の場合、多くのユーザー(100〜1000)が1つのテーブルにアクセスできるため、クライアントごとに1つのテーブルがある場合は、1〜10人のユーザーになります。 – Alexandr
@Alexandr - ハァッですか?トップレベルの各テーブルには、クライアントのテーブルを参照する* 1つの*外部キー列があります。 – Thomas
@Alexandr - クライアントごとにFK列を追加することは間違いありません。それは意味をなさないし、正規化されておらず、不要です。代わりに、各トップレベルのテーブルには、すべてのクライアントのデータが含まれています。ここでは、FKである単一の列とクライアントの表を区別します。 – Thomas