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

Làm cách nào để có một ràng buộc kiểm tra tham chiếu đến một bảng khác?

Thêm một cột tblItem.ItemType cột. Cột này chỉ có thể có một giá trị trên bất kỳ hàng nhất định nào (hiển nhiên). Thêm một ràng buộc duy nhất đối với ItemID, ItemType.

Bây giờ, mẹo:ít người nhớ điều này, nhưng khóa ngoại có thể tham chiếu đến các cột của một ràng buộc duy nhất.

CREATE TABLE tblItem (
  ItemID INT PRIMARY KEY,
  ItemType CHAR(1),
  UNIQUE KEY (ItemID, ItemType)
);

CREATE TABLE tblGoodItem (
  ItemID INT PRIMARY KEY,
  ItemType CHAR(1),
  CHECK (ItemType='G')
  FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
);

CREATE TABLE tblBadItem (
  ItemID INT PRIMARY KEY
  ItemType CHAR(1),
  CHECK (ItemType='B')
  FOREIGN KEY (ItemID, ItemType) REFERENCES tblItem(ItemID, ItemType) 
);

Nếu bạn giới hạn ItemType trong mỗi bảng con ở một giá trị cố định, thì một hàng nhất định trong tblItem chỉ có thể được tham chiếu bởi một bảng con.

Tuy nhiên, đó là một quy trình ba bước để thay đổi một mặt hàng từ tốt thành xấu:

  1. XÓA hàng khỏi tblGoodItem
  2. CẬP NHẬT Loại Mục của hàng trong tblItem
  3. CHÈN hàng trong tblBadItem


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao SQL Server sử dụng quét chỉ mục thay vì tìm kiếm chỉ mục khi mệnh đề WHERE chứa các giá trị được tham số hóa

  2. Kết nối HP-UX Itanium với SQL Server

  3. Cài đặt cụm chuyển đổi dự phòng SQL Server -3

  4. Biểu thức SQL Server CASE

  5. Bối rối về thứ tự xử lý truy vấn logic của Itzik Ben-Gan trong cuốn sách SQL Server 2005 và cuốn sách SQL Server 2008 của anh ấy