Mengapa basis data tidak terintegrasi sebagai fitur bahasa?

25

Apakah ada bahasa pemrograman yang memiliki basis data bawaan sebagai fitur bahasa kelas satu daripada menghubungkan ke database SQL eksternal (atau lainnya)? Apa yang menjadi kelemahan dan manfaat dari fitur seperti itu? Seperti apakah fitur itu dan bagaimana hal itu mengubah cara kita memprogram?

VirtuosiMedia
sumber
17
Saya pikir SQL adalah bahasa. : D
Kevin Cantu
8
.NET memiliki LINQ untuk SQL, yang menurut saya merupakan pendekatan yang tepat untuk masalah umum. Anda tidak boleh mengunci ke dalam basis data tertentu, dan Anda tidak dapat membuat sesuatu yang cukup umum, namun menerapkan setiap fitur dari segala sesuatu yang ada di luar sana. LINQ masih mengagumkan, sama seperti saya.
Pekerjaan
linq2SQL sudah mati, digantikan oleh linq2EF, tetapi prinsip yang sama
BlackICE
3
dan sayangnya, Linq2EF memiliki beberapa ekstensi microsoft-jahat saja, yang berarti Anda terkunci dengan SQLServer dengannya jika Anda melakukan sesuatu yang kompleks.
gbjbaanb
1
@ Pekerjaan "Anda seharusnya tidak mengunci ke dalam basis data tertentu" Seperti umumnya seperti yang dinyatakan, saya tidak bisa lebih tidak setuju dengan ide itu secara umum. Sebaliknya, saya akan memperbaiki filosofi itu atau berhenti mendukungnya. Sebagai contoh, saya tidak akan mengunci kode lapisan UI saya ke dalam basis data tertentu. Namun, saya pasti akan mengunci kode lapisan layanan saya ke dalam basis data tertentu.
Michael O'Neill

Jawaban:

15

Satu-satunya bahasa yang bisa saya pikirkan adalah bahasa xBase lama seperti DBase, Clipper dan FoxPro. Ada proyek GNU yang menawarkan versi gratis dan sebagian besar kompatibel yang disebut Klip

Itu juga Pilih Dasar yang mengikat bahasa pemrograman langsung ke platform database.

Ini sudah dilakukan. Itu adalah jalan buntu evolusi yang membatasi bagaimana suatu bahasa dapat mengakses data.

sal
sumber
2
Bisakah Anda memperluas mengapa itu jalan buntu evolusi? Saya tidak berpikir untuk mengimplementasikannya, saya hanya ingin tahu.
VirtuosiMedia
1
@ VM Ada kecenderungan yang jelas untuk menggunakan API dan menjaga bahasa, pustaka, dan runtime berbeda. Sampai sekarang, API didefinisikan dengan baik yang memungkinkan akses ke data dengan cara yang umum; terlepas dari bahasa atau basis data atau bahkan skema basis data adalah umum. Sebagian besar bahasa umum mengirimkan API basis data umum sebagai bagian dari pustaka standar. Ditto untuk akses file dan http. Tidak perlu lagi memasukkannya ke dalam bahasa.
sal
1
ada pesanan perbedaan besarnya waktu panggilan lokal vs API jarak jauh, tambahkan lagi jika ada antarmuka jaringan. Masih ada keuntungan nyata dan nyata untuk menggunakan bahasa dalam tumpukan DB.
Jé Queue
@Xepoch tentu saja jika Anda ingin mengunci diri ke dalam basis data dan implementasi bahasa vendor tersebut .
BlackICE
1
@ David, baca kembali pertanyaannya, doakan katakan bahasa apa yang tidak cocok untuk kunci vendor?
Jé Queue
29

Bahasa adalah "kecil" dan database "besar"; jadi setiap kali keduanya digabungkan, itu bukan bahasa dengan database sebagai fitur, tetapi database dengan bahasa sebagai fitur. Banyak basis data memiliki beberapa bahasa berpasangan untuk mereka, misalnya PL / SQL, T-SQL.

