2011-07-06 22 views
0

.net mvcとsqlserver dbを使用しています。我々はまた、データアクセスにNHibernateはを使用している単一の共有データベースを持つマルチテナントデータベース

EDIT

。私たちが独自のSQLを書いたり、procsをストアしたりすることはないので、これについて言及します。データベース内のトリガーは機能するかもしれませんが、データベース間でトリガーを実行できるかどうかはわかりません。

のEND EDIT

我々は、各クライアントがDBのそこ独自のインスタンスを持っているので、セットアップマルチテナントを持っていると思います。しかし、我々は、各テナントに多くのユーザ情報を持つ他のデータベースに接続させる必要があります。それらの間に少量の共有データが存在します。基本的に、テナントは共有データベース内のユーザーのデータを参照します。

アイデアは、一部の人が共有データベース(独立したクライアント)だけを使用し、テナントクライアントの1人が雇うことができるという考えです。テナントは共有データベース内の新しい従業員データにアクセスする必要があります。さらに、従業員は1人のテナントを残して別のテナントを雇ったり、別のテナントを離れることができます。もちろん、各テナントに共有データベーススキーマを持たせることができます。また、一部の人が退職するたびに大量の輸出入を行うこともできますが、これは多くの問題のようです。

テナントが共有データベースへの参照を持ちますが、参照整合性がないという事実を管理する方法に関するアドバイスをお願いします。あるいは、代替アプローチがあれば何でもよい。 ありがとう、 Raif

答えて

2

データベース間では、宣言的な参照整合性(外部キー)をあきらめる必要があります。ただし、トリガーの後またはトリガーを使用してこれを実行することができます(必要と思われる場合)。ストアード・プロシージャーを使用してすべてのデータ操作を制御する場合は、そこで実行できます(挿入または更新時に、または変更の一部として、有効な値が使用されていることを確認するために、他のデータベースの表にEXISTSを結合または使用します)。

私はマルチテナントモデルを扱ってきましたが、コストの面で大きな利点があります(たとえば、場合によってはDRIをあきらめるなど)。主に参照データであり、フリーテキスト入力ではないものについては、余分な努力が必要ではありません。

+0

こんにちは、ありがとう。私はsprocsではなくnhibernateを使っていることを示すために私の質問を編集しました。私はトリガーの後または代わりに慣れていない私は研究する必要がありますか? – Raif

+0

共有データで参照整合性を強化する場合は、それは確かに一方の方法です。これが必要かどうかは、私にとっては難しいことです。 –

+0

ええ、はい私はトリガーが動作しない恐れがあります。共有DB内のデータが変更され、テナントが台無しになることが懸念されます。しかし、私は共有DBにトリガを入れて、正しいテナントを見つけてそこに情報を入れることはできません。共有DBには、接続するテナントへの参照はありません。 – Raif

関連する問題