Apa alternatif yang baik untuk SQL (bahasa)? [Tutup]

95

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.

Brendan Long
sumber
22
SQL menyebalkan? Ada referensi?
Murali VP
3
Anda tidak mengatakan itu menyebalkan dibandingkan dengan XML, kan?
Bratch
6
Apakah SQL benar-benar menyebalkan atau tidak adalah sesuatu yang saya minati. Berikut contohnya: en.wikipedia.org/wiki/The_Third_Manifesto Saya kira "menyebalkan" mungkin kata yang salah ..
Brendan Long
4
Untuk memperjelas: Saya tidak punya masalah dengan SQL. Saya hanya suka belajar tentang ide-ide lain kalau-kalau ada yang lebih baik.
Brendan Long
6
Jika itu harus menjadi bahasa kueri, dan harus untuk RDBMS, maka periksa Quel: en.wikipedia.org/wiki/QUEL_query_languages - itu juga yang digunakan Postgres sebelum 1995, ketika itu juga mengubah namanya menjadi sangat luar biasa konyol "PostgreSQL".
Ken

Jawaban:

45

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_CONCATakan 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:

  • SchemeQL dan CLSQL , yang mungkin paling fleksibel, karena warisan Lisp mereka, tetapi mereka juga terlihat lebih mirip SQL daripada frontend lainnya.
  • LINQ (dalam .Net)
  • ScalaQL dan ScalaQuery (dalam Scala)
  • SqlStatement , ActiveRecord dan banyak lainnya di Ruby,
  • HaskellDB
  • ... daftarnya terus berlanjut untuk banyak bahasa lainnya.

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.

Ken Bloom
sumber
Menarik. Tapi itu masuk akal.
Brendan Long
11
Benar, tetapi idealnya akan ada bahasa kueri yang berfungsi dengan baik sebagai bahasa . Fakta bahwa SQL telah direduksi menjadi protokol adalah bukti kelemahannya sebagai bahasa.
3
Hore Ken! Tiga tahun yang lalu saya bergumul dengan hutang teknis yang berkembang yang diakibatkan oleh praktik perusahaan yang biasa menyalin bagian kueri SQL berulang kali dengan sedikit perubahan karena tidak ada yang namanya enkapsulasi atau metode lokal dalam SQL. Saya mencari ScalaQuery dari posting Anda (yang sekarang disebut Slick) dan menulis ulang seluruh sistem dan setiap 6 kueri menjadi 1, hanya karena Anda dapat merangkum dan memiliki metode lokal! Jika ada yang menderita kengerian SQL, lihat Scala Slick atau Quill dan bersiaplah untuk pencerahan!
ChoppyTheLumberjack
18

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.

Mike Cialowicz
sumber
Pasti jenis hal yang saya cari.
Brendan Long
Daftar itu memiliki koleksi bahasa yang sangat aneh di dalamnya. Saya tidak berpikir XQuery termasuk, dan saya tidak cukup tahu tentang D untuk mengetahui mengapa itu dimiliki.
Ken Bloom
1
@Ken Bloom rupanya ada bahasa kueri yang disebut D, dan bahasa mirip C yang terpisah yang disebut D. Yang pertama saya pikirkan adalah bahasa seperti c ..
Brendan Long
Saya pasti berbicara terlalu cepat tentang D. Ketika saya melihat namanya, saya berpikir Digital Mars 'D - Saya melihat bahwa bahasa data D adalah sesuatu yang sama sekali berbeda.
Ken Bloom
2
c2.com/cgi/wiki?QueryLanguageComparison juga bermanfaat
Ken Bloom
13

"Saya terkadang mendengar hal-hal tentang bagaimana SQL menyebalkan dan itu bukan bahasa yang baik"

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.

"tapi saya tidak pernah benar-benar mendengar banyak tentang alternatif selain itu."

Saya mengundang Anda untuk merenungkan kemungkinan bahwa Anda mencoba mendengar hanya di tempat yang salah (yaitu, industri DBMS komersial secara eksklusif).

"Jadi, apakah bahasa bagus lainnya yang memiliki tujuan yang sama (akses database) dan apa yang membuatnya lebih baik daripada SQL?"

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".

"Apakah ada database bagus yang menggunakan bahasa alternatif ini?"

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".

