我有一个数据库结构,其包括如下表:使用外键,我可以在复合主键中引用固定值吗?
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
)
显然,这是用一个复合主键的简单多到许多链接表。我想要另一个引用该表的表,但仅为一个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
)
很显然,我可以只添加一个可空“ExtraDetails”字段中PaymentProvidersForEntities表,但我没有发现,很优雅一样会有几种不同类型的支付提供者,每个需要不同类型的额外的细节。有没有一种优雅的方式来做我想做的事?如果不是,那么实现同样目标的更好方法是什么?
级联删除和更新可能会给经验丰富的DBA带来问题。我会建议你删除它们并手动执行需要级联的更新/删除 – gh9
你能提供参考吗?我将自己形容为“经验丰富”的DBA,目前我对他们没有任何问题......但我有兴趣了解他们导致他人的问题。 –