Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Warunkowy klucz obcy w SQL

Możesz użyć UTRWALANYCH kolumny z opisem przypadku, ale w końcu nie kupujesz nic poza kosztami.

Najlepszym rozwiązaniem byłoby zamodelowanie ich jako trzech odrębnych wartości na począ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)
)

Zastrzeżenie

tylko dlatego, że możesz, nie oznacza, że ​​powinieneś.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. jak uzyskać daty rozpoczęcia i zakończenia wszystkich tygodni między dwiema datami w serwerze SQL?

  2. dodawanie informacji o kodowaniu do wyniku FOR XML

  3. Jak mogę ręcznie wstawić tożsamość?

  4. Lista wszystkich tabel powiązanych z daną tabelą lub widokiem

  5. Wstaw zbiorczy z kwalifikatorem tekstu w SQL Server