2012-01-08 10 views
0

私は共有されたマルチテナント性を持つシステムを持っています。つまり、各テナントにはテナント列を持つデータが含まれています。マルチテナント:テナントを削除するにはどうすればよいですか?

新しいテナントのプロビジョニングはすばやく簡単ですが、今では1つのテナントを削除するという課題に直面しています。

エンティティが一貫性のために依存しているとすれば、システムが他のテナントによって使用されている間に、データベースからテナントを簡単に削除するにはどうすればよいですか?

システムはSQL Server 2008 R2を使用しています。

答えて

1

私があなたを得たら、FOREIGN KEYSON CASCADEオプションの古典的なケースです。あなたは時々、CASCADE ON DELETEとテーブルの参照自体のケースでは動作しません

のみマスターテナントテーブルから1つのレコードを削除し、原因FKEYSの適切なチェーンにシステムがNULLまたはDEFAULT値を参照列を関連レコードを削除または更新

1

Olegは、ON CASCADEオプションを使用してFKを指摘しているので、助けてください。しかし、私たちにスキーマを示していないので、「FOREIGN KEY制約を導入するとサイクルまたは複数のカスケードパスが発生する」というエラーがシステムに発生する可能性があるかどうかはよくわかりません。このエラーが表示された場合は、CASCADE DELETEの代わりにDELETE INSTEAD OF DELETEトリガを追加してジョブを実行してください。

CREATE TRIGGER dbo.Tenants_Delete 
ON dbo.Tenants 
INSTEAD OF DELETE 
AS 
BEGIN; 
    --Delete from the Child and Master table as per your need here. 
    --Make use of the magic table DELETED 
END; 
0

テナントを削除すると頭痛がひどくなる場合は、回避策を使用できる可能性があります。

ブール値の列activeをテナント表に追加するだけです。次に、アクティブなテナントのみを選択するビューを導入します。テナント元のテーブルではなく、このビューでデータを検索するようにストアドプロシージャを調整します。

関連する問題