Misalkan saya sedang membangun blog yang ingin saya posting dan komentar. Jadi saya membuat dua tabel, tabel 'posting' dengan kolom 'id' integer autoincrementing, dan tabel 'komentar' yang memiliki kunci asing 'post_id'.
Lalu saya ingin menjalankan apa yang mungkin akan menjadi permintaan paling umum saya, yaitu untuk mengambil posting dan semua komentarnya. Menjadi agak baru untuk database relasional, pendekatan yang tampak paling jelas bagi saya adalah menulis kueri yang akan terlihat seperti:
SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments
FROM posts
WHERE id = 7
Yang akan memberi saya id dan konten posting yang saya inginkan, bersama dengan semua baris komentar yang relevan yang dikemas dengan rapi dalam array (representasi bersarang seperti yang akan Anda gunakan di JSON). Tentu saja, SQL dan basis data relasional tidak berfungsi seperti ini, dan yang paling dekat yang bisa mereka dapatkan adalah melakukan penggabungan antara 'posting' dan 'komentar' yang akan mengembalikan banyak duplikasi data yang tidak perlu (dengan informasi posting yang sama diulang di setiap baris), yang berarti waktu pemrosesan dihabiskan baik pada basis data untuk menggabungkan semuanya dan pada ORM saya untuk menguraikan dan membatalkan semuanya.
Bahkan jika saya menginstruksikan ORM saya untuk dengan bersemangat memuat komentar posting, yang terbaik akan lakukan adalah mengirimkan satu permintaan untuk posting, dan kemudian permintaan kedua untuk mengambil semua komentar, dan kemudian menyatukannya di sisi klien, yang juga tidak efisien.
Saya mengerti bahwa basis data relasional adalah teknologi yang telah terbukti (ya, mereka lebih tua dari saya), dan ada banyak penelitian yang dilakukan selama beberapa dekade, dan saya yakin ada alasan yang sangat bagus mengapa mereka (dan SQL standar) dirancang untuk berfungsi seperti yang mereka lakukan, tapi saya tidak yakin mengapa pendekatan yang saya sebutkan di atas tidak mungkin. Tampaknya bagi saya menjadi cara yang paling sederhana dan jelas untuk menerapkan salah satu hubungan paling mendasar antara catatan. Mengapa basis data relasional tidak menawarkan sesuatu seperti ini?
(Penafian: Saya kebanyakan menulis webapp menggunakan Rails dan NoSQL datastores, tetapi baru-baru ini saya sudah mencoba Postgres, dan saya sangat menyukainya. Saya tidak bermaksud menyerang basis data relasional, saya hanya bingung.)
Saya tidak bertanya bagaimana mengoptimalkan aplikasi Rails, atau cara meretas masalah ini di basis data tertentu. Saya bertanya mengapa standar SQL bekerja seperti ini ketika tampaknya berlawanan dengan intuisi dan boros bagi saya. Pasti ada beberapa alasan historis mengapa perancang SQL asli ingin hasil mereka terlihat seperti ini.