Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Отлагаеми ограничения в SQL Server

OT:Има IMHO доста неща, които SQL Server не поддържа, но биха имали смисъл в корпоративна среда:

  • Ограничения с възможност за отлагане, както е споменато тук
  • МАРС:Защо трябва да задаваш опция за нещо напълно естествено?
  • Ограничения за CASCADE DELETE:SQL Server позволява само една каскадна пътека за дадено ограничение CASCADE DELETE. Отново, не виждам причина, поради която не трябва да се разрешава каскадно изтриване чрез множество възможни пътища:В крайна сметка, в момента, в който наистина се изпълнява, винаги ще има само един път, който всъщност се използва, така че защо това ограничение ли е?
  • Предотвратяване на паралелни транзакции в една ADO.NET връзка.
  • Принудително изпълнение на всяка команда, изпълнена върху връзка, която има транзакция, която трябва да се изпълни в рамките на тази транзакция.
  • Когато създавате УНИКАЛЕН индекс, NULL се третира като действителна стойност и се разрешава да се появи само веднъж в индекса. Представата на SQL за NULL като "неизвестна стойност" обаче би означавала, че стойностите NULL се игнорират напълно при създаването на индекса...

Всички тези малки неща правят много от референтната цялост и транзакционните функции, които бихте очаквали от пълноразмерна RDBMS, почти безполезни в SQL Server. Например, тъй като ограниченията с възможност за отлагане не се поддържат, идеята за „транзакция“ като външно последователна единица работа е частично отречена, единственото жизнеспособно решение – с изключение на някои мръсни заобиколни решения – е изобщо да не се дефинират ограничения за референтна цялост. Очаквам, естественото поведение на транзакцията е, че можете да работите вътре в нея по начина и реда на операциите, които харесвате, и системата ще се увери, че е последователна в момента, в който я извършвате. Подобни проблеми възникват от ограничението, че ограничение за референтна цялост с ON DELETE CASCADE може да бъде дефинирано само по начин, по който само едно ограничение може да доведе до каскадно изтриване на обект. Това наистина не отговаря на повечето реални сценарии.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли някакви недостатъци винаги да използвате nvarchar(MAX)?

  2. Отмяна на транзакция Entity Framework 6

  3. SqlConnection.Close() в израза за използване

  4. Как работи функцията NCHAR() в SQL Server (T-SQL)

  5. SqlServer:Неуспешно влизане за потребител