Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Membandingkan SQL, pembuat kueri, dan ORM


Pengantar

Menggunakan database untuk mengelola data aplikasi Anda adalah salah satu pilihan paling umum untuk persistensi data. Basis data memungkinkan penyimpanan dan pengambilan informasi yang cepat, memberikan jaminan integritas data, dan menawarkan kegigihan melebihi masa pakai instans aplikasi individual. Ada banyak jenis database yang tersedia untuk memenuhi kebutuhan dan preferensi proyek Anda.

Namun, bekerja langsung dengan database dari aplikasi Anda tidak selalu mudah. Perbedaan cara struktur data direpresentasikan sering menimbulkan tantangan. Kesulitan dalam mengungkapkan seluk-beluk tentang hubungan antara entitas yang berbeda juga dapat menyebabkan masalah. Untuk mengatasi hal ini, banyak alat berbeda telah dibuat untuk membantu bertindak sebagai antarmuka antara aplikasi inti dan lapisan data.

Dalam panduan ini, kita akan melihat beberapa perbedaan yang muncul di antara tiga pendekatan umum:SQL mentah, pembuat kueri, dan ORM (pemeta objek-relasional). Kami akan membandingkan beberapa keuntungan dan kerugian dari setiap pendekatan dan kemudian menyelesaikannya dengan daftar istilah yang umum digunakan untuk membantu Anda memahami beberapa konsep utama.

Sebagai ringkasan yang disederhanakan, berikut adalah pandangan umum tentang kekuatan dan kelemahan setiap pendekatan:

Pendekatan Fokus pada basis data / pemrograman Manajemen langsung Tingkat abstraksi Tingkat kerumitan
SQL Mentah berorientasi database tinggi tidak ada rendah
Pembuat kueri campuran rendah rendah rendah
ORM berorientasi pemrograman rendah tinggi tinggi


Mengelola data dengan SQL mentah atau bahasa kueri asli database lainnya

Beberapa aplikasi berinteraksi langsung dengan database dengan menulis dan mengeksekusi query menggunakan bahasa asli yang didukung oleh database engine. Seringkali, hanya driver database yang diperlukan untuk menghubungkan, mengotentikasi, dan berkomunikasi dengan instance database.

Pengembang dapat mengirim kueri yang ditulis dalam bahasa asli database melalui koneksi. Sebagai gantinya, database akan memberikan hasil kueri, juga dalam salah satu format aslinya. Untuk banyak database relasional, bahasa query pilihan adalah SQL.

Sebagian besar database relasional, serta beberapa database non-relasional, mendukung bahasa kueri terstruktur, juga dikenal sebagai SQL, untuk membangun dan mengeksekusi kueri yang kuat. SQL telah digunakan untuk mengelola data sejak tahun 1970-an, sehingga didukung dengan baik dan distandarisasi hingga tingkat tertentu.


Manfaat kueri asli

Menggunakan SQL atau bahasa asli database lainnya memiliki beberapa manfaat yang jelas.

Salah satu keuntungannya adalah pengembang menulis dan mengelola kueri basis data dan menangani hasilnya secara eksplisit. Meskipun ini bisa menjadi banyak pekerjaan tambahan, ini berarti ada sedikit kejutan dalam hal apa yang disimpan database, bagaimana database itu merepresentasikan data Anda, dan bagaimana database itu akan memasok data itu saat diambil nanti. Kurangnya abstraksi berarti semakin sedikit "bagian yang bergerak" yang dapat menyebabkan ketidakpastian.

Salah satu contohnya adalah kinerja. Sementara lapisan abstraksi yang canggih menghasilkan kueri SQL dengan menerjemahkan pernyataan pemrograman, SQL yang dihasilkan bisa sangat tidak efisien. Klausa yang tidak perlu, kueri yang terlalu luas, dan kesalahan lainnya dapat menyebabkan operasi basis data yang lambat yang dapat rapuh dan sulit untuk di-debug. Dengan menulis secara native di SQL, Anda dapat menggunakan semua pengetahuan domain dan akal sehat Anda untuk menghindari banyak kelas masalah kueri

