私は SAAS アプリケーションを構築しており、クライアントごとに 1 つのデータベースと共有データベースについて話し合っています。私はここSOでいくつかのトピックを含め、たくさん読んだことがありますが、まだ多くの疑問があります.
私たちのプラットフォームは、各クライアントが高度にカスタマイズできる必要があります。(カスタム テーブルを作成し、カスタム フィールドを既存のテーブルに追加できる必要があります)。この場合、複数データベースのアプローチは素晴らしいようです。
問題は。私の「ユーザー」テーブルは、マスターデータベースまたは各クライアントデータベースにあるべきですか?. ユーザーは 1 つ以上の組織を持つ場合があるため、複数のデータベースに存在します。また、国のテーブルなどの一般的なテーブルはどうですか?
master データベースにあることは理にかなっています。しかし、ユーザーへの外部キーを持つ created_by フィールドを持つ多くのテーブルがあります。また、クライアントごとにいくつかの権限関連のテーブルがあります。
データベースが複数ある場合、外部キーの力が失われます。これは、データベースへのクエリが増えることを意味します。データベースが同じサーバーにある場合、データベース間でクロス結合を使用できることはわかっていますが、スケーラビリティが失われます。(将来、複数のデータベースサーバーが必要になるかもしれません)。連合テーブルについて考えました。パフォーマンスについては不明です。
私が使用しているテクノロジーは、php と symfony 2 フレームワーク、およびデータベース用の mysql です。
また、そのようなシステムのメンテナンスが怖いです。すべてのデータベースでスキーマの変更を自動化するスクリプトをいくつか作成することもできますが、クライアントが 10,000 の場合、10,000 のデータベースを意味します。
これについてどう思いますか。私のアプリの主な特徴は柔軟性である必要があるため、クライアントがベース プラットフォームにないものよりも具体的なものが必要な場合は、それを実行できるはずです。