我有一个称为PartyChannel的表,其中包含以下各列
ID, ChannelID, ChannelType
ChannelID
根据MailID
存储PhoneID
或EmailID
或ChannelType
。因此,如何根据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)
)
免责声明
仅仅因为可以做并不意味着你应该做。