顧客ごと に個別のデータベースを用意します。(単一の SQL Server インスタンス内の複数のデータベース。)
これにより、単一のスキーマで一度設計することができます。
- テストと開発を損なう動的に名前が付けられたテーブルはありません
- アップグレードとメンテナンスは、1 つの DB で設計およびテストしてから、すべての DB にロールアウトできます。
- 1 人の顧客のデータを非常に簡単にバックアップ、復元、削除できます
- 1 つの DB で発見/悪用されたバグは、他の DB の整合性を構成しません。
- データ アクセス (読み取りと書き込み) は、SQL ログインを使用して管理できます (車輪を再発明する必要はありません)。
グローバルに共有されたデータが必要な場合、それは別のデータベースに移動し、さまざまな SQL ログインに対する独自の権限セットを使用します。
すべてのユーザーを含む単一のデータベースを使用することは、私の次善の選択です。まだ単一のスキーマがあります。ただし、顧客のデータを分割することはできません。アクセス権と許可を自分で管理する必要があり、その他の追加の設計およびテスト作業のホスト全体を管理する必要があります。
追加の顧客のために新しいテーブルを動的に作成することには決して近づきません。新しいテーブル名は、すべてのクエリを新しいテーブル名で更新する必要があることを意味し、他の多くのメンテナンスの頭痛の種です。
私は、アプリケーション/サービスを通常どおり使用しているときにテーブルを動的に作成したい場合、設計が不適切であるという意見がほとんどです。