Neden veritabanları bir dil özelliği olarak entegre edilmiyor?


25

Harici bir SQL (veya başka bir) veritabanına bağlanmak yerine, birinci sınıf bir dil özelliği olarak yerleşik bir veritabanına sahip herhangi bir programlama dili var mı? Böyle bir özelliğin sakıncaları ve faydaları nelerdir? Böyle bir özellik neye benzeyecek ve program yapma şeklimizi nasıl değiştirecekti?


17
SQL'in bir dil olduğunu düşündüm. : D
Kevin Cantu

8
.NET, genel bir soruna doğru bir yaklaşım olduğunu düşünüyorum SQL için LINQ vardır. Belirli bir veritabanına kilitlenmemelisiniz ve yeterince genel bir şey yapamazsınız, ancak dışarıdaki her şeyin her özelliğini uygulayamazsınız. LINQ hala benim gibi harika.
İş

linq2SQL öldü, linq2EF ile değiştirildi, ancak aynı ilke
BlackICE

3
ve ne yazık ki, Linq2EF bazı kötü microsoft-yalnızca uzantılara sahip, bu da karmaşık bir şey yaparsanız SQLServer ile kilitlendiğiniz anlamına geliyor.
gbjbaanb

1
@Job "Belirli bir veritabanına kilitlenmemelisiniz" Genel olarak belirtildiği gibi, genel olarak bu fikre katılmıyorum. Daha ziyade, bu felsefeyi geliştirir ya da benimsemeyi bırakırdım. Örneğin, UI katman kodumu belirli bir veritabanına kilitlemem. Ancak, servis katmanı kodumu kesinlikle belirli bir veritabanına kilitlerdim.
Michael O'Neill,

Yanıtlar:


15

Düşünebildiğim tek dil DBase, Clipper ve FoxPro gibi eski xBase dilleri. Klip adında ücretsiz ve çoğunlukla uyumlu bir sürüm sunan bir GNU projesi var.

Ayrıca bir programlama dilini doğrudan bir veritabanı platformuna bağlayan Pick Basic'ti.

Bu yapıldı. Bir dilin verilere erişimini kısıtlayan evrimsel bir çıkmazdı.


2
Bunun neden evrimsel bir çıkmaz olduğunu genişletebilir misiniz? Bir tane uygulamayı düşünmüyorum, sadece merak ediyorum.
VirtuosiMedia

1
@VM API'leri kullanma ve dili, kütüphaneleri ve çalışma zamanını farklı tutma konusunda belirgin bir eğilim var. Şu an itibariyle, verilere ortak bir şekilde erişime izin veren iyi tanımlanmış API'ler; Dil veya veritabanı ne olursa olsun, hatta veritabanı şeması yaygındır. Çoğu yaygın dil, standart kütüphanenin bir parçası olarak ortak bir veritabanı API'si gönderir. Dosya ve http erişimi için aynı. Artık onu dile vidalama gereği yok.
sal

1
Bir yerel ağ arayüzü varsa, yerel ve uzak API çağrı sürelerinde büyüklük farklılıkları vardır. Bir DB yığında dil kullanmanın hala belirgin ve gerçek avantajları var.
Jé Que

@Xepoch kesinlikle kendinizi bu satıcının veritabanı ve dil uygulamasına kilitlemek istiyorsanız .
BlackICE

1
@David, soruyu tekrar okudum, dua et ki, bu hiçbir zaman bunun hangi dilde olacağını söyleyemezdi ki bu satıcı kilidi için olmazdı?
Jé Kuyruğu

29

Dilleri "küçük" ve veritabanları "büyük"; bu yüzden ikisi birleştirildiğinde, özellik olarak veritabanının bulunduğu bir dil değil, özellik olarak dilinin bulunduğu bir veritabanıdır. Birçok veritabanında kendilerine özgü bazı diller vardır, örneğin PL / SQL, T-SQL.


Dilleri nasıl "küçük"?
Rei Miyasaka