Alasan lain untuk menggunakan query database-native adalah fleksibilitas. Tidak ada abstraksi yang bisa sefleksibel bahasa query database asli. Tingkat abstraksi yang lebih tinggi mencoba menjembatani kesenjangan antara dua paradigma yang berbeda, yang dapat membatasi jenis operasi yang dapat mereka ekspresikan. Namun, saat menulis dalam SQL mentah, Anda dapat memanfaatkan semua fitur mesin database dan mengekspresikan kueri yang lebih kompleks.



Kelemahan kueri asli

Meskipun kueri asli memiliki beberapa poin kuat yang pasti, itu bukan tanpa masalah.

Saat berinteraksi dengan database dari aplikasi menggunakan SQL biasa, Anda harus memahami struktur data yang mendasarinya untuk membuat kueri yang valid. Anda sepenuhnya bertanggung jawab untuk menerjemahkan antara tipe data dan struktur yang digunakan aplikasi Anda dan konstruksi yang tersedia dalam sistem database.

Hal lain yang perlu diingat ketika bekerja dengan SQL mentah adalah Anda sepenuhnya bertanggung jawab untuk mengelola keamanan input Anda. Ini terutama benar jika Anda menyimpan data yang disediakan oleh pengguna eksternal, di mana input yang dibuat secara khusus dapat menyebabkan database Anda mengungkapkan informasi yang tidak ingin Anda izinkan.

Jenis eksploitasi ini disebut injeksi SQL, dan merupakan masalah potensial setiap kali input pengguna dapat memengaruhi status basis data. Alat abstraksi yang lebih tinggi sering membersihkan input pengguna secara otomatis, membantu Anda menghindari kelas masalah ini.

Bekerja dengan bahasa kueri asli hampir selalu berarti membuat kueri dengan string biasa. Ini bisa menjadi proses yang menyakitkan jika Anda harus keluar dari input dan menggabungkan string bersama untuk membuat kueri yang valid. Operasi database Anda dapat terbungkus dalam banyak lapisan manipulasi string yang berpotensi tinggi untuk secara tidak sengaja merusak data.



Ringkasan kueri asli

Meskipun kita terutama membicarakan SQL di bagian ini, sebagian besar informasi di sini berlaku sama baiknya untuk bahasa kueri database asli apa pun. Singkatnya, SQL mentah atau penggunaan langsung bahasa kueri yang setara membuat Anda paling dekat dengan abstraksi yang digunakan oleh database untuk menyimpan dan mengelola data, tetapi memaksa Anda untuk melakukan semua pekerjaan berat dalam mengelola data secara manual.




Mengelola data dengan pembuat kueri

Pendekatan alternatif untuk menggunakan bahasa kueri asli basis data seperti SQL adalah dengan menggunakan alat atau pustaka yang disebut pembuat kueri untuk berbicara dengan basis data Anda.


Apa itu pembuat kueri SQL?

Pembuat kueri SQL menambahkan lapisan abstraksi di atas bahasa kueri asli basis data mentah. Mereka melakukan ini dengan memformalkan pola kueri dan menyediakan metode atau fungsi yang menambahkan sanitasi input dan secara otomatis melepaskan item untuk integrasi yang lebih mudah ke dalam aplikasi.

Struktur dan tindakan yang didukung oleh lapisan basis data masih cukup dapat dikenali saat menggunakan pembuat kueri SQL. Ini memungkinkan Anda untuk bekerja dengan data secara terprogram sambil tetap relatif dekat dengan data.

Biasanya, pembuat kueri menyediakan antarmuka yang menggunakan metode atau fungsi untuk menambahkan kondisi ke kueri. Dengan menggabungkan metode, pengembang dapat menyusun kueri basis data lengkap dari "klausa" individual ini.



Manfaat pembuat kueri SQL

Karena pembuat kueri menggunakan konstruksi (metode atau fungsi) yang sama dengan aplikasi Anda lainnya, pengembang sering kali menganggapnya lebih mudah untuk mengelola jangka panjang daripada kueri basis data mentah yang ditulis sebagai string. Sangat mudah untuk membedakan antara operator dan data dan mudah untuk menguraikan kueri menjadi potongan logis yang menangani bagian tertentu dari kueri.

Untuk beberapa pengembang, keuntungan lain menggunakan pembuat kueri SQL adalah tidak selalu menyembunyikan bahasa kueri yang mendasarinya. Meskipun operasi mungkin menggunakan metode alih-alih string, itu bisa cukup transparan, yang memudahkan mereka yang akrab dengan database untuk memahami apa yang akan dilakukan operasi. Ini tidak selalu terjadi saat menggunakan tingkat abstraksi yang lebih tinggi.

