Bạn có thể sử dụng PERSISTED COMPUTED cột có tuyên bố trường hợp nhưng cuối cùng, nó không mua gì ngoài chi phí.
Giải pháp tốt nhất là mô hình hóa chúng dưới dạng ba giá trị riêng biệt để bắt đầu.
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)
)
Disclaimer
chỉ vì bạn có thể không có nghĩa là bạn nên.
Nguồn
2010-12-23 14:42:58
MailID, PhoneID, EmailID là ba tên miền riêng biệt và không thể, không được mô hình hóa bằng một cột ChannelID duy nhất. Đây là thứ cơ bản. – onedaywhen