Estamos aprendiendo que la mayoría de los idiomas se clasifican como uno de los dos, "basados en relaciones" o "de alto nivel".
Esos conceptos son ortogonales. "Basado en relaciones" significa que la semántica del lenguaje se basa en el concepto de una relación, es decir, una asociación de muchos a muchos entre dos conjuntos (las relaciones son la base matemática detrás de las tablas SQL). "Alto nivel" significa que el lenguaje contiene muchas abstracciones que ocultan gran parte de los detalles técnicos subyacentes (como ubicaciones de memoria, registros de CPU, acceso a disco, operaciones bit a bit, etc.). SQL está ciertamente basado en relaciones, ya que su objetivo principal es describir datos relacionales y operaciones sobre él. SQL también es bastante alto nivel; no proporciona ningún medio para acceder directamente a los bytes en el disco, y no le brinda ningún detalle sobre cómo almacena sus datos (al menos el SQL estándar no lo hace;
De hecho, hay muchos más ejes a lo largo de los cuales se pueden clasificar los lenguajes de programación (y datos); uno particularmente interesante es declarativo versus imperativo . Los lenguajes declarativos describen qué es algo ; Los lenguajes imperativos describen cómo hacer algo. La parte DDL de SQL es mayormente declarativa, a pesar de las palabras clave imperativas de aspecto (" CREATE TABLE
", ' DROP DATABASE
', etc.), e incluso la parte de manipulación de datos ( SELECT
, UPDATE
, INSERT
, DELETE
) todavía es bastante declarativa. Una propiedad muy interesante de SQL es que no está completa en Turing: no se puede escribir un bucle ilimitado en ANSI SQL estándar.
La programación funcional se centra en algunas ideas centrales:
- las funciones son ciudadanos de primera clase (es decir, pueden usarse como valores, como entradas para otras funciones y como salida de otras funciones)
- funciones de orden superior (funciones que operan en funciones o funciones que devuelven funciones)
- pureza (una función pura es aquella que no tiene efectos secundarios; una función pura no puede hacer ninguna E / S, no puede leer ni modificar ningún estado global, y no puede tomar argumentos de referencia no constantes. Las funciones puras son especialmente interesantes porque siempre produce la misma salida con las mismas entradas)
SQL ciertamente no gira en torno a las funciones como la herramienta principal para modelar cosas, pero sí acepta la idea de pureza: la misma consulta ejecutada en la misma base de datos producirá el mismo resultado cada vez (excepto para ordenar). Llamar a SQL un lenguaje 'funcional' es un poco difícil, aunque en mi opinión.