Một ràng buộc duy nhất được triển khai đằng sau hậu trường dưới dạng một chỉ mục duy nhất, vì vậy việc bạn chỉ định nó như thế nào không thực sự quan trọng. Tôi có xu hướng triển khai nó đơn giản là:
ALTER TABLE dbo.foo ADD CONSTRAINT UQ_bar UNIQUE(bar);
Thay vào đó, một số người tạo một chỉ mục duy nhất, ví dụ:
CREATE UNIQUE INDEX IX_UQ_Bar ON dbo.foo(bar);
Sự khác biệt nằm ở mục đích - nếu bạn đang tạo ràng buộc để thực thi tính duy nhất / quy tắc kinh doanh, bạn tạo một ràng buộc, nếu bạn làm như vậy để hỗ trợ hiệu suất truy vấn, thì việc tạo chỉ mục duy nhất có thể hợp lý hơn. Một lần nữa, dưới các trang bìa thì cách triển khai giống nhau, nhưng con đường bạn đi để đến đó có thể giúp ghi lại ý định của bạn.
Tôi nghĩ rằng có nhiều tùy chọn để tuân thủ cả chức năng Sybase trước đó cũng như tuân thủ tiêu chuẩn ANSI (mặc dù các ràng buộc duy nhất không tuân thủ 100% tiêu chuẩn, vì chúng chỉ cho phép một giá trị NULL - một chỉ mục duy nhất, trên mặt khác, có thể giải quyết vấn đề này bằng cách thêm WHERE
mệnh đề (WHERE col IS NOT NULL
) trên SQL Server 2008 trở lên).