Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Ograniczenie klucza obcego może powodować cykle lub wiele ścieżek kaskadowych?

SQL Server wykonuje proste liczenie ścieżek kaskadowych i zamiast próbować ustalić, czy jakiekolwiek cykle rzeczywiście istnieją, zakłada najgorsze i odmawia tworzenia akcji referencyjnych (KASKADA):możesz i nadal powinieneś tworzyć ograniczenia bez działań referencyjnych. Jeśli nie możesz zmienić swojego projektu (lub może to narazić na szwank), powinieneś rozważyć użycie wyzwalaczy w ostateczności.

FWIW rozwiązywanie ścieżek kaskadowych to złożony problem. Inne produkty SQL po prostu zignorują problem i pozwolą na tworzenie cykli, w którym to przypadku będzie wyścig, który nadpisze wartość jako ostatni, prawdopodobnie z powodu niewiedzy projektanta (np. robi to ACE/Jet). Rozumiem, że niektóre produkty SQL będą próbowały rozwiązać proste przypadki. Fakt pozostaje faktem, SQL Server nawet nie próbuje, zachowuje się wyjątkowo bezpiecznie, nie zezwalając na więcej niż jedną ścieżkę, a przynajmniej tak mówi.

Sam Microsoft zaleca używanie wyzwalaczy zamiast ograniczeń FK.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź niewysłaną pocztę w SQL Server (T-SQL)

  2. Co to jest RAISERROR programu SQL Server?

  3. Ograniczenie tylko dla jednego rekordu oznaczonego jako domyślne

  4. Dynamiczny obrót T-SQL

  5. ExecuteReader wymaga otwartego i dostępnego połączenia. Obecny stan połączenia to Łączenie