pengguna281377
sumber
Bagaimana bahasa "kecil"?
Rei Miyasaka
Ini masalah persepsi. Tentu saja, basis data tampaknya memiliki basis kode yang lebih besar, dokumentasi yang lebih besar, persyaratan disk yang lebih besar (bahkan jika kita tidak mempertimbangkan data aktual); tetapi perbandingan itu hampir tidak adil karena kebanyakan database datang dengan satu atau bahkan beberapa bahasa pemrograman.
user281377
3
Rei: Anda belum melihat lebih dekat pada PL / SQL, bukan? BTW, Oracle juga menyertakan JVM dalam RDBMS.
user281377
3
Rei: Sebenarnya, banyak orang menggunakan PL / SQL untuk menulis aplikasi, setidaknya bagian logika bisnis. Seperti yang mungkin Anda ketahui, PL / SQL juga merupakan bahasa yang digunakan dalam Formulir Oracle, jadi Anda pada dasarnya bisa menulis dan menjalankan program PL / SQL yang tidak pernah menyentuh database. Dalam praktiknya, PL / SQL digunakan bersama dengan Oracle RDBMS.
user281377
2
Ya ampun, tidak akan pernah terpikirkan.
Rei Miyasaka
16

Saya tidak selalu berpikir pertanyaan yang tepat adalah "mengapa tidak ada?" tetapi "mengapa harus ada?". Apa yang akan diperoleh dari memiliki basis data yang menjadi fitur bahasa? Ingat, bahasa berada di bagian paling bawah tumpukan pemrograman. Membuat bahasa kembung memengaruhi segalanya . Karena itu, perancang bahasa perlu lambat untuk menambahkan fitur baru, terutama yang melibatkan investasi seperti itu.

Jason Baker
sumber
6
Karena Anda ingin manfaat pemeriksaan jenis dan bahkan pemeriksaan nama sederhana, saat Anda bekerja melintasi batas-batas bahasa permintaan dan bahasa pemrograman.
Macneil
4
@ Macneil, alat ORM melakukannya sekarang. Apa yang harus dibaut ke dalam bahasa ketika API dapat melakukannya?
sal
1
@sal Sehingga distributor aplikasi tidak harus membundel DBMS yang besar hanya untuk mendapatkan penulisan atom dan memeriksa konsistensi ke cache, indeks pencarian, dll. Inilah sebabnya mengapa SQLite ada: " untuk bersaing denganfopen() ".
Damian Yerrick
@sal: mungkin karena alasan yang sama mengapa ekspresi reguler atau floating point digabungkan ke dalam beberapa bahasa saat API dapat melakukannya. Karena seseorang sedang menulis bahasa dan memutuskan mereka cukup mendasar untuk menjamin sintaksis khusus. Tentu saja, itu adalah alasan umum untuk tidak menjadi jawaban yang berguna ;-)
Steve Jessop
14

Ada 3 sistem warisan yang dekat dengan kebutuhan Anda:

  1. Pilih ,
  2. MUMPS ,
  3. akses microsoft

Pick dan MUMPS dikembangkan bertahun-tahun sebelum makalah akademis pertama tentang basis data relasional (yaitu sekitar satu dekade sebelum sistem basis data komersial berbasis SQL pertama berhasil masuk ke pasar - dari perusahaan yang sekarang kita sebut Oracle; upaya pertama IBM pada produk gagal dan sistem berbasis SQL yang berhasil adalah nanti). Anda mungkin menemukan mereka masih digunakan (sistem transportasi umum lokal kami menggunakan Pick sampai saat ini untuk sistem perencanaan perjalanan). Anda tidak ingin melakukan apa pun dengan Pick atau MUMPS, dan saran terbaik yang bisa saya berikan adalah "menjauhlah dari keyboard dengan tangan Anda di udara!" Jika Anda melakukan ada hubungannya dengan mereka, frase "Anda akan menyesal" harus dering di telinga Anda.

