Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Условен външен ключ в SQL

Можете да използвате PERSISTED COMPUTED колони с изявление за случай, но в крайна сметка това не ви купува нищо освен режийни разходи.

Най-доброто решение би било да ги моделирате като три отделни стойности като начало.

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

Отказ от отговорност

само защото можете, не означава, че трябва.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да напиша foreach в SQL Server?

  2. SQLCLR и DateTime2

  3. Импортирайте избрани колони от CSV файлове в таблица на SQL Server

  4. Изтичане на памет в .net приложение

  5. Настройка и конфигуриране на репликация на SQL Server