Erwin Smout
sumber
Basis data non-relasional tampaknya memiliki beberapa kegunaan (beberapa aplikasi mendapatkan kinerja yang lebih baik dari data yang kurang terstruktur), jadi saya tidak akan menyebutnya regresi. Jawaban yang bagus.
Brendan Long
2
Ini adalah frustrasi kuno semua orang relasional bahwa "kinerja" tampaknya dianggap sebagai karakteristik model . Persepsi itu salah, titik. Performa merupakan karakteristik dari implementasi model. Bahwa implementasi RM yang ada saat ini memang tampaknya sering menimbulkan masalah kinerja, merupakan kombinasi dari banyak faktor: (a) menerapkan RM secara penuh jelas sangat sulit, (b) vendor DBMS tidak cukup mendorong untuk kemajuan implementasi baru , dan (c) pengguna yang kurang memahami algoritme yang mendasari.
Erwin Smout
3
@Erwin Tetapi jika kita menemukan bahwa model tertentu secara inheren sulit untuk diimplementasikan secara efisien, maka wajar untuk mengatakan bahwa ada masalah dengan model tersebut dari sudut pandang efisiensi.
Jay
SQL itu buruk. 30 tahun yang lalu, menggunakan tata bahasa dan kata-kata yang mirip dengan bahasa Inggris mungkin terdengar seperti ide yang bagus, agak ramah pengguna dan lebih baik daripada tidak sama sekali, tetapi sekarang kita tahu itu tidak benar, lebih baik untuk mengekspresikan konsep komputer dalam bahasa simbolik. Jika Anda ingin menggunakan bahasa Inggris, sebaiknya Anda memiliki pengurai bahasa alami yang tepat. SQL tidak berusaha untuk mengurai bahasa alami dengan benar, ini hanya serangkaian peretasan dengan kata-kata bahasa Inggris (terkadang opsional) yang dimasukkan untuk membuatnya lebih membingungkan.
Rolf
2
Ya, SQL itu buruk tetapi tidak benar-benar karena alasan yang Anda sebutkan. Jika "tidak cukup simbolis" adalah penyebab sebenarnya, kita semua akan menggunakan APL. Bahasa yang sangat simbolis sehingga kebanyakan orang menandainya sebagai satu-satunya bahasa tulis di dunia. Simbol-simbol bahasa SQL kebetulan bertepatan dengan kata-kata tertentu yang muncul di kamus Oxford atau Webster. Tidak ada alasan mendasar mengapa hal itu, dengan sendirinya, menjadi masalah.
Erwin Smout
12

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.

reinierpost
sumber
4
Ada beberapa kesalahan yang mencegah "sistem relasional 100%" bahkan dengan "mendisiplinkan cara Anda menggunakan SQL", karena SQL, tidak benar-benar relasional. Contoh: PILIH Sum (foo) BAR Blah WHERE 1 = 0. SQL mengembalikan nol, 100% relasional menuntut nol. carfield.com.hk/document/misc/SQL_Problems.pdf
McKay
1
Selain itu, apakah Anda menulis "DISTINCT" setelah setiap pemilihan?
McKay
Ya, saya akan menghindari NULL sepenuhnya (jadi perlu ada casing khusus untuk hasil kosong) dan tulis DISTINCT di mana-mana atau setidaknya di mana pun saya perlu menggunakan COUNT.
reinierpost
8

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.

Jay
sumber
1
@Jay: satu kemungkinan pengganti SQL bisa jadi tidak ada bahasa khusus database sama sekali, gunakan bahasa pemrograman OO biasa Anda untuk persistensi data. Lihat jawaban saya tentang Object-database dan ORM. Saya tidak akan mengatakan ORM tidak mendapatkan pangsa pasar sekarang ini.
kriss
Kriss: Saya berpikir bahwa ORM bukanlah "bahasa kueri" melainkan sesuatu yang berada di atas bahasa kueri. Saya kira jika itu yang Anda gunakan untuk berkomunikasi dengan database, itu bisa dianggap sebagai bahasa kueri, dan mungkin saya hanya bertele-tele. Seperti, saya ingat bertahun-tahun yang lalu membaca bahwa COBOL dan C bukanlah bahasa komputer SUNGGUHNYA, bahwa assembler adalah bahasa komputer yang nyata. COBOL dan C hanyalah hal-hal yang diterjemahkan ke dalam bahasa komputer. Argumennya dulu dan sekarang tampak konyol.) Jadi: Oke, saya akan membelinya.
Jay
1
Jawaban ini mungkin sudah ketinggalan zaman. Sekarang ada database non-SQL, seperti Mongo, dll, yang memiliki pangsa pasar yang tidak sepele.
Jay
8

Lihat LINQ ke SQL ...

Sudah mencobanya beberapa bulan yang lalu dan tidak pernah melihat ke belakang ....

thiag0
sumber
1
Linq sangat bagus, tetapi hanya jika Anda mengembangkan di .NET :)
Justin Ethier
7

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.)

Ken
sumber
2
Kelemahan dari bahasa kueri Anda seperti ini adalah "bahasa yang sudah Anda gunakan", setidaknya di masa itu, adalah tidak banyak ruang bagi database untuk mengoptimalkan pola akses. Satu hal yang saya suka tentang SQL adalah bahwa itu deklaratif, dan database melakukan pekerjaan seluk-beluknya untuk mencari tahu bagaimana cara terbaik untuk membuat kueri. Tidak ada bahasa lain saat ini yang mampu memberikan kecerdasan sebanyak itu tentang pengoptimalan. Saya hanya berpikir kami akan menormalkan kata kunci sedikit lebih banyak, dan menyederhanakan sintaks jika kami menulis ulang hari ini.
Ken Bloom
4
Counterpoint: Pengoptimal kueri, dalam skema besar, cukup bodoh. Lihat berapa banyak pertanyaan "bantu saya mengoptimalkan kueri saya" yang ada di SO. Untuk menulis kueri yang efisien, Anda harus memahami apa yang akan dilakukan oleh pengoptimal kueri. Saya sudah punya profiler untuk lingkungan pemrograman saya - dan debugger, dalam hal ini - dan mereka jauh lebih baik daripada PENJELASAN yang pernah saya lihat. Saya tidak tahu seberapa bagus ObjectStore dalam hal ini, tetapi tumpukan perangkat lunak yang homogen bisa menjadi luar biasa .
Ken
Pada tahun 2011, Anda hanya dapat mengunduh versi gratis dari Batu Permata dan programnya di Smalltalk. Satu-satunya hal yang perlu dipikirkan adalah cara memigrasi contoh dari satu versi kelas ke versi lain (kasus sederhana yang ditangani secara otomatis)
Stephan Eggermont
6

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.

