我有一张名为 PartyChannel 的表,其中包含以下列
ID, ChannelID, ChannelType
ChannelID
stores MailID
or PhoneID
or EmailID
取决于ChannelType
.
那么我如何根据通道类型在 PartyChannel 和所有三个表(邮件、电子邮件和电话)之间创建外键。
您可以使用持久计算 http://msdn.microsoft.com/en-us/library/ms191250.aspx带有 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)
)
免责声明
仅仅因为你可以,并不意味着你应该这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)