Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Batasan kunci asing dapat menyebabkan siklus atau beberapa jalur kaskade?

SQL Server melakukan penghitungan sederhana jalur kaskade dan, alih-alih mencoba mencari tahu apakah ada siklus yang benar-benar ada, SQL Server mengasumsikan yang terburuk dan menolak untuk membuat tindakan referensial (CASCADE):Anda dapat dan masih harus membuat batasan tanpa tindakan referensial. Jika Anda tidak dapat mengubah desain Anda (atau melakukannya akan membahayakan banyak hal), Anda harus mempertimbangkan untuk menggunakan pemicu sebagai upaya terakhir.

FWIW menyelesaikan jalur kaskade adalah masalah yang kompleks. Produk SQL lainnya hanya akan mengabaikan masalah dan memungkinkan Anda untuk membuat siklus, dalam hal ini akan berlomba untuk melihat mana yang akan menimpa nilai terakhir, mungkin karena ketidaktahuan perancang (misalnya ACE/Jet melakukan ini). Saya mengerti beberapa produk SQL akan mencoba menyelesaikan kasus sederhana. Faktanya tetap, SQL Server bahkan tidak mencoba, memainkannya sangat aman dengan melarang lebih dari satu jalur dan setidaknya itu memberi tahu Anda begitu.

Microsoft sendiri menyarankan penggunaan pemicu daripada batasan 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. Bagaimana saya bisa melakukan sesuatu seperti:GUNAKAN @databaseName

  2. Kembalikan Nama Server Lokal di SQL Server dengan @@SERVERNAME

  3. Periksa Status Semua Pesan Database Database di SQL Server (T-SQL)

  4. Pemindaian Mundur Indeks SQL Server:Pemahaman dan Penyetelan Kinerja

  5. Mendapatkan peringatan:Nilai nol dihilangkan dengan operasi SET agregat atau lainnya