Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Vincoli differibili in SQL Server

OT:Ci sono IMHO parecchie cose che SQL Server non supporta, ma avrebbero senso in un ambiente aziendale:

  • Vincoli differibili come menzionato qui
  • MARS:Perché devi impostare un'opzione per qualcosa di completamente naturale?
  • Vincoli CASCADE DELETE:SQL Server consente un solo percorso a cascata per un determinato vincolo CASCADE DELETE. Ancora una volta, non vedo un motivo per cui non dovrebbe essere consentito l'eliminazione a cascata attraverso più percorsi possibili:alla fine, nel momento in cui viene effettivamente eseguito, ci sarà sempre un solo percorso effettivamente utilizzato, quindi perché è questa restrizione?
  • Prevenzione delle transazioni parallele su un'unica connessione ADO.NET.
  • Forzatura di ogni comando eseguito su una connessione che ha una transazione da eseguire all'interno di questa transazione.
  • Quando si crea un indice UNIQUE, NULL viene trattato come se fosse un valore effettivo e può apparire solo una volta nell'indice. La nozione SQL di NULL come "valore sconosciuto" indicherebbe, tuttavia, che i valori NULL vengono ignorati del tutto durante la creazione dell'indice...

Tutte queste piccole cose rendono quasi inutili in SQL Server molte delle funzionalità di integrità referenziale e transazionale che ti aspetteresti da un RDBMS di dimensioni standard. Ad esempio, poiché i vincoli differibili non sono supportati, la nozione di "transazione" come unità di lavoro esternamente coerente è in parte negata, l'unica soluzione praticabile - eccetto per alcune soluzioni alternative sporche - è quella di non definire affatto i vincoli di integrità referenziale. Mi aspetto che il comportamento naturale di una transazione sia che tu possa lavorarci al suo interno nel modo e nell'ordine delle operazioni che preferisci, e il sistema si assicurerà che sia coerente nel momento in cui la esegui. Problemi simili sorgono dalla restrizione, che un vincolo di integrità referenziale con ON DELETE CASCADE può essere definito solo in modo che un solo vincolo singolo possa portare all'eliminazione in cascata di un oggetto. Questo non si adatta alla maggior parte degli scenari del mondo reale.