Dlaczego bazy danych nie są zintegrowane jako funkcja językowa?

25

Czy są jakieś języki programowania, które mają wbudowaną bazę danych jako pierwszorzędną funkcję językową zamiast łączenia się z zewnętrzną bazą danych SQL (lub inną)? Jakie byłyby wady i zalety takiej funkcji? Jak wyglądałaby taka funkcja i jak zmieniłaby nasz sposób programowania?

VirtuosiMedia
źródło
17
Myślałem, że SQL to język. : D
Kevin Cantu,
8
.NET ma LINQ dla SQL, co moim zdaniem jest właściwym podejściem do ogólnego problemu. Nie powinieneś blokować konkretnej bazy danych i nie możesz zrobić czegoś, co jest wystarczająco ogólne, a jednocześnie wdrożyć każdą funkcję wszystkiego, co tam jest. LINQ jest nadal niesamowity, tak jak ja.
Job
linq2SQL nie żyje, zastąpiony linq2EF, ale ta sama zasada
BlackICE
3
i niestety Linq2EF ma kilka nieprzyjemnych rozszerzeń tylko dla Microsoft, co oznacza, że ​​możesz się z nim połączyć w SQLServer, jeśli zrobisz coś złożonego.
gbjbaanb
1
@Job „Nie powinieneś blokować konkretnej bazy danych”. Jak ogólnie zostało powiedziane, nie mogłem się bardziej nie zgodzić z tym pomysłem. Raczej udoskonalę tę filozofię lub przestanę ją popierać. Na przykład nie zablokowałbym kodu warstwy interfejsu użytkownika w określonej bazie danych. Jednak zdecydowanie zablokowałbym kod warstwy usług w konkretnej bazie danych.
Michael O'Neill,

Odpowiedzi:

15

Jedynym językiem, który mogę wymyślić, są stare języki xBase, takie jak DBase, Clipper i FoxPro. Istnieje projekt GNU, który oferuje bezpłatną i w większości zgodną wersję o nazwie Clip

Był także Pick Basic, który wiązał język programowania bezpośrednio z platformą bazy danych.

To zostało zrobione. Był to ewolucyjny ślepy zaułek, który ograniczał dostęp języka do danych.

sal
źródło
2
Czy potrafisz wyjaśnić, dlaczego jest to ślepy zaułek ewolucji? Nie myślę o wdrożeniu jednego, jestem po prostu ciekawy.
VirtuosiMedia,
1
@VM Wyraźnie widać tendencję do używania interfejsów API i utrzymywania odrębności języka, bibliotek i środowiska wykonawczego. Na razie dobrze zdefiniowane interfejsy API, które umożliwiają dostęp do danych we wspólny sposób; niezależnie od języka, bazy danych, a nawet schematu bazy danych są wspólne. Najpopularniejsze języki dostarczają wspólny interfejs API bazy danych jako część standardowej biblioteki. To samo dotyczy dostępu do plików i http. Nie ma już potrzeby wkręcania go w język.
sal
1
istnieją różnice wielkości rzędu w lokalnym i zdalnym interfejsie API czasu połączenia, dodaj więcej, jeśli istnieje interfejs sieciowy. Nadal istnieją wyraźne i realne zalety używania języków w stosie DB.
Kolejka Jé,
@ Xepoch na pewno, jeśli chcesz zablokować się w bazie danych tego dostawcy i implementacji języka.
BlackICE,
1
@ David, ponownie przeczytaj pytanie, módl się, powiedz, jaki to byłby język, który nie byłby dla blokady dostawcy?
Jé Queue
29

Języki są „małe”, a bazy danych są „duże”; więc za każdym razem, gdy są one połączone, nie jest to język z bazą danych jako funkcją, ale baza danych z językiem jako funkcją. Wiele baz danych ma dołączone niektóre zastrzeżone języki, np. PL / SQL, T-SQL.

