sql >> Database >  >> RDS >> Sqlserver

Voorwaardelijke externe sleutel in SQL

U kunt PERSISTED COMPUTED gebruiken kolommen met een case-statement, maar uiteindelijk kost het u niets anders dan overhead.

De beste oplossing zou zijn om ze te modelleren als drie verschillende waarden om mee te beginnen.

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

alleen omdat je het kunt, wil nog niet zeggen dat je het moet.



  1. MySql, PHP-weergave Afbeelding op HTML

  2. Hoe de juiste tijdzone in JDBC configureren?

  3. MySQL-tabel wordt om de een of andere reden met 10 verhoogd

  4. Probleem met Entity-update met jpa/hibernate