Bu bir algı meselesi. Tabii ki, veritabanları daha büyük bir kod temeli, daha büyük belgeler, daha büyük disk gereksinimleri gibi görünüyor (gerçek verileri dikkate almasak bile); ancak bu karşılaştırmalar pek adil değil çünkü çoğu veritabanı bir veya birkaç programlama dili ile birlikte geliyor.
user281377

3
Rei: PL / SQL'e daha yakından bakmadınız, değil mi? BTW, Oracle, RDBMS'de de bir JVM içerir.
user281377

3
Rei: Aslında, çoğu kişi PL / SQL'i en azından işletme mantığı olan uygulamaları yazmak için kullanır. Bilebileceğiniz gibi, PL / SQL aynı zamanda Oracle Forms'da kullanılan dildir, bu yüzden temelde bir veritabanına hiç dokunmayan bir PL / SQL programı yazıp çalıştırabilirsiniz. Uygulamada, PL / SQL, bir Oracle RDBMS ile birlikte kullanılır.
user281377

2
Kahretsin, asla düşünmezdim.
Rei Miyasaka

16

Mutlaka doğru sorunun "neden orada yok?" Olduğunu sanmıyorum. ama "neden olmalı?" Veritabanlarının dilin bir özelliği olması ne elde edilir? Unutma, dil programlama yığınının en altındadır. Dilin şişirilmesi, her şeyi etkiler . Bu nedenle, dil tasarımcılarının, özellikle böyle bir yatırımı içerecek yeni özellikler eklemek için yavaş olmaları gerekir.


6
Çünkü sorgu dilinin ve programlama dilinin sınırlarını aşarken, tür kontrolünün ve hatta basit ad kontrolünün faydalarını isteyebilirsiniz.
Macneil

4
@ Macneil, ORM araçları şimdi bunu yapıyor. API'lar yapabildiği zaman dilin içine ne konmalı?
sal

1
@ sal Böylece uygulamaların dağıtıcıları, yalnızca atom yazmaları ve önbellekleri, arama indeksleri vb. için tutarlılık kontrolü elde etmek için devasa bir DBMS'yi paketlemek zorunda kalmazlar. Bu yüzden SQLite var: " rekabet etmekfopen() ".
Damian Yerrick

@ sal: Muhtemelen API'lerin yapabildiği durumlarda düzenli ifadelerin veya kayan noktaların bazı dillere toplanmasının benzer bir nedenden ötürü olacağı tahmin edilmektedir. Çünkü birileri bir dil yazıyordu ve özel bir sözdizimi sağlamak için yeterince temel olduğuna karar verdi. Tabii ki, bu yararlı bir cevap olmamak için genel bir sebep ;-)
Steve Jessop

14

Gereksinimlerinize yakın 3 eski sistem vardır:

  1. Seçim ,
  2. MUMPS ,
  3. Microsoft Access

Pick ve MUMPS, ilişkisel veritabanları üzerine ilk akademik rapordan yıllar önce geliştirilmiştir (ki bu, ilk SQL tabanlı SQL tabanlı veritabanı sisteminin piyasaya sürülmesinden yaklaşık on yıl önceydi) - şimdi Oracle olarak adlandırdığımız bir şirketten; başarılı bir SQL tabanlı sistem daha sonraydı). Bunları hala kullanımda bulabilirsiniz (yerel toplu taşıma sistemimiz seyahat planlama sistemi için yakın zamana kadar Pick kullandı). Pick veya MUMPS ile hiçbir şey yapmak istemezsiniz ve verebileceğim en iyi tavsiye "elleriniz klavyeden uzak dur!" Eğer varsa bunu onlarla ilgisi var, ifade kulaklarında çınlama edilmelidir "üzgün olacak".

