我有一個數據庫結構,其包括如下表:使用外鍵,我可以在複合主鍵中引用固定值嗎?
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,目前我對他們沒有任何問題......但我有興趣瞭解他們導致他人的問題。 –