助けが必要な初心者。
小さなデータベースを作成しています。

Lender と Pingtree の 2 つのテーブルでデータを制約したいと考えています。ProviderType テーブルにはルックアップ データが含まれており、「Lender」または「Pingtree」のいずれかが含まれています。Lender テーブルに Lender タイプと Pingtree、Pingtree タイプのみを含めることができるように、この構造を変更するにはどうすればよいですか?
助けが必要な初心者。
小さなデータベースを作成しています。

Lender と Pingtree の 2 つのテーブルでデータを制約したいと考えています。ProviderType テーブルにはルックアップ データが含まれており、「Lender」または「Pingtree」のいずれかが含まれています。Lender テーブルに Lender タイプと Pingtree、Pingtree タイプのみを含めることができるように、この構造を変更するにはどうすればよいですか?
これが 2 つのタイプを区別するテーブルProviderTypeIDの列であると推測すると、この同じ列をとテーブルの両方に追加し、適切なキー (まだ存在しない場合) をonに追加してから、複合制約を追加する必要があります。これらの列を含む および テーブルに。ProviderLenderPingtreeProviderID, ProviderTypeIdFOREIGN KEYLenderPingtree
これは難しそうに聞こえるかもしれませんが、スーパータイピング/サブタイピングと呼ばれる既知のパターンです。TypeIdスーパータイプ (プロバイダ) が複数のサブタイプになる場合、列は必要ありません。しかし、サブタイプが相互に排他的である場合、これはあなたがしなければならないことです。
次のようになります。
ALTER TABLE dbo.Lender ADD ProviderTypeId tinyint NOT NULL
   CONSTRAINT DF_Lender_ProviderTypeID DEFAULT (1)
   CONSTRAINT CK_Lender_ProviderTypeID_Is_Lender CHECK (ProviderTypeID = 1);
ALTER TABLE dbo.Pingtree ADD ProviderTypeId tinyint NOT NULL
   CONSTRAINT DF_Pingtree_ProviderTypeID DEFAULT (2)
   CONSTRAINT CK_Pingtree_ProviderTypeID_Is_Pingtree CHECK (ProviderTypeID = 2);
-- Any of a PK, UNIQUE constraint, or unique index will do
ALTER TABLE dbo.Provider ADD CONSTRAINT UQ_Provider_ID_ProviderTypeID
   UNIQUE (ID, ProviderTypeID);
ALTER TABLE dbo.Lender DROP CONSTRAINT FK_Lender_ProviderId;
ALTER TABLE dbo.Lender ADD CONSTRAINT FK_Lender_ProviderId_ProviderTypeId
   FOREIGN KEY (ID, ProviderTypeID) REFERENCES dbo.Provider (ID, ProviderTypeID);
ALTER TABLE dbo.PingTree DROP CONSTRAINT FK_PingTree_ProviderId;
ALTER TABLE dbo.PingTree ADD CONSTRAINT FK_PingTree_ProviderId_ProviderTypeId
   FOREIGN KEY (ID, ProviderTypeID) REFERENCES dbo.Provider (ID, ProviderTypeID);
正しく記述されている場合 ( で列リストを指定している場合INSERT)、ストアド プロシージャとアプリケーション SQL コードを変更する必要はありません。