OT:Có một số IMHO SQL Server không hỗ trợ, nhưng sẽ có ý nghĩa trong môi trường doanh nghiệp:
- Các ràng buộc có thể trì hoãn như đã đề cập ở đây
- MARS:Tại sao bạn cần đặt một tùy chọn cho một thứ hoàn toàn tự nhiên?
- Ràng buộc CASCADE DELETE:SQL Server chỉ cho phép một đường dẫn xếp tầng duy nhất cho một ràng buộc CASCADE DELETE nhất định. Một lần nữa, tôi không thấy lý do tại sao nó không được phép phân tầng khi xóa thông qua nhiều đường dẫn có thể có:Cuối cùng, tại thời điểm nó thực sự được thực thi, sẽ luôn chỉ có một đường dẫn thực sự được sử dụng, vậy tại sao đây có phải là hạn chế không?
- Ngăn chặn các giao dịch song song trên một kết nối ADO.NET.
- Bắt buộc mọi lệnh được thực thi trên một kết nối có giao dịch được thực hiện trong giao dịch này.
- Khi tạo chỉ mục DUY NHẤT, NULL được coi như thể nó là một giá trị thực và chỉ được phép xuất hiện một lần trong chỉ mục. Tuy nhiên, khái niệm NULL của SQL là "giá trị không xác định" sẽ chỉ ra rằng các giá trị NULL hoàn toàn bị bỏ qua khi tạo chỉ mục ...
Tất cả những điều nhỏ nhặt này làm cho nhiều tính năng giao dịch và toàn vẹn tham chiếu mà bạn mong đợi từ một RDBMS kích thước đầy đủ gần như vô dụng trong SQL Server. Ví dụ:vì các ràng buộc có thể hoãn lại không được hỗ trợ, khái niệm "giao dịch" như một Đơn vị Công việc nhất quán bên ngoài bị phủ định một phần, giải pháp khả thi duy nhất - ngoại trừ một số cách giải quyết bẩn - là không xác định các ràng buộc toàn vẹn tham chiếu. Tôi mong đợi, hành vi tự nhiên của một giao dịch là bạn có thể làm việc bên trong nó theo cách và thứ tự hoạt động bạn muốn, và hệ thống sẽ đảm bảo rằng nó nhất quán tại thời điểm bạn thực hiện nó. rằng một ràng buộc toàn vẹn tham chiếu với ON DELETE CASCADE chỉ có thể được xác định theo cách mà chỉ một ràng buộc duy nhất có thể dẫn đến việc xóa theo tầng của một đối tượng. Điều này thực sự không phù hợp với hầu hết các tình huống trong thế giới thực.