użytkownik 281377
źródło
W jaki sposób języki są „małe”?
Rei Miyasaka,
To kwestia percepcji. Oczywiście bazy danych wydają się mieć większą bazę kodów, większą dokumentację, większe wymagania dotyczące dysku (nawet jeśli nie bierzemy pod uwagę aktualnych danych); ale te porównania nie są uczciwe, ponieważ większość baz danych ma jeden lub kilka języków programowania.
user281377,
3
Rei: Nie przyjrzałeś się bliżej PL / SQL, prawda? BTW, Oracle zawiera także JVM w RDBMS.
user281377,
3
Rei: W rzeczywistości wiele osób używa PL / SQL do pisania aplikacji, przynajmniej części logiki biznesowej. Jak zapewne wiesz, PL / SQL jest także językiem używanym w Oracle Forms, więc możesz w zasadzie napisać i uruchomić program PL / SQL, który nigdy nie dotyka bazy danych. W praktyce jednak PL / SQL jest używany w połączeniu z Oracle RDBMS.
user281377,
2
Cholera, nigdy bym nie pomyślał.
Rei Miyasaka,
16

Niekoniecznie sądzę, że właściwe pytanie brzmi „dlaczego ich nie ma?” ale „dlaczego miałoby być?”. Co można zyskać, mając bazy danych będące cechą języka? Pamiętaj, że język znajduje się na samym dole stosu programowania. Rozdęty język wpływa na wszystko . Dlatego projektanci języków muszą powoli dodawać nowe funkcje, zwłaszcza takie, które wymagałyby takiej inwestycji.

Jason Baker
źródło
6
Ponieważ chcesz korzystać z zalet sprawdzania typu, a nawet prostego sprawdzania nazw, gdy pracujesz ponad granicami języka zapytań i języka programowania.
Macneil,
4
@Macneil, narzędzia ORM robią to teraz. Co należy wkręcić w język, gdy interfejsy API mogą to zrobić?
sal
1
@sal Aby dystrybutorzy aplikacji nie musieli instalować ogromnego DBMS, aby uzyskać zapisy atomowe i sprawdzanie spójności swoich pamięci podręcznych, indeksów wyszukiwania itp. Właśnie dlatego istnieje SQLite: „ konkurowaćfopen() ”.
Damian Yerrick
@sal: przypuszczalnie byłoby to z podobnego powodu, dla którego wyrażenia regularne lub zmiennoprzecinkowe są pakowane w niektóre języki, gdy API mogą to zrobić. Ponieważ ktoś pisał język i uznał, że jest wystarczająco podstawowy, aby uzasadnić specjalną składnię. Oczywiście jest to tak ogólny powód, że nie jest użyteczną odpowiedzią ;-)
Steve Jessop
14

Istnieją 3 starsze systemy, które są zbliżone do twoich wymagań:

  1. pick ,
  2. POMPY ,
  3. Microsoft Access

Pick i MUMPS zostały opracowane na wiele lat przed pierwszym artykułem naukowym na temat relacyjnych baz danych (co było około dekadę przed pojawieniem się na rynku pierwszego komercyjnego systemu baz danych opartego na SQL - od firmy, którą teraz nazywamy Oracle; pierwsza próba produktu IBM zakończyła się niepowodzeniem i udany system oparty na SQL był później). Może się okazać, że nadal są w użyciu (nasz system lokalnego transportu publicznego używał Pick do niedawna w systemie planowania podróży). Nie chcesz mieć nic wspólnego z Pick ani MUMPS, a najlepszą radą, jaką mogę dać, jest „odejdź od klawiatury z rękami w powietrzu!”. Jeśli masz z tym coś wspólnego, w uszach powinna dzwonić fraza „będzie ci przykro”.