Pembuat kueri SQL sering kali juga mendukung banyak backend data, misalnya, mengabstraksi beberapa perbedaan halus dalam berbagai basis data relasional. Ini memungkinkan Anda menggunakan alat yang sama untuk proyek yang menggunakan database berbeda. Bahkan mungkin membuat migrasi ke database baru sedikit lebih mudah.



Kelemahan pembuat kueri SQL

Pembuat kueri SQL memiliki beberapa kelemahan yang sama seperti bahasa kueri asli.

Salah satu kritik populer adalah bahwa pembuat kueri SQL masih mengharuskan Anda untuk memahami dan memperhitungkan struktur dan kemampuan database. Ini bukan abstraksi yang cukup berguna untuk beberapa pengembang. Ini berarti Anda harus memiliki pemahaman yang cukup baik tentang SQL selain sintaks dan kemampuan khusus dari pembuat kueri itu sendiri.

Selain itu, pembuat kueri SQL masih mengharuskan Anda untuk menentukan bagaimana data yang Anda ambil terkait dengan data aplikasi Anda. Tidak ada sinkronisasi otomatis antara objek dalam memori Anda dan objek dalam database.

Sementara pembuat kueri sering meniru bahasa kueri yang dirancang untuk digunakan, lapisan abstraksi tambahan dapat berarti bahwa terkadang operasi tertentu tidak dimungkinkan menggunakan metode yang disediakan. Biasanya, ada mode "mentah" untuk mengirim kueri langsung ke backend, melewati antarmuka khas pembuat kueri, tetapi ini menghindari masalah daripada menyelesaikannya.



Ringkasan pembuat kueri SQL

Secara keseluruhan, pembuat kueri SQL menawarkan lapisan tipis abstraksi yang secara khusus menargetkan beberapa titik kesulitan utama dalam bekerja secara langsung dengan bahasa asli basis data. Pembuat kueri SQL hampir berfungsi sebagai sistem templating untuk kueri, memungkinkan pengembang untuk berjalan di antara bekerja secara langsung dengan database dan menambahkan lapisan abstraksi tambahan.




Mengelola data dengan ORM

Satu langkah lebih jauh ke hierarki abstraksi adalah ORM. ORM umumnya bertujuan untuk abstraksi yang lebih lengkap dengan harapan integrasi dengan data aplikasi lebih lancar.


Apa itu ORM?

Pemetaan objek-relasional, atau ORM, adalah bagian dari perangkat lunak yang didedikasikan untuk menerjemahkan antara representasi data dalam database relasional dan representasi dalam memori yang digunakan dengan pemrograman berorientasi objek (OOP). ORM menyediakan antarmuka berorientasi objek ke data dalam database, mencoba menggunakan konsep pemrograman yang sudah dikenal dan mengurangi jumlah kode boilerplate yang diperlukan untuk mempercepat pengembangan.

Secara umum, ORM berfungsi sebagai lapisan abstraksi yang dimaksudkan untuk membantu pengembang bekerja dengan database tanpa mengubah paradigma berorientasi objek secara drastis. Ini dapat membantu dengan mengurangi beban mental untuk beradaptasi dengan spesifikasi format penyimpanan database.

Secara khusus, objek dalam pemrograman berorientasi objek cenderung mengkodekan banyak keadaan di dalamnya dan dapat memiliki hubungan yang kompleks dengan objek lain melalui pewarisan dan konsep OOP lainnya. Memetakan informasi ini secara andal ke dalam paradigma relasional berorientasi tabel seringkali tidak mudah dan memerlukan pemahaman yang baik tentang kedua sistem. ORM berupaya meringankan beban ini dengan mengotomatiskan beberapa pemetaan ini dan dengan menyediakan antarmuka ekspresif ke data di dalam sistem.



Apakah tantangan ORM khusus untuk pemrograman berorientasi objek dan database relasional?

Menurut definisi, ORM dirancang khusus untuk antarmuka antara bahasa aplikasi berorientasi objek dan database relasional. Namun, mencoba memetakan dan menerjemahkan antara abstraksi struktur data yang digunakan dalam bahasa pemrograman dan yang digunakan oleh penyimpanan basis data adalah masalah yang lebih umum yang dapat muncul bila abstraksi tidak selaras dengan rapi.