Microsoft Access, BT çevrelerinde ciddi bir şekilde alay ve eleştirilere maruz kalıyor, geliştiricisi olmayan bir kişinin Access'ten kritik bir iş uygulaması yapması ve şirketin tam anlamıyla yaşayamayacağı bir şeye dönüşmesini sağlamak oldukça kolay. Çok az sayıda geliştiricinin MS Access üzerinden geliştirmeye başlaması muhtemeldir ve bazı şeyler tıkanmaya devam ettikçe onları nasıl düzelteceklerini öğrendiler (ilk adım geleneksel olarak görsel temel öğrenmek ve önce Access uygulamasını VB'de yeniden yazmaktır. bir şey "daha iyi"). Çok miktarda veri ile dağıtılmış olarak çalışan iyi davranışlı bir Access uygulaması yapmak mümkündür - bunu gördüm - ancak işleri yapmanın daha kolay yolları var ve kuyu yapmak (ve korumak) için daha az beceri gerektiriyor VB ve SQL Server dışında app davrandı.

SQL Server 2005'ten bu yana Microsoft, CLR'yi saklı yordamlar ve işlevler içine koyma özelliğini getirmiştir. Ve bu konuda zor olmak istiyorsanız, veritabanında sütun olarak kullanabileceğiniz veri türlerini oluşturabilirsiniz. Oracle'ın Java ile benzer bir şeyi olduğunu düşünüyorum.

Söylendiği gibi, sizi bir tane yaratmanızı engelleyen ya da onlar hakkında varsayımlar yapan hiçbir şey olduğunu sanmıyorum. Pick ve MUMPS, buradaki çoğu kodlayıcıdan daha yaşlıdır ve dünyaya bakmanın çok COBOLy yolunu yansıtır.

Benim kişisel tavsiyem işleri ayrı tutmak. Projenizin ihtiyaç duyduğu verileri işlemek için iyi bir dil kullanın (bazen "en iyi" dilin, kodu okuyabilen / yazabilen programcıları kolayca bulabileceğiniz bir dil olduğu konusunda). Projenizin ihtiyaç duyduğu verileri tutmada iyi bir veritabanı sistemi kullanın.


+1, ölçeklenebilir bir Access uygulaması yapacak kadar yetenekli bir programcının daha iyi bir çalışma ortamını hak ettiğini düşünüyorum.
Larry Coleman,

3
Erişim bir programlama dili değil, daha çok bütünleşik bir geliştirme ve çalışma zamanı ortamı. Kullandığı dil, VBA diğer ofis ürünlerinde makro programlama için kullanılanla aynı dildir ve Access'e özgü değildir. DB erişimi hala çeşitli sağlayıcılar aracılığıyla JET sürücülerine sağlanmaktadır.
Jeremy,

1
Bahsettiğiniz üçüne ek olarak, birkaç 4GL ortamı var: Oracle Forms, CA OpenROAD (Windows 8GL nee) ve Unify'ın Accell'i (sadece birlikte çalıştığımları adlandırmak için).
TMN

Ayrıca, Access'in gerçekten "eski" olduğundan emin değilim, ne kadar
canım

Kabakulak süper veritabanı için +1 godawful bir dile bağlı.
James Anderson

4

Bir programlama diline veritabanı eklemek sadece çok dar bir kullanıcı grubuna hitap edebilir. RDBMS dışı bazı özellikler kullanmak isterlerse? Veya hiç bir veritabanı kullanmak istemiyor musunuz? Derleyici bu gibi kullanım durumları için gereksiz yere şişirilecektir.


4

Err.

Öncelikle, dilin çalıştığı çerçevenin neden bir veritabanı sağlamadığını soruyorsunuz. Bir dil basitçe set gramerlerinde yapılmasını istediğiniz bir şeyi ifade etmenin bir yoludur; gerçekten böyle hizmetler sunmuyor. :)

Bununla birlikte, birkaç neden var.

  • Verimli bir veritabanı depolama sistemi oluşturmak, büyük olasılıkla, örneğin .NET Framework'ü (örneğin) kurmanın sırasına göre veya daha büyük bir sorundur . Eğer bir ekip kendi çerçevesine bir veritabanı eklemeye çalışırsa, hepsi üzerinde çalışacakları şey olurdu.

  • Yüklenen bir veritabanı, kendisine erişen kod sürecinde değil, ayrı bir makinede olmalıdır.

  • ORM'ler, bir veritabanı türü olmaya çalışmadan, bu tür bir eylemin faydası olacak olan birçok tür güvenlik ve derleme zamanı kontrolü sağlar.

