¿Por qué las bases de datos relacionales solo aceptan consultas SQL?

14

Hasta donde sé, la mayoría de las bases de datos relacionales no ofrecen ninguna API de nivel de controlador para consultas, excepto una función query que toma una cadena SQL como argumento.

Estoy pensando en lo fácil que sería si uno pudiera hacerlo:

var result = mysql.select('article', {id: 3})

Para tablas unidas, sería un poco más complejo, pero aún posible. Por ejemplo:

var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'});
mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID'])

Código más limpio, sin sobrecarga de análisis de cadenas, sin problemas de inyección, reutilización más fácil de elementos de consulta ... Puedo ver muchas ventajas.

¿Hay alguna razón específica por la que se eligió para proporcionar solo acceso a consultas a través de SQL?

    
pregunta lortabac 21.03.2013 - 15:56

4 respuestas

33

Las bases de datos están fuera de proceso, normalmente se ejecutan en un servidor diferente. Por lo tanto, incluso si tuviera una API, tendría que enviar algo a través del cable que representa su consulta y todas sus proyecciones, filtros, grupos, subconsultas, expresiones, combinaciones, funciones agregadas, etc. Formato propietario, pero también puede ser SQL, ya que se ha probado, probado y admitido.

Es menos común en estos días crear comandos SQL usted mismo: muchas personas usan algún tipo de ORM. A pesar de que estas últimas se convierten en sentencias de SQL, pueden proporcionar la API que está buscando.

    
respondido por el Tim 21.03.2013 - 16:09
33

Porque SQL proporciona una API común. Puede escribir un controlador compatible con ANSI 92 SQL que emita SQL y exponga la API que desea. Como bono especial, funcionará con casi cualquier base de datos SQL sin reescritura.

Si se hizo a tu manera, cada base de datos SQL tendría una API diferente. A menos que, por supuesto, todos estemos estandarizados en su API. Pero entonces, tendríamos SQL otra vez, más o menos, ¿no? Excepto que su API parece ser específica del lenguaje de programación, mientras que SQL no lo es.

    
respondido por el Robert Harvey 21.03.2013 - 16:09
7

Hay más cosas que hacer en la base de datos con fines administrativos, por lo que es importante poder crear secuencias de comandos y enviar texto para agregar usuarios, ejecutar copias de seguridad, cargar datos, cambiar el esquema, etc. La mayoría de los DBA no querrán hacer esto dentro de otro lenguaje de programación.

Si los DBA quieren quedarse con SQL, tiene que tener otro idioma, la base de datos tendrá la carga de procesar ambos.

Hay muchas características nuevas en las bases de datos, así que no creo que se estén estancando. Simplemente no están haciendo lo que usted propone por alguna razón.

SQL Server tiene la capacidad de ejecutar código .NET desde adentro a través de SQL CLR. Esto es útil para algunas de esas tareas que no encajan en un modelo relacional, pero que desean mantener el rendimiento. Me doy cuenta de que esto no es lo que estás buscando. Es un ejemplo de las muchas cosas que hacen las bases de datos.

No va a desaparecer en el corto plazo. Una de las bases de datos más recientes para llegar al mercado es NuoDB . Mantuvieron SQL, proporcionan ACID al tiempo que añaden la capacidad de distribuir servidores y ejecutarlo en una nube. Es posible que desee ver por qué se tomaron todas las molestias para promover la continuación de SQL (no es su única razón, pero es un gran punto de venta).

    
respondido por el JeffO 21.03.2013 - 21:49
3

SQL DBMS proporciona un acceso sustancialmente optimizado a la tienda a través del idioma nativo y muchos, como se nota, no proporciona ninguna otra API.

La observación de que la base de datos está fuera de proceso no se aplica en varios casos y no es directamente relevante.

Incluso las bases de datos que requieren el uso del DML de SQL a menudo proporcionan una biblioteca de cursores para proporcionar acceso de iterador a un conjunto de resultados, y el conocido Microsoft Access y Btrieve SQL DBMS proporcionan una interfaz de registro directo a las tablas individuales en una base de datos como un mecanismo para el acceso de muy alto rendimiento en circunstancias específicas.

Como se señaló, las consultas complejas que utilizan esa sintaxis reproducen el comportamiento de las bases de datos de red de finales de los años 70.

Los mecanismos de acceso alternativos son menos atractivos para los usuarios principales debido a la falta de familiaridad, pero el crecimiento de la popularidad de las bases de datos NoSQL podría aumentar el interés en otras API para lograr mejoras de rendimiento específicas. Parece que hay poco más para recomendar este enfoque.

    
respondido por el Pekka 21.03.2013 - 23:47

Lea otras preguntas en las etiquetas