Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Kunci asing bersyarat dalam SQL

Anda dapat menggunakan PERSISTED COMPUTED kolom dengan pernyataan kasus tetapi pada akhirnya, itu tidak memberi Anda apa pun kecuali overhead.

Solusi terbaik adalah dengan memodelkannya sebagai tiga nilai berbeda untuk memulai.

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

Penafian

hanya karena kamu bisa bukan berarti kamu harus.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengurai VARCHAR yang diteruskan ke prosedur tersimpan di SQL Server?

  2. replikasi antara penerbit offline dan pelanggan online?

  3. Perakitan 'Microsoft.SqlServer.Types' versi 10 atau lebih tinggi tidak dapat ditemukan

  4. Masalah dengan kinerja parameter nilai tabel

  5. Kueri menggunakan tabel turunan dengan ISNUMERIC menghasilkan kegagalan konversi (varchar ke int)