Justin Ethier
sumber
2
1 untuk database berorientasi dokumen. Seiring bertambahnya ukuran kumpulan data, model relasional bisa menjadi sangat lambat ...
Mike Cialowicz
2
Apa yang Anda sebutkan bukanlah alternatif SQL, mereka bahkan bukan bahasa. Inisiatif seperti Apache Pig dan Apache Hive lebih menyukainya.
reinierpost
5

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.

Ken Bloom
sumber
Secara teknis, bahasa yang digunakan server dataphor adalah D4, D (atau tutorial D ...) adalah bahasa yang sedikit berbeda.
McKay
Dengan semakin bertele-tele, D bukanlah bahasa, tetapi spesifikasi yang diberikan Date & Darwen. Mereka menggunakan "Tutorial D" sebagai bahasa contoh mereka. D4 memang memenuhi syarat sebagai D, atau setidaknya sebagian besar begitu, tetapi McKay benar bahwa itu harus dikatakan "a D", bukan "adalah D". Ada dokumen kesesuaian dalam dokumentasi Dataphor.
N8allan
4

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.

Larry Lustig
sumber
1
Ya, saya menyadari setelah menulis ini bahwa setiap orang menganggap SQL dan database relasional adalah hal yang sama ..
Brendan Long
4

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).

kriss
sumber
3

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.

Aaronaught
sumber
Saya pikir Anda membingungkan database relasional dengan database SQL. Tidak ada alasan khusus database relasional harus menggunakan SQL (kecuali semua orang menggunakannya). Dan ya, saya menyadari sebagian besar produk database hanya menggunakan SQL.
Brendan Long
1
@ Brendan Long: Benar, database relasional tidak harus menggunakan SQL. Namun, itulah yang database relasional lakukan digunakan. Produk non-SQL lainnya yang ada saat ini bukanlah database relasional.
Aaronaught
Bagaimana dengan D dan Quel? Mereka tampaknya tidak terlalu populer, tetapi mereka ada (dan digunakan untuk database relasional).
Brendan Long
1
@ Brendan Long: Quel, sejauh yang saya tahu, telah digantikan oleh SQL. Pertama kali saya mendengar tentang D, dan dari artikel wiki saya melihat tampaknya itu bukan benar-benar bahasa itu sendiri melainkan serangkaian fitur yang ditentukan yang harus dimiliki bahasa DB. Meskipun mungkin ada beberapa implementasi yang sangat tidak jelas, menurut saya hal ini tidak mengubah apa pun di atas secara substansial. Juga, saya pikir Anda harus menyadari bahwa ketika orang mengatakan "SQL Sucks", mereka tidak mengacu pada tata bahasa SQL, mereka (benar atau salah) mengacu pada database relasional berbasis SQL.
Aaronaught
3

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.

codenheim
sumber
LINQ bukanlah bahasa yang dirancang untuk melindungi pengembang dari SQL, ini adalah sintaks kueri yang digunakan untuk menginterogasi koleksi, yang dapat diperluas untuk mendukung sumber koleksi yang berbeda. Database SQL kebetulan menjadi salah satu sumber tersebut.
Khanzor
Poin bagus, LINQ bukanlah contoh yang valid. Diedit.
codenheim
2

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.)

Tablizer
sumber
apakah SMEQL hidup? Apakah itu ada di luar C2? Apakah ada software?
david.pfx
Ada juga "BQL" - proposal superset SQL, yang dapat ditransfer
Nickolay
1

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.

Jaxidian
sumber
0

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 .

Jim Ferrans
sumber
Jadi, apakah "database" NoACID merupakan alternatif dari SQL sebagai bahasa akses database? Tidak, mereka bukan.
reinierpost
Meskipun SQL sangat kuat, Aljabar Relasional lebih canggih.
McKay
@reineirpost: Setuju. Anda dapat menggunakan SQL untuk meminta database NoACID. Anda juga dapat meminta file teks alih-alih relasi (beberapa alat baris perintah Unix kuno sesuai dengan operasi dalam aljabar relasional.
Jim Ferrans
@ McKay: Apakah ada RDBMS komersial yang mendukung sintaks aljabar relasional? Itu akan keren.
Jim Ferrans
Orang lain di utas ini telah menyebutkan hal-hal seperti Dataphor dan bertujuan untuk mengikuti Aljabar Relasional dengan lebih baik.
McKay