Ví dụ đầu tiên của bạn tuyên bố ràng buộc trong dòng, số thứ hai thì không. Chỉ các phím đơn giản (liên quan đến một thuộc tính) mới có thể được khai báo trong dòng, hợp chất khóa (liên quan đến nhiều cột) không thể. Nhưng cả hai đều là mức bảng ràng buộc!
Có bốn mức logic của chế:
1) mức độ cột:
CHECK (ProductID > 0)
2) mức Row:
CHECK (Product_start_date < Product_end_date)
3) mức Table (sau đây ví dụ chưa được hỗ trợ trong SQL Server):
CHECK (NOT EXISTS (SELECT *
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY ProductID) AS Tally
FROM Products AS P) AS DT1
WHERE Tally > 1))
4) mức cơ sở dữ liệu (chưa được hỗ trợ trong SQL Server):
CREATE ASSERTION EnterpriseUniqueIds
CHECK (NOT EXISTS (SELECT *
FROM ProductID AS P
JOIN Components AS C
ON C.ComponentID = P.ProductID));
Một hạn chế quan trọng liên quan đến việc so sánh hàng khác nhau trong cùng một bảng, do đó nó là một hạn chế bảng cấp.
Cảm ơn marc, đã hiểu. –