Pengguna Aaron Bertrand membuat beberapa komentar yang sejalan dengan pemikiran saya tentang pertanyaan Anda. Ini lebih merupakan tantangan bingkai daripada jawaban untuk pertanyaan spesifik Anda, tetapi saya pikir ini berharga untuk dipertimbangkan dalam konteks ini.
Portabilitas adalah tujuan buku teks yang bagus, tetapi jarang terjadi dalam praktiknya.
Jika Anda harus mengubah platform di beberapa titik, akan ada perubahan yang diperlukan untuk aplikasi, database, dan mungkin banyak hal lainnya. Jika Anda bisa menjadi "platform agnostik" tanpa terlalu banyak usaha, itu tidak masalah. Tapi itu benar-benar keputusan bisnis yang buruk untuk menggunakannya sebagai tujuan desain.
Ada banyak tempat online di mana orang mendiskusikan kelemahan atau pemrograman dengan cara ini, berikut ini salah satu yang menurut saya cukup menarik:
Lapisan Abstraksi Basis Data Harus Mati!
Kekeliruan Portabilitas
Penulis menggunakan argumen yang saya dengar sepanjang waktu: Jika Anda menggunakan lapisan abstraksi yang baik, akan mudah untuk berpindah dari $ this_database ke $ other_database di ujung jalan.
Itu omong kosong. Tidak pernah mudah.
Dalam setiap aplikasi yang didukung basis data non-sepele, tidak ada yang berpikir beralih database sebagai hal yang mudah. Berpikir bahwa "pertobatan akan menyakitkan" adalah fantasi.
Insinyur yang baik mencoba memilih alat terbaik untuk pekerjaan itu dan kemudian melakukan segala yang mereka bisa untuk mengambil keuntungan dari fitur unik dan paling kuat dari alat mereka. Dalam dunia basis data, itu berarti petunjuk spesifik, pengindeksan, tipe data, dan bahkan keputusan struktur tabel. Jika Anda benar-benar membatasi diri pada subset fitur yang umum di semua RDBMS utama, Anda merugikan diri sendiri dan klien Anda.
Itu tidak berbeda dengan mengatakan "Saya melakukan untuk membatasi diri pada subset PHP yang sama di Perl dan C, karena saya mungkin ingin beralih bahasa suatu hari dan 'tanpa rasa sakit' port kode saya."
Itu tidak terjadi.
Biaya berpindah basis data setelah aplikasi dikembangkan dan digunakan cukup tinggi. Anda memiliki kemungkinan skema dan perubahan indeks, perubahan sintaksis, pengoptimalan dan penyetelan yang harus dilakukan kembali, petunjuk untuk menyesuaikan atau menghapus, dan sebagainya. Mengubah mysql_foo () ke oracle_foo () benar-benar adalah masalah Anda yang paling kecil. Anda akan menyentuh sebagian besar, jika tidak semua, dari SQL Anda - atau Anda setidaknya harus memverifikasinya.
Itu tidak terdengar "tidak menyakitkan" bagi saya.
<>
) dan non-standar (!=
), di mana tidak ada kompromi pada kinerja atau pemeliharaan, saya selalu memilih standar. Tetapi ketika datang dengan biaya lain, atau tidak ada standar yang setara, saya memanfaatkan dan menjadi milik. Hal-hal yang Anda menyerah hanya karena kemampuan untuk sepenuhnya beralih platform grosir tidak layak.