Bergantung pada paradigma pemrograman (berorientasi objek, fungsional, prosedural, dll.) dan tipe database (relasional, dokumen, nilai kunci, dll.), jumlah abstraksi yang berbeda mungkin membantu. Sering kali, kompleksitas struktur data dalam aplikasi menentukan seberapa mudah antarmuka dengan penyimpanan data.

Pemrograman berorientasi objek cenderung menghasilkan banyak struktur dengan keadaan dan hubungan signifikan yang harus dipertanggungjawabkan. Beberapa paradigma pemrograman lain lebih eksplisit tentang di mana negara disimpan dan bagaimana dikelola. Misalnya, bahasa fungsional murni tidak mengizinkan status yang dapat diubah, jadi status sering kali merupakan input untuk fungsi atau objek yang menghasilkan status baru. Pemisahan data yang bersih dari tindakan, serta kejelasan siklus hidup keadaan dapat membantu menyederhanakan interaksi dengan database.

Either way, pilihan untuk antarmuka dengan database melalui perangkat lunak yang memetakan antara dua representasi yang berbeda sering tersedia. Jadi, meskipun ORM mendeskripsikan subset spesifik dari ini dengan tantangan unik, pemetaan antara memori aplikasi dan penyimpanan persisten sering kali memerlukan pertimbangan terlepas dari detailnya.



Rekam aktif vs ORM pemetaan data

ORM yang berbeda menggunakan strategi yang berbeda untuk memetakan antara aplikasi dan struktur database. Dua kategori utama adalah pola rekaman aktif dan pola pemetaan data .

Pola catatan aktif mencoba untuk merangkum data database dalam struktur objek dalam kode Anda. Objek berisi metode untuk menyimpan, memperbarui, atau menghapus dari database dan perubahan pada objek Anda dimaksudkan agar mudah tercermin dalam database. Secara umum, objek record aktif dalam aplikasi Anda mewakili record dalam database.

Implementasi rekaman aktif memungkinkan Anda mengelola database dengan membuat dan menghubungkan kelas dan instance dalam kode Anda. Karena ini umumnya memetakan instance kelas langsung ke record database, mudah untuk membuat konsep apa yang ada di database Anda jika Anda memahami objek apa yang digunakan dalam kode Anda.

Sayangnya, ini juga bisa datang dengan beberapa kerugian besar. Aplikasi cenderung sangat erat digabungkan dengan database, yang dapat menyebabkan masalah saat mencoba bermigrasi ke database baru atau bahkan saat menguji kode Anda. Kode Anda cenderung mengandalkan database untuk mengisi celah yang diturunkan dari objek Anda. Terjemahan "ajaib" antara dua domain ini juga dapat menyebabkan masalah kinerja karena sistem mencoba memetakan objek kompleks dengan mulus ke struktur data yang mendasarinya.

Pola pemetaan data adalah pola ORM umum lainnya. Seperti pola record aktif, data mapper mencoba untuk bertindak sebagai lapisan independen antara kode Anda dan database Anda yang menengahi di antara keduanya. Namun, alih-alih mencoba mengintegrasikan objek dan catatan database dengan mulus, ini berfokus pada mencoba memisahkan dan menerjemahkan di antara mereka sambil membiarkan masing-masing ada secara independen. Ini dapat membantu memisahkan logika bisnis Anda dari detail terkait database yang berhubungan dengan pemetaan, representasi, serialisasi, dll.

Jadi daripada membiarkan sistem ORM mencari cara untuk memetakan antara objek dan tabel database, pengembang bertanggung jawab untuk memetakan secara eksplisit antara keduanya. Hal ini dapat membantu menghindari penggabungan yang ketat dan operasi di belakang layar dengan mengorbankan lebih banyak pekerjaan dalam menemukan pemetaan yang sesuai.



Manfaat ORM

ORM populer karena berbagai alasan.

Mereka membantu mengabstraksi domain data yang mendasarinya menjadi sesuatu yang mudah untuk dipikirkan dalam konteks aplikasi Anda. Daripada memikirkan penyimpanan data sebagai sistem independen, ORM membantu Anda mengakses dan mengelola sistem data sebagai perpanjangan dari pekerjaan Anda saat ini. Ini dapat membantu pengembang bekerja lebih cepat pada logika bisnis inti daripada terjebak dalam nuansa backend penyimpanan mereka.

