O ile mi wiadomo, większość relacyjnych baz danych nie oferuje interfejsu API na poziomie sterownika dla zapytań, z wyjątkiem query
funkcji, która przyjmuje argument SQL jako argument.
Myślę, jak łatwiej byłoby, gdyby można było:
var result = mysql.select('article', {id: 3})
W przypadku połączonych tabel byłoby to nieco bardziej złożone, ale nadal możliwe. Na przykład:
var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'});
mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID'])
Czystszy kod, brak narzutu parsowania łańcucha, żadnych problemów z wstrzykiwaniem, łatwiejsze ponowne użycie elementów zapytania ... Widzę wiele zalet.
Czy istnieje konkretny powód, dla którego wybrano opcję zapewniania dostępu do zapytań tylko za pomocą SQL?
Odpowiedzi:
Bazy danych nie są przetwarzane - zwykle działają na innym serwerze. Więc nawet jeśli posiadasz interfejs API, musiałby przesłać przez drut coś, co reprezentuje twoje zapytanie i wszystkie jego projekcje, filtry, grupy, podzapytania, wyrażenia, złączenia, funkcje agregujące itp. Może to być XML, JSON lub inny Zastrzeżony format, ale równie dobrze może to być SQL, ponieważ jest wypróbowany, przetestowany i obsługiwany.
Obecnie rzadsze jest samodzielne tworzenie poleceń SQL - wiele osób korzysta z pewnego rodzaju ORM. Mimo że ostatecznie przekładają się one na instrukcje SQL, mogą dostarczyć interfejsu API, którego szukasz.
źródło
Ponieważ SQL zapewnia wspólny interfejs API. Możesz napisać sterownik zgodny z ANSI 92 SQL, który emituje SQL i udostępnia pożądany interfejs API. Jako specjalny bonus, będzie działał z prawie każdą bazą danych SQL bez przepisywania.
Gdyby to było zrobione po swojemu, każda baza danych SQL miałaby inny interfejs API. O ile oczywiście nie wszyscy znormalizujemy interfejs API. Ale wtedy mielibyśmy SQL mniej więcej, prawda? Tyle że twój interfejs API wydaje się być specyficzny dla języka programowania, podczas gdy SQL nie.
źródło
Baza danych ma jeszcze wiele do zrobienia w celach administracyjnych, więc możliwość pisania skryptów i przesyłania tekstu w celu dodawania użytkowników, wykonywania kopii zapasowych, ładowania danych, zmiany schematu itp. Jest ważna. Większość DBA nie chce tego robić w jakimś innym języku programowania.
Jeśli DBA chce pozostać przy SQL, musisz mieć inny język, baza danych będzie obciążona przetwarzaniem obu.
W bazach danych jest wiele nowych funkcji, więc nie sądzę, aby się stagnowały. Po prostu nie robią tego, co proponujesz z jakiegoś powodu.
SQL Server ma możliwość wykonywania kodu .NET od wewnątrz poprzez SQL CLR. Jest to pomocne w przypadku niektórych zadań, które nie pasują do modelu relacyjnego, ale chcą zachować wydajność. Wiem, że nie tego szukasz. Jest to przykład wielu rzeczy, które robią bazy danych.
W najbliższym czasie nie zniknie. Jedną z najnowszych baz danych, które trafiły na rynek, jest NuoDB . Utrzymywali SQL, dostarczali ACID, dodając jednocześnie możliwość dystrybucji serwerów i uruchamiania ich w chmurze. Możesz zastanowić się, dlaczego zadali sobie tyle trudu, aby promować kontynuację SQL (nie jedyny powód, ale to ogromna zaleta).
źródło
SQL DBMS zapewnia znacznie zoptymalizowany dostęp do sklepu za pośrednictwem języka ojczystego i wielu, jak zauważasz, że nie zapewnia żadnego innego API.
Obserwacja, że baza danych jest poza procesem, nie ma zastosowania w wielu przypadkach i nie jest tak naprawdę bezpośrednio istotna.
Nawet bazy danych, które wymagają użycia SQL DML, często zapewniają bibliotekę kursorów, aby zapewnić iteratorowi dostęp do zestawu wyników, a dobrze znany program Microsoft Access i Btrieve SQL DBMS zapewniają bezpośredni interfejs zapisu poszczególnych tabel w bazie danych jako mechanizm dla bardzo wysokiej wydajności dostępu w określonych okolicznościach.
Jak wspomniano, złożone zapytania wykorzystujące taką składnię odtworzyłyby zachowanie sieciowych baz danych z późnych lat 70.
Alternatywne mechanizmy dostępu są mniej atrakcyjne dla użytkowników głównego nurtu ze względu na brak znajomości, ale wzrost popularności baz danych NoSQL może zwiększyć zainteresowanie innymi interfejsami API w celu osiągnięcia określonych przyrostów wydajności. Wydaje się, że nic innego nie zaleca takiego podejścia.
źródło