Bununla birlikte, veri erişimine daha az ihtiyaç duyan uygulamalara karşı çalışabilecekleri çerçevede bir çeşit SQLite uygulamasının dahil edilmesinin uygun olacağını düşünüyorum. Bununla birlikte, önemsiz olmayan uygulamalarda faydalı olacağından emin değilim.


gömülü sqlite gerçekten harika, eğer sizde yoksa dil tasarımcıları yalnızca XML'yi bir depolama mekanizması olarak kullanıyorlar :(
gbjbaanb

2

onlar; bu dillere 4GL denir . DataFlex , benim favorim, ancak daha fazla kullanmıyorum.

Uyarı: DataFlex'in v3.0 nesnesine yönelik versiyonunun geliştirilmesine yardım ettim.


2

Asıl sorunuzun "neden veritabanı kütüphaneleriyle birlikte gelen herhangi bir programlama dili yok" olduğunu düşünüyorum .

Genel amaçlı diller, tüm IO'ları aynı ve aynı şekilde görür; bir diske, web kamerasına, ağa, ekrana, bellekteki bir yere yazıyor veya okuyor - hepsi IO'su ve programlama dilleri kendileri için geçerli. ile.

Aslında, okuma / yazma işleminin yığın ve yığına bir yana, çoğu programlama dili gerçek bir GÇ bile yapmaz. Bazı diller GÇ işlemlerini ifade etmek için yerel özellikler sunar (örneğin, BASIC'deki print komut ), ancak çoğu dil bunları normal işlev çağrıları (örneğin printfC) olarak kabul eder ve kütüphanelerin gerçek yazıları ele almasına izin verir.

C # gibi bazı diller, sorguları ifade etmek için dil özellikleri sunar, ancak o zaman bile, bunlar yalnızca kütüphanelerin SQL işlemlerine çevrilen listelerin (veya IEnumerable.NET'te çağrıldığı gibi) en temel veri yapısındaki ifadeleridir - dilin kendisi hala sadece soyut IO kavramlarıyla çalışmaktadır.

Bir programlama dilinin standart kütüphanesinde bir veritabanı paketi oluşturmak neden iyi bir fikir değil, büyük olasılıkla standart bir kütüphanede başka hiçbir şeyin normalde veritabanı işlevselliğine bağlı olmayacağı konusunda.


Çok sayıda programlama dili DB kütüphaneleri ile birlikte gelir. Python ve PHP'nin her ikisi de sqlite'a sahiptir. Visual Studio, SQL Server Express ile birlikte gelir.
quanticle

Bunlar DB arayüzleri, kendileri DB değil. .NET çalışma zamanı, Visual Studio veya SQL Server Express ile birlikte gelmez.
Rei Miyasaka

@ReiMiyasaka Python standart kütüphanesi, tüm SQLite motorunu içerir, çünkü SQLite sadece bir programın bağlandığı, ayrı bir işlem veya başka bir şey olmadığı bir C kütüphanesidir.
Damian Yerrick

2

Evet. AS / 400 platformundaki diller yerel, birinci sınıf veri tabanı desteğine sahiptir.

Bunun nedeni, AS / 400 platformunun veritabanının her yere tam entegre olması ve yol boyunca değerleri güncelleyen bir sonuç kümesi arasında gezinme kolaylığı gibi birçok hoş özelliğe izin vermesidir.


0

Dile ve platforma göre değişir. Mesela, C ile çalışırken çeşitli veritabanlarını kullanmak benim için oldukça önemsiz, sadece uygun kütüphaneyi kullanıyorum.

Bir dil standart uygulamasını sürdürmelidir ve bu genellikle birisinin inşa etmek istediklerini inşa edebilmesi için gereken minimum miktarı sağlamak anlamına gelir. Diğer her şey bir kütüphane, belki de başkaları tarafından korunan dilin bir uzantısı haline gelir.

En azından, ISO gibi kuruluşlar tarafından belirlenen standartları takip eden diller için durum budur.


0

Yazıldığı gibi, yukarıdaki bazı örneklerin gösterdiği gibi, soru kısmen yanlıştır.

Bu yüzden ilk önce, "Neden bir DBMS genellikle genel amaçlı, üst düzey bir programlama dili özelliği olarak bütünleştirilmiyor?"

Bu, işletim sistemleri, dosya sistemleri, web sunucuları, önbellek katmanları vb. Gibi diğer yazılım ürünlerinin genellikle yerleşik olmaması nedeniyle aynı nedenledir. Genel amaçlı diller genellikle bu tür ürünlerinkilerin üzerinde bir soyutlama düzeyinde çalışır. Bu nedenle, bir programcı içinde bir DBMS uygulamak için makulGenel amaçlı bir dil olan ve DBMS'nin ana dili veya DB programcıları tarafından kullanılmak üzere DB'ye özgü, bildirimsel bir dil bile gösterebileceği açıktır. Ancak, genel amaçlı bir programlama dilinde düzeltilmesi akıllıca olması için DBMS yazarken çok fazla tasarım seçeneği var. Onları düzeltirseniz, MUMPS gibi bir durumla karşılaşırsınız; bu ikisinin dolanması, bir endüstride tavuk ve yumurta problemi ile sonuçlanmış, eski bir DBMS ve eski bir programlama dili ile sıkışmış.


0

NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran ve muhtemelen diğer dillere entegre olan ve bilgisayarların kullanıldığı işletim sistemi NonStop / Guardian ile tamamen entegre olan NonStop / SQL'de çalışmak için kullanılır ran.

Sanırım bu, alabileceğiniz en yakın entegrasyonun, veritabanının işletim sisteminin dosya sistemi olduğu durumlarda. Aynı zamanda bir çıkmazdır, bileşenlerin, veritabanlarının, işletim sisteminin, donanımın ve üzerinde yazılı olan yazılımların hiçbirinin ayrı ayrı kullanılamayacak, başka bir ortama taşınacak şekilde ayrıştırılmasının bir yolu yoktur.

Bir PC'ye en yakın olan muhtemelen MS Access olacaktır, Embarcadero / Borland Delphi yakın bir saniye olacak.

Bundan sonra, uygulamanızdaki gömülü veritabanlarına bakıyorsunuz; bu, basit bir yapılandırma dosyasında kolayca saklanamayan ve / veya uygulama çalışırken düzenli olarak güncellenmesi gereken bir dizi hiyerarşik veriye ihtiyaç duyan bağımsız uygulamalar oluşturanlara sınırlı çekebilecek . Ya da daha büyük bir veritabanının bir kısmını gösteren bir uygulamanın taşınabilir bir sürümüne sahip olmak isteyenler ve belki de uygulamanın bağlantı kurabildiği zamanlar daha büyük veritabanıyla senkronize edilebilir (genellikle erişemeyeceği bir satıcı için kullanışlıdır) şirket ağının henüz müşteri grubu için satış verisine ihtiyacı var ya da hasta kayıtlarını isteyen, ancak hastane ağına bağlanamadığı bir alanda bulunan doktor için gitmesi gereken bir ağ erişimi yok.


0

Eski Visual Foxpro geliştiricisi olarak, temel bir dilin ilişkisel modeli dilin bir parçası olarak tanımlamaması garip.

Tam veritabanı altyapısına sahip olmak iyi bir fikir değildir, ancak "SQL" diline sahip olmak çok yararlı olabilir.

OO'da, empedans uyumsuzluğu var. Bu oldu çünkü nesneler ve birbirleri gibi ayarlanmadılar. Ancak bir dil TABLOLARI, ALANLARI, İLİŞKİLERİ, SINIRLARI, vs. tanımlamama izin verirse (belirli bir depoya bağlamadan) çok güçlü olacaktır. Ayrıca, ORM yapmak daha fazla 1'e 1 eşleme olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.