sql >> Databáze >  >> RDS >> Sqlserver

Podmíněný cizí klíč v SQL

Můžete použít PERSISTED COMPUTED sloupce s případovým prohlášením, ale nakonec vám nekoupí nic jiného než režii.

Nejlepším řešením by bylo modelovat je jako tři odlišné hodnoty pro začátek.

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

Odmítnutí odpovědnosti

To, že můžete, neznamená, že byste měli.



  1. Heroku pg:pull se nepodařilo naplnit schéma

  2. Nastavení závislosti maven pro SQL Server

  3. Zjistěte, zda má sloupec v Oracle sekvenci

  4. Odeslat formuláře Google do databáze MySQL?