次のテーブルを含むデータベース構造があります。
CREATE TABLE dbo.PaymentProvidersForEntities
(
PaymentProviderId SMALLINT NOT NULL,
EntityId BIGINT NOT NULL,
CONSTRAINT PK_PaymentProvidersForEntities
PRIMARY KEY (PaymentProviderId, EntityId),
CONSTRAINT FK_PaymentProvidersForEntities_PaymentProviders
FOREIGN KEY (PaymentProviderId)
REFERENCES PaymentProviders(PaymentProviderId)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT FK_PaymentProvidersForEntities_Entities
FOREIGN KEY (EntityId)
REFERENCES Entities(EntityId)
ON DELETE CASCADE ON UPDATE CASCADE
)
明らかに、これは複合主キーを持つ単純な多対多のリンクテーブルです。そのテーブルを参照するが、1つのPaymentProviderのみのデータを提供する別のテーブルが必要です(つまり、PaymentProviderId =固定値)。何かのようなもの:
CREATE TABLE dbo.SpecificPaymentProviderExtraDetails
(
EntityId BIGINT NOT NULL,
ExtraDetails NVARCHAR(MAX) NOT NULL,
CONSTRAINT PK_PaymentProviderExtraDetails
PRIMARY KEY (EntityId),
CONSTRAINT FK_PaymentProviderExtraDetails_PaymentProvidersForEntities
FOREIGN KEY (EntityId, 1)
REFERENCES PaymentProvidersForEntities(EntityId, PaymentProviderId)
ON DELETE CASCADE ON UPDATE CASCADE
)
明らかに、PaymentProvidersForEntitiesテーブルにnull許容の「ExtraDetails」フィールドを追加することもできますが、いくつかの異なるタイプの支払いプロバイダーがあり、それぞれが異なるタイプの追加の詳細を必要とするため、それほどエレガントではありません。私がやりたいことをするエレガントな方法はありますか?そうでない場合、同じことを達成するためのより良い方法は何でしょうか?