我有一个称为PartyChannel的表,其中包含以下各列

 ID, ChannelID, ChannelType


ChannelID根据MailID存储PhoneIDEmailIDChannelType

因此,如何根据channelType在PartyChannel和所有三个表(邮件,电子邮件和电话)之间创建外键。

最佳答案

您可以将PERSISTED COMPUTED列与case语句一起使用,但最后,除了开销之外,它什么都不买。

最好的解决方案是将它们建模为三个不同的值。

CREATE TABLE Mails (MailID INTEGER PRIMARY KEY)
CREATE TABLE Phones (PhoneID INTEGER PRIMARY KEY)
CREATE TABLE Emails (EmailID INTEGER PRIMARY KEY)

CREATE TABLE PartyChannel (
  ID INTEGER NOT NULL
  , ChannelID INTEGER NOT NULL
  , ChannelType CHAR(1) NOT NULL
  , MailID AS (CASE WHEN [ChannelType] = 'M' THEN [ChannelID] ELSE NULL END) PERSISTED REFERENCES Mails (MailID)
  , PhoneID AS  (CASE WHEN [ChannelType] = 'P' THEN [ChannelID] ELSE NULL END) PERSISTED REFERENCES Phones (PhoneID)
  , EmailID AS  (CASE WHEN [ChannelType] = 'E' THEN [ChannelID] ELSE NULL END) PERSISTED REFERENCES Emails (EmailID)
)


免责声明

仅仅因为可以做并不意味着你应该做。

08-26 23:40