Apakah itu ide buruk untuk membuat kunci asing di atas meja dalam skema yang berbeda dalam database yang sama untuk aplikasi besar?

13

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?

Alexander Myshov
sumber
13
DBA Anda harus dipecat.
Colin 't Hart
1
Kita semua akan berteriak bahwa DBA Anda bodoh jika hanya itu yang mereka katakan, tetapi apakah Anda yakin tidak ada konteks lain untuk argumen DBA Anda?
Kermit
1
mungkin DBA hanya melakukan yang terbaik yang dia bisa untuk mendukung pekerjaan konyol yang dilakukan para devs dalam membangun hal ini.
swasheck
2
@swasheck Di sisi lain, apakah Anda ingin memiliki pekerjaannya setelah database telah mengakumulasi beberapa tahun inkonsistensi dalam DBA ini?
Twinkles
@Twinkles tidak sama sekali
swasheck

Jawaban:

6

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).

TomTom
sumber
4

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.

Twinkles
sumber
1
Anda dapat menggunakan sinonim secara berlebihan dan semakin memperparah pertanyaan "apa artinya ini?". Lihat di sini untuk detail lebih lanjut tentang keamanan, kinerja, dan praktik terbaik stackoverflow.com/a/10042117/851930
kevinsky
3
Sinonim tidak dapat digunakan sebagai target batasan kunci asing.
Colin 't Hart
Poin yang valid. Dan bukti lebih lanjut bahwa membuat pernyataan tanpa memberi orang lain kesempatan untuk memperdebatkan kelebihan dan bahaya adalah buruk.
Twinkles
2

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.

AMG
sumber
0

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.

vegatripy
sumber
0

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?

letron123
sumber