Efek samping lain dari ini adalah bahwa ORM menghapus banyak boilerplate yang diperlukan untuk berinteraksi dengan database. ORM sering kali dilengkapi dengan alat migrasi yang membantu Anda mengelola perubahan skema database berdasarkan perubahan yang dibuat dalam kode Anda. Anda tidak perlu mencari tahu skema database yang sempurna di awal jika ORM Anda dapat membantu mengelola perubahan pada struktur database. Perubahan aplikasi dan basis data Anda sering kali merupakan hal yang sama atau terkait erat, yang membantu melacak perubahan pada basis data saat Anda membuat perubahan pada kode.



Kelemahan ORM

ORM bukannya tanpa kekurangan. Dalam banyak kasus, ini muncul dari keputusan yang sama yang membuat ORM berguna.

Salah satu masalah mendasar dengan ORM adalah upaya menyembunyikan detail backend database. Kebingungan ini membuat bekerja dengan ORM lebih mudah dalam kasus-kasus sederhana atau dalam skala waktu yang kecil, tetapi sering kali menimbulkan masalah seiring dengan bertambahnya kompleksitas.

Abstraksi tidak pernah 100% selesai dan mencoba menggunakan ORM tanpa memahami bahasa kueri atau struktur basis data yang mendasarinya sering kali mengarah pada asumsi yang bermasalah. Hal ini dapat membuat proses debug dan penyetelan performa menjadi sulit atau tidak mungkin.

Mungkin masalah yang paling terkenal dari bekerja dengan ORM adalah ketidakcocokan impedansi objek-relasional, istilah yang digunakan untuk menggambarkan kesulitan menerjemahkan antara pemrograman berorientasi objek dan paradigma relasional yang digunakan oleh database relasional. Ketidakcocokan antara model data yang digunakan oleh dua kategori teknologi ini berarti bahwa abstraksi tambahan yang tidak sempurna diperlukan dengan setiap peningkatan kompleksitas. Ketidakcocokan impedansi objek-relasional telah disebut Vietnam ilmu komputer (mengacu pada Perang Vietnam) karena kecenderungannya untuk meningkatkan kompleksitas dari waktu ke waktu dan mengarah pada situasi di mana jalan menuju kesuksesan atau perubahan arah menjadi sulit atau tidak mungkin.

Secara umum, ORM cenderung lebih lambat daripada alternatif, terutama dengan kueri yang kompleks. ORM sering menghasilkan kueri yang rumit untuk operasi basis data yang relatif sederhana, karena mereka menggunakan pola umum yang harus cukup fleksibel untuk menangani kasus lain. Ketergantungan pada ORM untuk melakukan hal yang benar dalam segala situasi dapat menyebabkan kesalahan mahal yang sulit untuk dilakukan.



Ringkasan ORM

ORM dapat menjadi abstraksi yang berguna yang membuat bekerja dengan database jauh lebih mudah. Mereka dapat membantu Anda merancang dan mengulangi dengan cepat dan menjembatani perbedaan konseptual antara logika aplikasi dan struktur database. Namun, banyak dari keunggulan ini bertindak sebagai pedang bermata dua. Mereka dapat mencegah Anda memahami database Anda dan dapat menyulitkan untuk melakukan debug, mengubah paradigma, atau meningkatkan kinerja.




Glossary

