sql >> Database teknologi >  >> RDS >> Sqlserver

Betinget fremmednøgle i SQL

Du kan bruge PERSISTED COMPUTED kolonner med en sagserklæring, men i sidste ende køber det dig ikke andet end overhead.

Den bedste løsning ville være at modellere dem som tre forskellige værdier til at starte med.

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)
)

Ansvarsfraskrivelse

bare fordi du kan, betyder det ikke, at du skal.



  1. Tabelvariabel i Oracles lagrede procedure

  2. php og mysql - Send afkrydsningsfelt, alternativknap og rullemenuresultater fra bruger til mysql-database og gem det der

  3. Sådan tilføjes AM/PM til en tidsværdi i SQL Server (T-SQL)

  4. Slut dig til 3 tabeller i SQL