2016-07-03 14 views
1

複数のスキーマを管理するEntity Frameworkで単一のC#アプリケーションを使用するにはどうすればよいですか?または、単一のスキーマは必要ですか?顧客や統合されたデータベースのためのデータベースは何が良いでしょうか?

私は約28のクライアントを持っていますが、それぞれを別々のデータベースに保管しているのか、単一のデータベースに統合して顧客IDなどの情報を管理しているのだろうかと思います。

データの量がアプリケーションのパフォーマンスを低下させることが心配です。私はSQL Server 2014を現在システムの各バージョンと共に使用しており、システムを進化させており、最良のシナリオに合っています。

私は、クライアントアクセスのログインによって制御される単一のアプリケーションがメンテナンスを行うのが良いと考えています。

私は自分のサーバーに自分のスキーマのセキュリティ管理をしたいと思っている顧客がいるので、別のデータベースを持つことができるかどうか分かりません。

要求のソースにある に応じて、接続文字列を動的に取得するコンテキストを作成する方法はありますか。

public class ProductRepository { 

public void Add(Product product, int clientId) 
{ 
    //Here the connection string will be set according to the client id you are saving information 
    var context = ContextFactory.GetContext(clientId); 
    context.Products.Add(product); 

} 

} 

また、情報に属するエンティティの顧客ID内に配置する方がよいでしょうか?

public class BaseEntity { 

    public int Id {get;set;} 
    public int Client_Id {get;set} 
} 


public class Products : BaseEntity{ 
    public string Name {get;set;} 
    public double Price {get;set;} 

} 
+0

アプリケーションをホストする経験豊富なDBAをお持ちですか?特に、複数のクライアントの住宅/管理/サポートに関して、分散アプリケーションに関する理解がないように聞こえます。お金を払って専門家に支払うと、長期的にあなたを救うことになります – MethodMan

+0

データベースという用語はあいにくあいまいですが、人々がテーブルやスキーマ、サーバーインスタンス全体を意味することがあります。これを明確にすることができますか?同じテーブルにクライアントをホストすべきかどうか疑問に思っていますか?同じスキーマで?または同じSQL Serverインスタンス内にありますか? –

+0

申し訳ありませんが、正しい用語はスキーマ –

答えて

3

それぞれの長所と短所がありますが、クライアントごとにデータベースインスタンスを分離することをお勧めします。これにより、必要なカスタマイズのための柔軟性が大幅に向上します。

たとえば、データベースのスキーマを変更する作業が要求された場合などです。クライアントごとにデータベースがある場合、これは大量の作業ではありません。クライアントアクセスをテナントするテーブルを持つ単一のデータベースがあった場合、変更の変更はすべてのクライアントに影響し、これには望ましくない結果が生じる可能性があります。

しかし、別々のデータベースを持つことで、保守性のオーバーヘッドが増えています。理想的には、データベースのコアテーブルを変更するのではなく、新しいテーブルを持つ機能を追加するのではなく、各クライアント(およびバージョン)のスキーマ生成用のコード移行またはSQLスクリプトのいずれかを維持するのが理想的です。これは、クライアントがデータベースのスキーマに対して個別の変更を加えて、新しい機能にパッチを当てるか、単に既知のバグを修正するバグ修正の管理において、かなり複雑になる可能性があります。

最後に、クライアントごとに複数のデータベースを使用してセキュリティを管理する方が簡単です。セキュリティはデータベースごとに明確に定義されています。

データベースが1つの場合、クライアントのテナント機能の実装に注意を払わない限り、バグによってデータが破損する可能性があります。理想的には、テナント化された機能をカバーするための適切な単体テストがあることを確認することをお勧めします。データ違反は多くの国で非常に厳しい扱いを受けることがあります。たとえば、英国では、個人データのデータ漏洩により、10万ポンド以上の罰金が科される可能性があります。

これはベストプラクティスではなく個人的な好みになると思うが、

+0

実際にはカスタマイズはあまり普段ではないと信じています。誰もが同じアプリケーションによって管理されています。技術的には、それぞれの賛否両論の影響を評価したので、このシナリオのベストプラクティスでさえも得たいと思っています。 –

+0

そのようなベストプラクティスがあるかどうかはわかりません。マイクロソフトでは、1つのデータベースでテナントが可能な多くのアプリケーションを提供しています。それは正しくカウントするように実装しています。 –

関連する問題