Saat bekerja dengan teknologi yang menghubungkan antara database dan aplikasi, Anda mungkin menemukan beberapa terminologi yang tidak Anda kenal. Di bagian ini, kami akan membahas secara singkat beberapa istilah paling umum yang mungkin Anda temui, beberapa di antaranya telah dibahas sebelumnya dalam artikel ini dan beberapa di antaranya tidak.

  • Pemeta data: Pemeta data adalah pola desain atau perangkat lunak yang memetakan struktur data pemrograman ke struktur data yang disimpan dalam database. Pemeta data mencoba menyinkronkan perubahan antara dua sumber sambil menjaganya tetap independen satu sama lain. Pemeta itu sendiri bertanggung jawab untuk memelihara terjemahan yang berfungsi, membebaskan pengembang untuk mengulangi struktur data aplikasi tanpa memperhatikan representasi basis data.
  • Pengandar basis data: Driver database adalah perangkat lunak yang dirancang untuk merangkum dan mengaktifkan koneksi antara aplikasi dan database. Driver basis data mengabstraksi detail tingkat rendah tentang cara membuat dan mengelola koneksi dan menyediakan antarmuka programatik terpadu ke sistem basis data. Biasanya, driver database adalah tingkat abstraksi terendah yang digunakan pengembang untuk berinteraksi dengan database, dengan alat tingkat yang lebih tinggi yang dibangun berdasarkan kemampuan yang disediakan oleh driver.
  • Serangan injeksi: Serangan injeksi adalah serangan di mana pengguna jahat mencoba menjalankan operasi basis data yang tidak diinginkan menggunakan input yang dibuat khusus di bidang aplikasi yang dihadapi pengguna. Seringkali, ini digunakan untuk mengambil data yang seharusnya tidak dapat diakses atau untuk menghapus atau mengacak-acak informasi dalam database.
  • ORM: ORM, atau pemetaan objek-relasional, adalah lapisan abstraksi yang menerjemahkan antara representasi data yang digunakan dalam database relasional dan representasi dalam memori yang digunakan dengan pemrograman berorientasi objek. ORM menyediakan antarmuka berorientasi objek ke data dalam database, mencoba mengurangi jumlah kode dan menggunakan pola dasar yang sudah dikenal untuk mempercepat pengembangan.
  • Ketidakcocokan impedansi objek-relasional: Ketidaksesuaian impedansi objek-relasional mengacu pada kesulitan menerjemahkan antara aplikasi berorientasi objek dan database relasional. Karena struktur data bervariasi secara signifikan, mungkin sulit untuk memutasi dan mentranskripsikan struktur data terprogram dengan tepat dan berkinerja tinggi ke format yang digunakan oleh backend penyimpanan.
  • Kerangka kerja ketekunan: Kerangka persistensi adalah lapisan abstraksi middleware yang dikembangkan untuk menjembatani kesenjangan antara data program dan database. Kerangka kerja ketekunan juga dapat berupa ORM jika abstraksinya menggunakan objek peta ke entitas relasional.
  • Pembuat kueri: Pembuat kueri adalah lapisan abstraksi yang membantu pengembang mengakses dan mengontrol basis data dengan menyediakan antarmuka terkontrol yang menambahkan fitur kegunaan, keamanan, atau fleksibilitas. Biasanya, pembuat kueri relatif ringan, fokus pada kemudahan akses data dan representasi data, dan tidak berusaha menerjemahkan data ke dalam paradigma pemrograman tertentu.
  • SQL: SQL, atau bahasa kueri terstruktur, adalah bahasa khusus domain yang dikembangkan untuk mengelola sistem manajemen basis data relasional. Hal ini dapat digunakan untuk query, mendefinisikan, dan memanipulasi data dalam database serta struktur organisasi mereka. SQL ada di mana-mana di antara database relasional.


Kesimpulan

Pada artikel ini, kami melihat beberapa opsi berbeda untuk berinteraksi dengan database Anda dari aplikasi Anda. Kami memeriksa berbagai tingkat abstraksi dan fleksibilitas yang ditawarkan dengan menggunakan bahasa kueri asli basis data seperti SQL, menggunakan pembuat kueri untuk membantu menyusun kueri dengan aman, dan ORM untuk memberikan tingkat abstraksi yang lebih lengkap.

Masing-masing pendekatan ini memiliki kegunaannya sendiri dan beberapa mungkin cocok untuk jenis aplikasi tertentu daripada yang lain. Penting untuk memahami persyaratan aplikasi Anda, pengetahuan database organisasi Anda, dan biaya abstraksi (atau kekurangannya) yang Anda pilih untuk diterapkan. Secara keseluruhan, memahami setiap pendekatan akan memberi Anda peluang terbaik untuk memilih opsi yang sesuai untuk proyek Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Notasi Barker

  2. Mengambil Pesan Kesalahan Lengkap di isql

  3. Langsung ke Memulai Pengembangan Basis Data Berbasis Tes (TDDD)

  4. Bagaimana indeks yang difilter bisa menjadi fitur yang lebih kuat

  5. Mengapa Menggunakan Tes Unit adalah Investasi Besar untuk Arsitektur Berkualitas Tinggi