Microsoft Access sangat diejek dan dikritik di kalangan TI karena sangat mudah bagi non-pengembang untuk membuat aplikasi bisnis yang kritis dari Access dan mengubahnya menjadi sesuatu yang secara harfiah tidak dapat hidup tanpa perusahaan. Sangat mungkin juga bahwa beberapa pengembang memulai pengembangannya melalui MS Access dan ketika hal-hal terus macet, mereka belajar cara memperbaikinya (langkah pertama secara tradisional adalah belajar visual basic dan menulis ulang aplikasi Access terlebih dahulu dalam VB, kemudian dalam sesuatu yang "lebih baik"). Dimungkinkan untuk membuat aplikasi Access berperilaku baik yang berjalan terdistribusi dengan sejumlah besar data - Saya sudah melihatnya selesai - tetapi ada cara yang lebih mudah untuk melakukan sesuatu, dan dibutuhkan keterampilan yang jauh lebih sedikit untuk membuat (dan memelihara) sumur dengan baik berperilaku aplikasi dari VB dan SQL Server.

Sejak SQL Server 2005, Microsoft telah memperkenalkan kemampuan untuk menempatkan CLR ke dalam prosedur dan fungsi yang tersimpan. Dan jika Anda ingin dipermasalahkan tentang itu, Anda bisa membuat tipe data yang kemudian dapat Anda gunakan sebagai kolom dalam database. Saya pikir Oracle memiliki sesuatu yang mirip dengan Java.

Yang sedang berkata, saya tidak berpikir ada sesuatu yang menghentikan Anda dari membuat satu, atau berhipotesis tentang mereka. Pilih dan MUMPS lebih tua dari kebanyakan coder di sini dan mencerminkan cara yang sangat COBOL untuk memandang dunia.

Nasihat pribadi saya adalah untuk memisahkan hal-hal. Gunakan bahasa yang pandai memanipulasi data yang dibutuhkan proyek Anda (dengan peringatan bahwa terkadang bahasa "terbaik" adalah bahasa yang Anda dapat dengan mudah menemukan programmer yang dapat membaca / menulis kode). Gunakan sistem basis data yang bagus dalam menyimpan data yang dibutuhkan proyek Anda.

Tangurena
sumber
+1 meskipun saya pikir seorang programmer yang cukup terampil untuk membuat aplikasi Access yang scalable layak lingkungan kerja yang lebih baik.
Larry Coleman
3
Access bukan bahasa pemrograman, ini lebih merupakan pengembangan terintegrasi dan lingkungan runtime. Bahasa yang digunakannya, VBA adalah bahasa yang sama yang digunakan untuk pemrograman makro di produk kantor lainnya dan tidak spesifik untuk Access. Akses DB masih dilakukan melalui berbagai penyedia ke driver JET.
Jeremy
1
Selain tiga yang Anda sebutkan, ada beberapa lingkungan 4GL: Oracle Forms, CA OpenROAD (nee Ingres Windows4GL), dan Unify's Accell (hanya untuk menyebutkan yang telah bekerja dengan saya).
TMN
Juga, saya tidak yakin Access benar-benar "warisan", tidak peduli betapapun Anda menginginkannya :)
haylem
+1 untuk database gondok yang luar biasa yang dikaitkan dengan bahasa yang luar biasa.
James Anderson
4

Menambahkan database ke bahasa pemrograman mungkin hanya melayani sekelompok pengguna yang sangat sempit. Bagaimana jika mereka ingin menggunakan beberapa fitur non RDBMS? Atau tidak ingin menggunakan database sama sekali? Kompiler tidak perlu membengkak untuk kasus penggunaan seperti itu.

vpit3833
sumber
4

Berbuat salah.

Pertama, Anda bertanya mengapa kerangka kerja bahasa ini tidak menyediakan basis data. Bahasa hanyalah sarana untuk mengekspresikan sesuatu yang ingin Anda lakukan dalam set grammers; itu tidak benar-benar menyediakan layanan seperti itu. :)

Karena itu, ada beberapa alasan.

  • Membangun sistem penyimpanan basis data yang efisien adalah masalah yang sulit, mungkin berdasarkan urutan atau lebih besar daripada membangun .NET Framework (misalnya). Jika sebuah tim mencoba memasukkan basis data ke dalam kerangka kerja mereka, hanya itulah yang akhirnya mereka kerjakan.

  • Basis data yang memuat harus berada di mesin yang terpisah dan bukan dalam proses kode yang mengaksesnya.

  • ORM menyediakan banyak jenis keamanan dan kompilasi waktu pengecekan yang akan bermanfaat dari tindakan semacam itu, tanpa benar-benar memiliki kerangka kerja yang mencoba menjadi basis data.