Microsoft Access zostaje poważnie wyszydzony i skrytykowany w kręgach IT, ponieważ nieprogramiści mogą łatwo zrobić krytyczną aplikację biznesową z Access i zmutować ją w coś, bez czego firma dosłownie nie mogłaby żyć. Jest również całkiem prawdopodobne, że całkiem sporo programistów zaczęło pracę nad MS Access, a ponieważ sprawy ciągle się psuły, nauczyli się je naprawiać (pierwszy krok to tradycyjnie nauka podstaw graficznych i przepisywanie aplikacji Access najpierw w VB, a potem w czymś „lepszym”). Możliwe jest stworzenie dobrze działającej aplikacji Access, która działa z dużą ilością danych - widziałem, że to zrobiono - ale istnieją łatwiejsze sposoby robienia rzeczy i potrzeba znacznie mniej umiejętności, aby uczynić (i utrzymać) studnię zachowała się aplikacja poza VB i SQL Server.

Od SQL Server 2005 Microsoft wprowadził możliwość umieszczania CLR w procedurach i funkcjach przechowywanych. A jeśli chcesz być podstępny, możesz utworzyć typy danych, których możesz użyć jako kolumn w bazie danych. Myślę, że Oracle ma coś podobnego z Javą.

To powiedziawszy, nie sądzę, aby cokolwiek powstrzymało cię od stworzenia takiego lub postawienia hipotez na ich temat. Pick i MUMPS są starsze niż większość koderów tutaj i odzwierciedlają bardzo COBOLY sposób patrzenia na świat.

Moją osobistą radą jest oddzielenie rzeczy. Używaj języka, który jest dobry w manipulowaniu danymi, których potrzebuje Twój projekt (z zastrzeżeniem, że czasami „najlepszym” językiem jest ten, w którym łatwo można znaleźć programistów, którzy potrafią czytać / pisać kod). Użyj systemu baz danych, który dobrze zachowuje dane potrzebne Twojemu projektowi.

Tangurena
źródło
+1, chociaż myślę, że programista wystarczająco wykwalifikowany, aby skalowalna aplikacja Access zasługuje na lepsze środowisko pracy.
Larry Coleman,
3
Access nie jest językiem programowania, jest raczej zintegrowanym środowiskiem programistycznym i wykonawczym. Język, którego używa, VBA jest tym samym językiem, którego używa się do programowania makr w innych produktach biurowych i nie jest specyficzny dla programu Access. Dostęp do bazy danych jest nadal realizowany przez różnych dostawców sterowników JET.
Jeremy,
1
Oprócz trzech, o których wspomniałeś, istnieje kilka środowisk 4GL: Oracle Forms, CA OpenROAD (z domu Ingres Windows4GL) i Unify's Accell (żeby wymienić tylko te, z którymi pracowałem).
TMN
Nie jestem też pewien, czy Access naprawdę jest „dziedzictwem”, bez względu na to, jak bardzo byś chciał :)
haylem
+1 za świnkę świetna baza danych powiązana z cholernym językiem.
James Anderson
4

Dodanie bazy danych do języka programowania może zaspokoić tylko bardzo wąski zestaw użytkowników. Co jeśli chcą korzystać z funkcji innych niż RDBMS? Czy w ogóle nie chcesz korzystać z bazy danych? W takich przypadkach kompilator będzie niepotrzebnie nadęty.

vpit3833
źródło
4

Błądzić.

Po pierwsze, pytasz, dlaczego środowisko, w którym działa język, nie zapewnia bazy danych. Język jest po prostu sposobem wyrażenia czegoś, co chcesz zrobić w ustawionych gramatykach; tak naprawdę nie świadczy takich usług. :)

To powiedziawszy, istnieje kilka powodów.

  • Zbudowanie wydajnego systemu przechowywania baz danych jest trudnym problemem, prawdopodobnie rzędu lub większym niż budowanie .NET Framework (na przykład). Gdyby zespół próbował włączyć bazę danych do swojego frameworka, to byłby koniec, nad którym skończyli.

  • Baza danych, która zostanie załadowana, powinna znajdować się na oddzielnej maszynie, a nie w procesie dostępu do kodu.

  • ORM zapewniają wiele kontroli typu bezpieczeństwa i czasu kompilacji, które byłyby korzystne dla takiego działania, bez faktycznego próbowania struktury przez bazę danych.

