Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Khóa ngoại có điều kiện trong SQL

Bạn có thể sử dụng PERSISTED COMPUTED các cột có tuyên bố trường hợp nhưng cuối cùng, nó không giúp bạn gì ngoài chi phí.

Giải pháp tốt nhất là lập mô hình chúng dưới dạng ba giá trị riêng biệt để bắt đầu.

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

Tuyên bố từ chối trách nhiệm

Chỉ vì bạn có thể không có nghĩa là bạn nên làm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để loại bỏ các đối tượng hỗ trợ lập sơ đồ khỏi SQL Server?

  2. Khái niệm cơ bản về Nhật ký giao dịch SQL Server

  3. Hết thời gian truy vấn từ ứng dụng web nhưng chạy tốt từ studio quản lý

  4. Chọn một tập hợp con các hàng vượt quá một tỷ lệ phần trăm của tổng giá trị

  5. Làm cách nào để chỉ chọn mục nhập mới nhất trong bảng?