Saya sedang mengerjakan transfer aplikasi berbasis web pl / sql besar ke dedicated server. Aplikasi ini terletak dalam satu skema dengan 70 paket kode program. Aplikasi ini dibuat kira-kira sekitar 15 orang di waktu yang berbeda. Dan sudah biasa bagi kami untuk membuat kunci asing pada tabel referensi dalam skema yang berbeda karena ini benar-benar nyaman dan menjaga database tetap bersih, karena kita tidak perlu menyimpan tabel referensi yang sama di skema yang berbeda.
Tapi bagaimanapun DBA saya (yang membuat contoh baru dengan DB dan menyalin aplikasi saya di dalam zona Solaris) mengatakan sangat keras hari ini, "Kunci asing pada skema yang berbeda itu jahat dan Anda perlu menghancurkannya!". Dia tidak menjelaskan sudut pandangnya.
Apakah itu ide yang buruk untuk melakukan itu dengan aplikasi besar?
sumber
Jawaban:
Bearwith me - Saya datang dari SQL Server dan membenci oracle, tapi saya pikir argumentasi masih berlaku.
Skema bagus untuk mengisolasi tabel dari subsistem logis. Kunci asing menjamin integritas data. Ini adalah konsep ortogonal - karena jelas integritas data antar subsistem juga harus dimiliki. Akuntansi dan Pengiriman dan mungkin Data CUstomer Pusat tidak hidup dalam silo di mana pelanggan dapat dihapus saat digunakan dalam akuntansi.
Karena itu, saya pikir persyaratan DBA adalah tanda ketidakmampuan. Tolong siapa pun bisa turun tangan dan memberikan argumen balasan - saya akan senang. Tapi ini adalah bagaimana saya melakukannya pada SQL Server (walaupun, sekali lagi, definisi skema kami adalah IIRC, sedikit berbeda dari definisi oracle).
sumber
Sementara menuntut penghancuran batasan kunci asing tanpa alasan yang terperinci adalah bodoh, masuk akal untuk menjaga referensi luar tetap terkendali. Bagaimana jika skema yang Anda rujuk diberi nama berbeda di server baru Anda?
Di Oracle Anda menyelesaikan masalah ini dengan membuat SYNONYMS untuk objek yang berada di luar skema saat ini.
sumber
Jika Anda memiliki kebutuhan (ruang / keamanan / apa pun) untuk memindahkan skema apa pun ke database yang berbeda, Anda tidak akan dapat menangani referensi lagi. Itu mungkin alasan utama untuk meminta pembunuhan referensi.
sumber
Satu-satunya "ide buruk" yang dapat saya bayangkan dari melakukan ini, adalah bahwa Anda tidak dapat memberikan hak istimewa objek REFERENSI (yang diperlukan untuk membuat batasan yang merujuk pada tabel) ke peran. Saya harus melakukan skema / pengguna dengan skema / pengguna.
Selain itu, saya tidak melihat titik DBA Anda.
sumber
Pikirkan ini: Skema pemilik tabel anak mulai membuat catatan di tabelnya dan tanpa sadar mencegah pengguna skema tabel induk dari menghapus catatan dari tabel induk. Apakah itu sesuatu yang diantisipasi dan dihargai?
sumber