To powiedziawszy, myślę, że fajnie byłoby zawrzeć w strukturze jakieś wdrożenie SQLite, przeciwko któremu mogłyby działać aplikacje o mniejszym zapotrzebowaniu na dostęp do danych. Nie jestem jednak pewien, czy przydałoby się to w nietrywialnych aplikacjach.

John Christensen
źródło
osadzony sqlite jest naprawdę niesamowity, jeśli go nie masz, projektanci języków używają XML jako mechanizmu pamięci zamiast :(
gbjbaanb
2

oni są; takie języki nazywane są 4GL . DataFlex jest moim ulubionym, choć już go nie używam.

Uwaga: Pomogłem opracować obiektową wersję DataFlex, v3.0

Steven A. Lowe
źródło
2

Myślę, że twoje prawdziwe pytanie brzmi „dlaczego nie ma żadnych języków programowania, które są dostarczane z bibliotekami baz danych ”.

Języki ogólnego przeznaczenia traktują wszystkie operacje we / wy jako jedno i to samo, niezależnie od tego, czy piszą lub odczytują dane z dysku, kamery internetowej, sieci, ekranu, lokalizacji w pamięci - to wszystko we / wy i to wszystko języki programowania dotyczą siebie z.

W rzeczywistości, oprócz odczytu / zapisu na stosie, większość języków programowania nawet nie wykonuje żadnego rzeczywistego We / Wy. Niektóre języki zapewniają natywne funkcje do wyrażania operacji we / wy (np. print Polecenie w języku BASIC), ale większość języków traktuje je jak zwykłe wywołania funkcji (np. printfW języku C) i pozwala bibliotekom na obsługę rzeczywistego zapisu.

Niektóre języki, takie jak C #, oferują funkcje językowe do wyrażania zapytań, ale nawet wtedy są to tylko wyrażenia na najbardziej podstawowej strukturze danych list (lub IEnumerables, jak są nazywane w .NET), które są tłumaczone na operacje SQL przez biblioteki - sam język wciąż działa z bardzo abstrakcyjnymi pojęciami IO.

Jeśli chodzi o to, dlaczego wbudowanie pakietu bazy danych w standardową bibliotekę języka programowania nie jest dobrym pomysłem, najprawdopodobniej nic innego w standardowej bibliotece zwykle nie zależy od funkcjonalności bazy danych.

Rei Miyasaka
źródło
Wiele języków programowania jest wyposażonych w biblioteki DB. Zarówno Python, jak i PHP mają sqlite. Visual Studio jest dostarczane z SQL Server Express.
kwantowe
To są interfejsy DB, a nie same DB. Środowisko wykonawcze .NET nie jest dostarczane z Visual Studio ani SQL Server Express.
Rei Miyasaka,
@ReiMiyasaka Standardowa biblioteka Python zawiera cały silnik SQLite, ponieważ SQLite to tylko biblioteka C, do której łączy się program, a nie osobny proces ani nic takiego.
Damian Yerrick
2

Tak. Języki na platformie AS / 400 mają natywne, najwyższej klasy wsparcie baz danych.

Dzieje się tak dlatego, że platforma AS / 400 ma w pełni zintegrowaną bazę danych i zapewnia wiele bardzo fajnych funkcji, takich jak łatwość nawigacji w zestawie wyników aktualizującym wartości w drodze.

użytkownik1249
źródło
0

Zależy od języka i platformy. Na przykład dla mnie bardzo proste jest korzystanie z różnych baz danych podczas pracy z C, po prostu używam odpowiedniej biblioteki.

Język musi zachować standardową implementację, a to zazwyczaj oznacza zapewnienie minimalnej kwoty potrzebnej do zbudowania tego, co chce. Wszystko inne staje się biblioteką, a może rozszerzeniem języka obsługiwanego przez innych.

Przynajmniej dotyczy to języków zgodnych ze standardami ustanowionymi przez organizacje takie jak ISO.

Tim Post
źródło
0

Jak napisano, pytanie jest częściowo błędne, jak pokazały niektóre kontrprzykłady powyżej.

Chciałbym więc najpierw sprecyzować pytanie, aby brzmiało: „Dlaczego DBMS zwykle nie jest zintegrowany jako funkcja uniwersalnych języków programowania wysokiego poziomu?”

Z tego samego powodu inne produkty oprogramowania, takie jak systemy operacyjne, systemy plików, serwery WWW, warstwy pamięci podręcznej itp., Zwykle nie są wbudowane. Języki ogólnego przeznaczenia zazwyczaj działają na poziomie abstrakcji wyższym niż poziom takich produktów. Dlatego rozsądne jest, aby programista wdrożył DBMS wjęzyk ogólnego przeznaczenia, a DBMS może nawet ujawniać pewne aspekty swojego języka nadrzędnego lub specyficzny dla DB język deklaratywny do użytku przez programistów DB. Ale jest zbyt wiele opcji projektowych przy pisaniu DBMS, aby mądrze było je naprawić w języku programowania ogólnego. Jeśli to naprawisz, skończysz z przypadkiem takim jak MUMPS, w którym uwikłanie obu powoduje, że cała branża pogrąża się w problemie z kurczakiem i jajkiem, utknął z przestarzałym DBMS i przestarzałym językiem programowania.

użytkownik10202
źródło
0

Używany do pracy w NonStop / SQL, który był w pełni zintegrowany z NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran i prawdopodobnie innymi językami, a także jest w pełni zintegrowany z NonStop / Guardian, systemem operacyjnym, na którym komputery biegł.

Myślę, że jest to prawdopodobnie najbliższa integracja, jaką można uzyskać, gdy baza danych jest systemem plików systemu operacyjnego. Jest to również ślepy zaułek, nie ma sposobu na oddzielenie żadnego ze składników, bazy danych, systemu operacyjnego, sprzętu ani żadnego napisanego na nim oprogramowania, którego nigdy nie można używać osobno, przeniesionego do innego środowiska.

Najbliżej komputera PC jest MS Access, a Embarcadero / Borland Delphi jest na drugim miejscu.

Następnie patrzysz na osadzone bazy danych w swojej aplikacji, które mogą mieć ograniczone odwołanie do tych tworzących samodzielne aplikacje, które potrzebują zestawu danych hierarchicznych, które nie są łatwo przechowywane w prostym pliku konfiguracyjnym i / lub wymagają regularnej aktualizacji w trakcie działania aplikacji . Lub dla osób, które chcą mieć przenośną wersję aplikacji, która przechowuje migawkę części większej bazy danych i może synchronizuje ją z większą bazą danych w czasie, gdy aplikacja może nawiązać połączenie (przydatne, na przykład, sprzedawca, który często jest poza zasięgiem sieć korporacyjna potrzebuje jeszcze danych sprzedażowych dla swojej grupy klientów lub lekarza w terenie, który chce dokumentacji pacjentów, ale nie może połączyć się z siecią szpitalną, ponieważ nie ma dostępu do sieci, do której musi się udać).

jwenting
źródło
0

Jako były programista Visual Foxpro mam dość dziwne, że żaden język głównego nurtu nie definiuje modelu relacyjnego jako części tego języka.

Posiadanie pełnego silnika bazy danych nie jest dobrym pomysłem, ale posiadanie języka „SQL” może być BARDZO przydatne.

W OO istnieje niedopasowanie impedancji. Stało się tak, ponieważ obiekty i zbiory nie są do siebie podobne. Ale jeśli język pozwoli mi zdefiniować tabele, pola, relacje, ograniczenia itp. (Bez powiązania go z konkretną pamięcią) będzie bardzo potężny. Ponadto utworzenie ORM będzie bardziej odwzorowaniem 1-do-1.

mamcx
źródło