Kami memiliki proses ETL panjang yang mengalirkan data dari file input melalui serangkaian tabel.
Saya mempertimbangkan kemungkinan yang tidak mungkin untuk menambahkan integritas relasional ke tabel kami, tetapi saya tidak ingin proses ETL kami mati ketika menemui pelanggaran. Saya juga ingin catatan yang melanggar integritas referensial tetap dimuat. Namun, pada akhirnya, saya ingin mewaspadai semua pelanggaran integritas referensial.
Metode 1: Saya dapat mengabaikan integritas referensial dan menulis prosedur SQL yang menjalankan sekumpulan prosedur tersimpan untuk mengidentifikasi catatan yang melanggar integritas relasional, tetapi saya sangat menyukai gagasan integritas relasi yang ada di tabel itu sendiri karena saya merasa bahwa dokumen ini database di tempat terbaik - db.
Metode 2: Daripada menulis serangkaian kueri khusus untuk mengidentifikasi pelanggar, menurut saya kita harus membuang semua integritas referensi di awal proses dan kemudian menambahkannya di akhir. Jika kami mendapat pengecualian, kami tahu ada pelanggaran. Saya menyukai pendekatan ini, tetapi tidak seperti Metode 1 di mana SQL dapat ditulis untuk menargetkan hanya catatan yang baru saja ditambahkan untuk calon pelanggar, menambahkan kembali integritas ref mungkin akan memeriksa ulang seluruh tabel -- tabel yang terus berkembang. Ketika integritas referensi diaktifkan kembali, konsumen data dapat yakin bahwa data tersebut "baik" tanpa melakukan kueri apa pun lagi dengan cepat. Aku suka itu...
Apakah ada pendekatan ketiga? Saya melihat T-SQL mendukung perintah seperti
NOCHECK CONSTRAINT
ON UPDATE NO ACTION
ON INSERT NO ACTION
tapi saya tidak yakin bagaimana tujuan penggunaannya. Misalnya,
ALTER TABLE dbo.TableName NOCHECK CONSTRAINT FK01
Apakah maksudnya ini untuk mematikan pemeriksaan constrationmt ketika Anda memiliki sumber yang dapat dipercaya? Saya berasumsi bahwa jika dimatikan dan dihidupkan dengan cara ini maka pengaturan chg hanya berlaku untuk operasi di masa depan.
Pendekatan terbaik apa yang akan Anda gunakan agar proses selesai sampai akhir dan tetap mengidentifikasi semua integritas relasional atau kemungkinan pelanggaran integritas relasional?