Saya kadang-kadang mendengar hal-hal tentang bagaimana SQL menyebalkan dan itu bukan bahasa yang baik, tetapi saya tidak pernah benar-benar mendengar banyak tentang alternatif selain itu. Jadi, apakah bahasa bagus lainnya yang memiliki tujuan yang sama (akses database) dan apa yang membuatnya lebih baik daripada SQL? Apakah ada database bagus yang menggunakan bahasa alternatif ini?
EDIT: Saya terbiasa dengan SQL dan menggunakannya sepanjang waktu. Saya tidak mempermasalahkannya, saya hanya tertarik pada alternatif apa pun yang mungkin ada, dan mengapa orang lebih menyukainya.
Saya juga tidak mencari jenis database alternatif (gerakan NoSQL), hanya cara yang berbeda untuk mengakses database.
Jawaban:
Saya tentu setuju bahwa sintaks SQL sulit untuk dikerjakan, baik dari sudut pandang pembuatannya secara otomatis, dan dari sudut pandang penguraiannya, dan itu bukan gaya bahasa yang akan kita tulis hari ini jika kita merancang SQL untuk tuntutan yang kita tempatkan di atasnya hari ini. Saya tidak berpikir kita akan menemukan begitu banyak kata kunci yang bervariasi jika kita mendesain bahasanya hari ini, saya kira sintaks gabungan akan berbeda, fungsi seperti
GROUP_CONCAT
akan memiliki sintaks yang lebih teratur daripada menempel lebih banyak kata kunci di tengah tanda kurung untuk mengontrol perilakunya ... buat daftar inkonsistensi dan redundansi Anda sendiri dalam SQL yang Anda ingin / harapkan untuk diperhalus jika kita mendesain ulang bahasanya hari ini.Tidak ada alternatif selain SQL untuk berbicara dengan database relasional (misalnya SQL sebagai protokol), tetapi ada banyak alternatif untuk menulis SQL dalam aplikasi Anda. Alternatif ini telah diimplementasikan dalam bentuk frontend untuk bekerja dengan database relasional. Beberapa contoh frontend meliputi:
Saya pikir tema yang mendasari hari ini adalah bahwa daripada mengganti SQL dengan satu bahasa kueri baru, kami malah membuat frontend khusus bahasa untuk menyembunyikan SQL dalam bahasa pemrograman harian reguler kami, dan memperlakukan SQL sebagai protokol untuk berbicara dengan relasional database.
sumber
Lihatlah daftar ini.
Bahasa Hibernate Query mungkin yang paling umum. Keuntungan dari Hibernate adalah objek dipetakan dengan sangat mudah (hampir secara otomatis) ke database relasional, dan pengembang tidak perlu menghabiskan banyak waktu untuk melakukan desain database. Kunjungi situs web Hibernate untuk info lebih lanjut. Saya yakin orang lain akan berbaur dengan bahasa kueri menarik lainnya ...
Tentu saja, ada banyak hal NoSQL di luar sana, tetapi Anda secara khusus menyebutkan bahwa Anda tidak tertarik dengan itu.
sumber
SQL berusia lebih dari tiga puluh tahun. Wawasan tentang "fitur mana yang membuat sesuatu menjadi bahasa 'baik' dan mana yang membuatnya menjadi 'buruk'" telah berkembang lebih cepat daripada SQL itu sendiri.
Selain itu, SQL bukanlah bahasa yang sesuai dengan standar "apa yang diperlukan untuk menjadi relasional", jadi, SQL bukanlah bahasa relasional untuk boot.
Saya mengundang Anda untuk merenungkan kemungkinan bahwa Anda mencoba mendengar hanya di tempat yang salah (yaitu, industri DBMS komersial secara eksklusif).
Date & Darwen mendeskripsikan fitur-fitur yang harus disesuaikan oleh bahasa manipulasi data modern dalam "Manifesto Ketiga" mereka, versi terbaru yang ditetapkan dalam buku mereka "Database, Jenis & Model Relasional".
Jika yang Anda maksud dengan "baik" adalah sesuatu seperti "kekuatan industri", maka tidak. Hal terdekat yang tersedia mungkin adalah Dataphor.
Proyek Rel menawarkan implementasi untuk bahasa Tutorial D yang didefinisikan dalam "Database, Jenis & Model Relasional", tetapi tujuan utama Rel saat ini adalah untuk mendidik di alam.
Proyek SIRA_PRISE saya menawarkan implementasi untuk manajemen data yang "benar-benar relasional", tetapi saya ragu untuk juga menamakannya "implementasi bahasa".
Dan tentu saja, Anda mungkin juga melihat beberapa hal non-relasional, seperti yang diusulkan beberapa orang, tetapi saya pribadi mengabaikan manajemen data non-relasional sebagai beberapa dekade regresi teknologi. Tidak layak untuk dipertimbangkan.
Oh, dan omong-omong, sistem perangkat lunak yang digunakan untuk mengelola database bukanlah "database", tetapi "Sistem Manajemen DataBase", disingkat "DBMS". Seperti halnya foto bukanlah hal yang sama dengan kamera, dan jika Anda mendiskusikan kamera, dan Anda ingin menghindari kebingungan, maka Anda harus menggunakan kata yang tepat "kamera" daripada "foto".
sumber
Mungkin Anda sedang memikirkan kritik yang diucapkan C. Date dan teman-temannya terhadap database relasional dan SQL yang ada; mereka mengatakan sistem dan bahasa tidak 100% relasional, dan seharusnya begitu. Saya tidak melihat ada masalah nyata di sini; Sejauh yang saya bisa lihat, Anda dapat memiliki sistem relasional 100%, jika Anda mau, hanya dengan mendisiplinkan cara Anda menggunakan SQL.
Apa yang secara pribadi terus saya hadapi adalah kurangnya kekuatan ekspresif yang diwarisi SQL dari basis teoretisnya, aljabar relasional. Salah satu masalah adalah kurangnya dukungan untuk penggunaan pemesanan domain, yang Anda hadapi saat bekerja dengan data yang ditandai oleh tanggal, stempel waktu, dan sebagainya. Saya pernah mencoba melakukan aplikasi pelaporan sepenuhnya dalam SQL biasa pada database yang penuh dengan stempel waktu dan itu tidak layak. Lainnya adalah kurangnya dukungan untuk jalur traversal: sebagian besar data saya terlihat seperti grafik terarah yang saya perlukan untuk melintasi jalur masuk, dan SQL tidak dapat melakukannya. (Ini tidak memiliki "penutupan transitif". SQL-1999 dapat melakukannya dengan "subkueri rekursif" tetapi saya belum melihatnya dalam penggunaan sebenarnya. Ada juga berbagai peretasan untuk membuat SQL mengatasi tetapi mereka jelek.) Masalah-masalah ini adalah juga dibahas oleh beberapa tulisan Date.
Baru-baru ini saya diarahkan ke .QL yang tampaknya mengatasi masalah penutupan transitif dengan baik, tetapi saya tidak tahu apakah itu dapat menyelesaikan masalah dengan domain yang dipesan.
sumber
Jawaban langsung: Saya rasa tidak ada pesaing serius di luar sana. DBase dan penirunya (Foxpro, Codebase dll) adalah pesaing untuk sementara waktu, tapi saya pikir mereka pada dasarnya kalah dalam perang bahasa query database. Ada banyak produk database lain yang memiliki bahasa query sendiri, seperti Progress dan Paradox dan beberapa produk lain yang saya gunakan yang namanya tidak saya ingat dan pasti masih banyak lagi yang tidak pernah saya dengar. Tapi saya tidak berpikir ada pesaing lain yang bahkan mendekati untuk mendapatkan pangsa pasar yang tidak sepele.
Sebagai bukti sederhana bahwa ada perbedaan antara format database dan bahasa kueri, versi terakhir DBase yang saya gunakan - beberapa tahun lalu sekarang - menawarkan bahasa kueri DBase "tradisional" dan SQL, keduanya dapat digunakan untuk mengakses data yang sama.
Mengoceh sampingan: Saya tidak akan mengatakan bahwa SQL menyebalkan, tetapi memiliki banyak kekurangan. Dengan keuntungan dari pengalaman bertahun-tahun dan melihat ke belakang yang sekarang kita miliki, saya yakin seseorang dapat merancang bahasa kueri yang lebih baik. Tetapi menciptakan bahasa kueri yang lebih baik, dan meyakinkan orang untuk menggunakannya, adalah dua hal yang sangat berbeda. Apakah cukup lebih baik untuk meyakinkan orang bahwa belajar itu sepadan. Orang-orang telah menginvestasikan bertahun-tahun dalam hidup mereka untuk belajar menggunakan SQL secara efektif. Meskipun bahasa baru Anda lebih mudah digunakan, pasti ada kurva belajarnya. Dan bagaimana Anda akan memigrasi sistem yang ada dari SQL ke bahasa baru? Dll. Hal ini dapat dilakukan, tentu saja, seperti C ++, C #, dan Java telah menggulingkan COBOL dan FORTRAN. Tetapi, dibutuhkan kombinasi keunggulan teknis dan pemasaran yang baik untuk berhasil.
Namun, saya mendapatkan tawa dari orang-orang yang terburu-buru untuk membela SQL setiap kali seseorang mengkritiknya, yang bersikeras bahwa masalah apa pun yang Anda miliki dengan SQL haruslah ketidakmampuan Anda sendiri dalam menggunakannya dan bukan kesalahan SQL, yang seharusnya tidak Anda miliki. mencapai tingkat pemikiran yang lebih tinggi yang diperlukan untuk memahami kesempurnaannya, dll. Tenang, tarik napas dalam-dalam: Kami menghina bahasa komputer, bukan ibumu.
sumber
Lihat LINQ ke SQL ...
Sudah mencobanya beberapa bulan yang lalu dan tidak pernah melihat ke belakang ....
sumber
Kembali ke tahun 1980-an, ObjectStore menyediakan akses objek transparan. Ini seperti RDBMS ditambah ORM, kecuali tanpa semua lapisan abstraksi bocor ekstra: ia menyimpan objek langsung di database.
Jadi alternatif ini benar-benar "tidak ada bahasa sama sekali", atau mungkin "bahasa yang sudah Anda gunakan". Anda akan menulis kode C ++ dan membuat atau melintasi objek seolah-olah itu adalah objek asli, dan database menangani semuanya sesuai kebutuhan. Jenis seperti ActiveRecord tetapi sebenarnya berfungsi sebaik klaim pemasaran Blitz ActiveRecord. :-)
(Tentu saja, itu tidak memiliki kekuatan pemasaran Oracle, dan tidak memiliki biaya nol MySQL, jadi semua orang mengabaikannya. Dan sekarang kami mencoba menirunya dengan RDBMS dan ORM, dan beberapa orang mencoba memperdebatkan bahwa tabel sebenarnya masuk akal untuk menyimpan objek, dan menulis file XML raksasa untuk memberi tahu komputer Anda cara memetakan objek ke tabel adalah solusi yang masuk akal.)
sumber
Pergerakan umum saat ini adalah NoSQL; Umumnya teknologi tersebut adalah:
Secara pribadi menurut saya tidak ada yang salah dengan SQL asalkan sesuai dengan kebutuhan Anda. SQL ekspresif dan bagus untuk bekerja dengan data terstruktur.
sumber
Saya pikir Anda mungkin tertarik untuk melihat Dataphor , yang merupakan lingkungan pengembangan relasional sumber terbuka dengan server basis data sendiri (yang berbicara D), dan kemampuan untuk mendapatkan antarmuka pengguna dari bahasa kuerinya.
Juga, tampaknya Ingres masih mendukung QUEL, dan ini open source.
sumber
SQL berfungsi dengan baik untuk domain yang dirancang - tabel data yang saling terkait. Ini umumnya ditemukan dalam pemrosesan data bisnis tradisional. SQL tidak berfungsi dengan baik saat mencoba mempertahankan jaringan objek yang kompleks.
Jika kebutuhan Anda adalah menyimpan dan memproses data yang relatif tradisional, gunakan beberapa DBMS berbasis SQL.
Menanggapi suntingan Anda:
Jika Anda mencari alternatif untuk SQL DML untuk mengambil data dari penyimpanan data relasional, saya belum pernah mendengar tentang alternatif serius untuk SQL.
Ketukan yang didapat SQL, menurut saya, tidak terlalu bertentangan dengan bahasa dibandingkan dengan prinsip penyimpanan data yang mendasari yang menjadi dasar bahasa tersebut. Orang sering mengacaukan bahasa SQL dengan model data relasional tempat RDBMS dibuat.
sumber
Database Relasional bukan satu-satunya jenis database yang ada. Saya harus mengatakan sepatah kata pun tentang Object-Database karena saya belum melihatnya dalam tanggapan dari orang lain. Saya memiliki beberapa pengalaman dengan kerangka python Zope yang menggunakan ZODB untuk persistensi objek daripada RDBMS (yah, secara teoritis mungkin untuk mengganti ZODB dengan database lain dalam zope tetapi terakhir kali saya memeriksa saya tidak berhasil membuatnya berfungsi, jadi bisa positif tentang itu).
Pola pikir ZODB benar-benar berbeda, lebih seperti pemrograman objek yang kebetulan terus-menerus.
ORM bisa dilihat sebagai salah satu bahasa
Di satu sisi saya percaya model Object-database adalah tentang ORM: mengakses data persisten melalui model objek biasa Anda. Ini semacam bahasa dan memperoleh beberapa pangsa pasar, tetapi untuk saat ini kami tidak melihatnya sebagai bahasa tetapi sebagai lapisan abstraksi. Namun saya percaya akan jauh lebih efisien untuk menggunakan ORM melalui Object-database daripada melalui SQL (dengan kata lain kinerja ORM saya kebetulan menggunakan menggunakan beberapa database SQL sebagai lapisan dasar tersedot).
sumber
Ada banyak implementasi SQL (SQL Server, mysql, Oracle, dll.), Tetapi tidak ada bahasa lain yang melayani tujuan yang sama dalam arti sebagai bahasa tujuan umum yang dirancang untuk penyimpanan dan pengambilan data relasional .
Ada database objek seperti db4o , dan ada database serupa yang disebut database noSQL yang merujuk pada hampir semua mekanisme penyimpanan data yang tidak bergantung pada SQL, tetapi yang paling umum adalah produk sumber terbuka seperti Cassandra yang didasarkan secara longgar pada konsep Bigtable Google .
Ada juga sejumlah produk database tujuan khusus seperti CDF, tetapi Anda mungkin tidak perlu khawatir tentang itu - jika Anda membutuhkannya, Anda akan mengetahuinya.
Tak satu pun dari ini setara dengan SQL.
Itu tidak berarti mereka "lebih baik" atau "lebih buruk" - mereka tidak sama. Dennis Forbes menulis postingan yang bagus baru-baru ini untuk memecahkan sejumlah klaim aneh yang muncul terhadap SQL. Dia mempertahankan (dan saya setuju) bahwa keluhan ini sebagian besar berasal dari orang-orang dan toko yang telah memilih alat yang salah untuk pekerjaan itu sejak awal, atau tidak menggunakan DBMS SQL mereka dengan benar (saya bahkan tidak terkejut lagi ketika saya lihat database SQL lain di mana setiap kolom adalah a
varchar(50)
dan tidak ada indeks atau kunci tunggal, di mana pun).Jika Anda menerapkan situs jejaring sosial lain dan tidak terlalu peduli dengan prinsip ACID , mulailah mencari produk seperti db4o. Namun, jika Anda mengembangkan sistem bisnis yang sangat penting, saya sangat menyarankan agar Anda berpikir dua kali sebelum bergabung dengan paduan suara "SQL sucks". Lakukan riset terlebih dahulu, cari tahu fitur apa saja yang dapat dan tidak dapat didukung oleh berbagai produk.
Sunting - Saya sibuk menulis jawaban saya dan tidak mendapatkan pembaruan pertanyaan dari beberapa menit. Karena itu, SQL pada dasarnya tidak dapat dipisahkan dari DBMS itu sendiri. Jika Anda menjalankan produk database SQL, maka Anda mengaksesnya dengan SQL, titik.
Mungkin Anda mencari abstraksi di atas sintaks; Linq ke SQL, Entity Framework, Hibernate / NHibernate, SubSonic, dan sejumlah alat ORM lainnya menyediakan sintaks mirip SQL mereka sendiri yang tidak cukup SQL. Semua ini "dikompilasi" ke SQL. Jika Anda menjalankan SQL Server, Anda juga dapat menulis CLR Functions / Procedures / Triggers, yang memungkinkan Anda menulis kode dalam bahasa .NET apa pun yang akan berjalan di dalam database; Namun, ini sebenarnya bukan pengganti SQL, lebih dari ekstensi untuk itu.
Saya tidak mengetahui adanya "bahasa" lengkap yang dapat Anda lapiskan di atas database SQL; singkatnya beralih ke produk database yang berbeda, Anda akhirnya akan melihat SQL di pipa.
sumber
SQL adalah de-facto.
Kerangka kerja yang mencoba melindungi pengembang dari itu akhirnya menciptakan bahasa khusus mereka sendiri (Hibernate HQL muncul dalam pikiran).
SQL memecahkan masalah dengan cukup baik. Tidak ada yang lebih sulit untuk dipelajari daripada bahasa pemrograman tingkat tinggi. Jika Anda sudah mengetahui bahasa fungsional maka sangat mudah untuk memahami SQL.
Mempertimbangkan vendor basis data terkemuka yang menyediakan basis data canggih (Oracle dan SQL Server) mendukung SQL dan telah menginvestasikan bertahun-tahun ke dalam mesin pengoptimalan, dll. Dan semua perangkat lunak pemodelan data terkemuka dan perangkat lunak manajemen perubahan dalam SQL, saya akan mengatakan itu adalah taruhan teraman.
Juga, ada lebih banyak database dari sekedar kueri. Ada skalabilitas, backup dan pemulihan, data mining. Vendor besar mendukung banyak hal yang bahkan tidak dipertimbangkan oleh mesin "cache" baru.
sumber
Masalah dengan SQL telah memotivasi saya untuk membuat bahasa kueri draf yang disebut SMEQL di wiki Repositori Pola Portland . Komentar Selamat datang. Ini meminjam ide-ide dari pemrograman fungsional dan bahasa Sistem Bisnis 12 eksperimental IBM. (Saya awalnya menyebutnya TQL, tetapi kemudian ternyata nama itu diambil.)
sumber
Di dalam dunia .NET, meskipun masih memiliki nuansa SQL-esque, LINQ-to-SQL akan memungkinkan Anda untuk memiliki perpaduan yang baik antara SQL dan pemrosesan .NET dalam memori dari data Anda. Ini juga menyederhanakan banyak pipa data tingkat rendah yang tidak benar-benar ingin dilakukan oleh siapa pun.
Jika Anda ingin melihat tipe database dengan pola pikir yang sama sekali berbeda, lihat CouchDB . "Lebih baik" jelas merupakan persyaratan relatif dan database non-relasi semacam ini adalah "Lebih baik" tetapi hanya dalam skenario tertentu.
sumber
SQL bahasa sangat kuat, dan sistem manajemen database relasional telah dan masih sukses besar. Tetapi ada kelas aplikasi yang membutuhkan skalabilitas dan ketersediaan yang sangat tinggi, tetapi belum tentu tingkat konsistensi data yang tinggi (yang terpenting adalah konsistensi). Berbagai sistem mendapatkan kinerja dan penskalaan yang lebih baik daripada RDBMS dengan mengurangi kebutuhan transaksi yang sesuai dengan ACID. Ini telah dinamai "NoSQL", tetapi seperti yang ditunjukkan orang lain, ini adalah istilah yang keliru: mungkin mereka harus disebut database NoACID.
Michael Stonebraker membahas ini di The "NoSQL" Discussion Tidak Ada Hubungannya Dengan SQL .
sumber