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

Khóa duy nhất so với chỉ mục duy nhất trên SQL Server 2008

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn hàng loạt chậm cho bảng có nhiều chỉ mục

  2. Chuỗi được phân tách bằng dấu phẩy thành cột của bảng trong SQL Server

  3. Chuyển đổi Int thành trường ngày tháng

  4. Nhật ký giao dịch SQL Server - Phần 2

  5. Giữa MS SQL Server có bao gồm các ranh giới phạm vi không?