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

Batasan kunci asing dua arah

"Saya yakin ini tidak mungkin. Anda tidak dapat membuat Catatan Alamat sampai Anda mengetahui ID orang tersebut dan Anda tidak dapat memasukkan catatan orang tersebut sampai Anda mengetahui AddressId untuk bidang PrimaryAddressId."

Sepintas, klaim itu tampak SANGAT menarik. Namun, itu cukup menguntungkan.

Ini adalah jenis masalah yang sangat umum yang coba diserang oleh vendor SQL DBMS selama beberapa dekade.

Kuncinya adalah bahwa semua pemeriksaan kendala harus "ditangguhkan" sampai kedua sisipan selesai. Itu dapat dicapai dalam berbagai bentuk. Transaksi basis data mungkin menawarkan kemungkinan untuk melakukan sesuatu seperti "ATUR pemeriksaan kendala yang ditangguhkan AKTIF", dan Anda sudah selesai (jika bukan karena fakta bahwa dalam contoh khusus ini, Anda mungkin harus mengacaukan desain Anda agar hanya dapat MENDEFINISIKAN dua batasan FK, karena salah satunya BUKAN FK 'sejati' dalam pengertian SQL !).

Solusi berbasis pemicu seperti yang dijelaskan di sini pada dasarnya mencapai efek yang sama, tetapi solusi tersebut terkena semua masalah pemeliharaan yang ada dengan integritas yang diterapkan aplikasi.

Dalam karya mereka, Chris Date &Hugh Darwen menjelaskan apa yang menjadi solusi sebenarnya untuk masalah tersebut:penugasan ganda. Artinya, pada dasarnya, kemungkinan untuk menyusun beberapa pernyataan pembaruan yang berbeda dan membuat DBMS bertindak seolah-olah itu adalah satu pernyataan tunggal. Implementasi konsep itu memang ada, tetapi Anda tidak akan menemukan yang berbicara SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kesalahan Login SQL Server:Login gagal untuk pengguna 'NT AUTHORITY\SYSTEM'

  2. Bagaimana cara menyimpan direktori / hierarki / struktur pohon dalam database?

  3. Sistem Manajemen Database Paling Populer di Dunia

  4. Pivot dinamis T-SQL

  5. Di SQL Server 2008 saya dapat meneruskan parameter bernilai tabel ke prosedur tersimpan saya dari NHibernate.How untuk mencapai hal yang sama di Oracle