Yang mengatakan, saya kira itu akan rapi untuk memasukkan semacam implementasi SQLite dalam kerangka kerja yang aplikasi dengan kebutuhan lebih kecil untuk akses data dapat beroperasi melawan. Saya tidak yakin itu akan berguna dalam aplikasi non-sepele.

John Christensen
sumber
embedded sqlite benar-benar luar biasa, jika Anda tidak memilikinya, perancang bahasa hanya akan menggunakan XML sebagai mekanisme penyimpanan :(
gbjbaanb
2

mereka; bahasa seperti itu disebut 4GL . DataFlex adalah favorit saya, meskipun saya tidak menggunakannya lagi.

Peringatan: Saya membantu mengembangkan versi berorientasi objek DataFlex, v3.0

Steven A. Lowe
sumber
2

Saya pikir pertanyaan Anda yang sebenarnya adalah "mengapa tidak ada bahasa pemrograman yang datang dengan pustaka database ".

Bahasa tujuan umum memperlakukan semua IO sebagai satu dan sama, baik itu menulis atau membaca ke / dari disk, webcam, jaringan, layar, lokasi dalam memori - itu semua IO, dan hanya itu yang dipikirkan oleh bahasa pemrograman sendiri dengan.

Bahkan, selain membaca / menulis ke tumpukan dan tumpukan, sebagian besar bahasa pemrograman bahkan tidak melakukan IO yang sebenarnya. Beberapa bahasa menyediakan fitur asli untuk mengekspresikan operasi IO (mis. print Perintah dalam BASIC), tetapi sebagian besar bahasa hanya memperlakukan mereka sebagai panggilan fungsi normal (misalnya printfdalam C) dan membiarkan perpustakaan menangani penulisan yang sebenarnya.

Beberapa bahasa seperti C # menawarkan fitur bahasa untuk mengekspresikan kueri, tetapi meskipun begitu, itu hanya ekspresi pada struktur data paling dasar dari daftar (atau IEnumerables, sebagaimana mereka disebut dalam. NET) yang diterjemahkan ke dalam operasi SQL oleh perpustakaan - bahasa itu sendiri masih bekerja dengan konsep IO yang sangat abstrak.

Adapun mengapa membangun paket database ke perpustakaan standar bahasa pemrograman bukan ide yang baik, kemungkinan besar karena tidak ada yang lain di perpustakaan standar biasanya tergantung pada fungsi database.

Rei Miyasaka
sumber
Banyak bahasa pemrograman datang dengan perpustakaan DB. Python dan PHP keduanya memiliki sqlite. Visual Studio dikirimkan dengan SQL Server Express.
quanticle
Itu adalah antarmuka DB, bukan DB sendiri. NET runtime. Tidak dikirimkan dengan Visual Studio atau SQL Server Express.
Rei Miyasaka
@ReiMiyasaka Pustaka standar Python mencakup seluruh mesin SQLite, karena SQLite hanyalah pustaka C yang ditautkan oleh program, bukan proses terpisah atau apa pun.
Damian Yerrick
2

Iya nih. Bahasa pada platform AS / 400 memiliki database asli, dukungan kelas satu.

Ini karena platform AS / 400 memiliki basis data yang sepenuhnya terintegrasi di mana-mana dan memungkinkan banyak fitur yang sangat bagus, seperti kemudahan navigasi melalui resultset yang memperbarui nilai-nilai pada saat melaluinya.

pengguna1249
sumber
0

Tergantung pada bahasa dan platform. Sebagai contoh, cukup sepele bagi saya untuk menggunakan berbagai database saat bekerja dengan C, saya hanya menggunakan perpustakaan yang sesuai.

Suatu bahasa harus mempertahankan penerapan standarnya, dan itu biasanya berarti menyediakan jumlah minimum yang dibutuhkan seseorang untuk dapat membangun apa pun yang ingin mereka bangun. Segala sesuatu yang lain menjadi perpustakaan, atau mungkin perluasan ke bahasa yang dikelola oleh orang lain.

Setidaknya, ini adalah kasus untuk bahasa yang mengikuti standar yang ditetapkan oleh organisasi seperti ISO.

Pos Tim
sumber
0

Seperti ditulis, pertanyaannya sebagian salah, seperti yang ditunjukkan oleh beberapa contoh di atas.

Jadi saya pertama kali memperbaiki pertanyaan untuk dibaca, "Mengapa DBMS biasanya tidak terintegrasi sebagai fitur dari bahasa pemrograman tingkat tinggi yang bertujuan umum?"

Ini karena alasan yang sama bahwa produk perangkat lunak lain seperti sistem operasi, sistem file, server web, lapisan caching, dll. Biasanya tidak terintegrasi. Bahasa tujuan umum umumnya beroperasi pada tingkat abstraksi di atas produk tersebut. Jadi masuk akal bagi seorang programmer untuk mengimplementasikan DBMS dibahasa tujuan umum, dan bahwa DBMS mungkin bahkan mengekspos aspek bahasa induknya atau bahasa deklaratif spesifik DB untuk digunakan oleh programmer DB. Tetapi ada terlalu banyak pilihan desain dalam menulis DBMS sehingga tidak bijaksana untuk memperbaikinya dalam bahasa pemrograman tujuan umum. Jika Anda benar-benar memperbaikinya, Anda akan menemukan kasus seperti MUMPS, di mana keterkaitan keduanya menghasilkan seluruh industri terperosok dalam masalah ayam-dan-telur, terjebak dengan DBMS yang usang dan bahasa pemrograman yang usang.

pengguna10202
sumber
0

Digunakan untuk bekerja di NonStop / SQL yang sepenuhnya terintegrasi ke dalam NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran, dan mungkin bahasa lain serta sepenuhnya terintegrasi dengan NonStop / Guardian, sistem operasi yang digunakan komputer berlari.

Saya pikir itu mungkin integrasi terdekat yang bisa Anda dapatkan, di mana basis data adalah sistem file sistem operasi. Ini juga jalan buntu, tidak ada cara untuk memisahkan komponen apa pun, database, sistem operasi, perangkat keras, dan perangkat lunak apa pun yang ditulis di dalamnya tidak pernah dapat digunakan secara terpisah, dipindahkan ke lingkungan lain.

Yang paling dekat Anda akan dapatkan pada PC kemungkinan adalah MS Access, Embarcadero / Borland Delphi menjadi yang kedua.

Setelah itu, Anda melihat database yang disematkan di aplikasi Anda, yang dapat memiliki daya tarik terbatas bagi mereka yang membuat aplikasi mandiri yang membutuhkan sekumpulan data hierarkis yang tidak mudah disimpan dalam file konfigurasi sederhana dan / atau perlu pembaruan rutin saat aplikasi berjalan . Atau bagi orang-orang yang ingin memiliki versi portabel dari suatu aplikasi yang menyimpan snapshot sebagian dari basis data yang lebih besar dan mungkin menyinkronkannya dengan basis data yang lebih besar pada saat-saat ketika aplikasi dapat membuat koneksi (berguna untuk mengatakan seorang penjual yang sering berada di luar jangkauan jaringan perusahaan belum membutuhkan data penjualan untuk kelompok pelanggannya, atau dokter di lapangan yang menginginkan catatan pasien tetapi tidak dapat terhubung ke jaringan rumah sakit karena tidak ada akses jaringan ke mana ia harus pergi).

jwenting
sumber
0

Sebagai mantan pengembang Visual Foxpro, saya kira itu aneh bahwa tidak ada bahasa utama yang mendefinisikan model relasional sebagai bagian dari bahasa.

Memiliki mesin basis data lengkap bukanlah ide yang baik, tetapi memiliki bahasa "SQL" sebagai gantinya SANGAT berguna.

Dalam OO, ada ketidakcocokan impedansi. Ini terjadi karena objek dan mengatur tidak suka satu sama lain. Tetapi jika suatu bahasa izinkan saya mendefinisikan TABLES, BIDANG, HUBUNGAN, KENDALA, dll (tanpa mengikatnya ke penyimpanan tertentu) akan sangat kuat. Plus, membuat ORM akan lebih pemetaan 1-ke-1.

mamcx
sumber