Akhir-akhir ini saya sering mendengar bahwa SQL adalah bahasa yang buruk, dan tampaknya setiap kerangka kerja di bawah matahari sudah dikemas sebelumnya dengan lapisan abstraksi database.
Perhatikan bahwa lapisan ini hanya mengubah barang mereka sendiri menjadi SQL
. Untuk sebagian besar vendor database SQL
adalah satu-satunya cara untuk berkomunikasi dengan mesin.
Dalam pengalaman saya, SQL seringkali merupakan cara yang jauh lebih mudah, lebih fleksibel, dan lebih ramah programmer untuk mengelola input dan output data. Setiap lapisan abstraksi yang saya gunakan tampaknya merupakan pendekatan yang sangat terbatas tanpa manfaat nyata.
… Alasan yang baru saja saya jelaskan di atas.
Lapisan database tidak menambahkan apapun, mereka hanya membatasi Anda. Mereka membuat kueri yang disengketakan menjadi lebih sederhana tetapi tidak pernah lebih efisien.
Menurut definisi, tidak ada apa pun di lapisan database yang tidak ada di dalamnya SQL
.
Apa yang membuatnya SQL
begitu buruk, dan mengapa lapisan abstraksi database berharga?
SQL
adalah bahasa yang bagus, namun, dibutuhkan beberapa putaran otak untuk mengatasinya.
Secara teori, SQL
bersifat deklaratif, yaitu Anda menyatakan apa yang ingin Anda dapatkan dan mesin menyediakannya dengan cara tercepat.
Dalam praktiknya, ada banyak cara untuk merumuskan kueri yang benar (yaitu kueri yang mengembalikan hasil yang benar).
Pengoptimal dapat membangun kastil Lego dari beberapa algoritme yang telah ditentukan sebelumnya (ya, ada beberapa), tetapi mereka tidak dapat membuat algoritme baru. Masih dibutuhkan SQL
pengembang untuk membantu mereka.
Namun, beberapa orang mengharapkan pengoptimal menghasilkan "rencana terbaik", bukan "rencana terbaik yang tersedia untuk kueri ini dengan penerapan SQL
mesin yang diberikan".
Dan seperti yang kita ketahui bersama, ketika program komputer tidak memenuhi harapan orang, programlah yang disalahkan, bukan harapannya.
Namun, dalam banyak kasus, merumuskan ulang kueri dapat menghasilkan rencana terbaik. Ada tugas ketika tidak mungkin, namun, dengan peningkatan yang baru dan terus berkembang untuk SQL
kasus ini semakin sedikit jumlahnya.
Alangkah baiknya, jika vendor menyediakan beberapa akses tingkat rendah ke fungsi seperti "get the index range", "get a row by the rowid
" dll., Seperti C
compiler memungkinkan Anda untuk menyematkan assembly langsung ke dalam bahasa.
Saya baru-baru ini menulis artikel tentang ini di blog saya: