sql >> Base de Datos >  >> RDS >> Sqlserver

Restricciones diferibles en SQL Server

OT:En mi humilde opinión, hay bastantes cosas que SQL Server no admite, pero tendrían sentido en un entorno empresarial:

  • Restricciones diferibles como se menciona aquí
  • MARS:¿Por qué necesitas establecer una opción para algo completamente natural?
  • Restricciones CASCADE DELETE:SQL Server solo permite una única ruta de cascada para una determinada restricción CASCADE DELETE. Una vez más, no veo una razón por la que no se deba permitir que se active en cascada en la eliminación a través de múltiples rutas posibles:al final, en el momento en que realmente se ejecuta, siempre se usará solo una ruta, entonces ¿por qué? es esta restricción?
  • Prevención de transacciones paralelas en una única conexión ADO.NET.
  • Obligación de cada comando ejecutado en una conexión que tiene una transacción para ser ejecutada dentro de esta transacción.
  • Al crear un índice ÚNICO, NULL se trata como si fuera un valor real y solo se permite que aparezca una vez en el índice. Sin embargo, la noción de SQL de NULL como un "valor desconocido" indicaría que los valores NULL se ignorarían por completo al crear el índice...

Todas estas pequeñas cosas hacen que muchas de las características transaccionales y de integridad referencial que esperaría de un RDBMS de tamaño completo sean casi inútiles en SQL Server. Por ejemplo, dado que no se admiten restricciones diferibles, la noción de una "transacción" como una Unidad de trabajo externamente consistente se niega en parte, la única solución viable, excepto algunas soluciones sucias, es no definir restricciones de integridad referencial en absoluto. Yo esperaría que el comportamiento natural de una transacción sea que pueda trabajar dentro de ella en la forma y el orden de las operaciones que desee, y el sistema se asegurará de que sea coherente en el momento en que la confirme. Problemas similares surgen de la restricción, que una restricción de integridad referencial con ON DELETE CASCADE solo puede definirse de manera que una sola restricción pueda conducir a la eliminación en cascada de un objeto. Esto realmente no se ajusta a la mayoría de los escenarios del mundo real.