tutorial sirve sentencias que para descargar comandos caracteristicas sql database

sirve - ¿Cuáles son las buenas alternativas a SQL(el lenguaje)?



sql server (16)

"Ocasionalmente escucho cosas sobre cómo SQL apesta y no es un buen lenguaje"

SQL tiene más de treinta años. Las ideas sobre "qué características convierten a algo en un ''buen'' lenguaje y cuáles lo convierten en ''malo'' han evolucionado más rápidamente que SQL.

Además, SQL no es un lenguaje que se ajuste a los estándares actuales de "lo que se necesita para ser relacional", por lo tanto, SQL no es un lenguaje relacional para arrancar.

"pero nunca escuché mucho sobre alternativas".

Los invito a reflexionar sobre la posibilidad de que estén tratando de escuchar solo en los lugares incorrectos (es decir, la industria DBMS comercial exclusivamente).

"Entonces, ¿hay otros buenos lenguajes que sirven para el mismo propósito (acceso a la base de datos) y qué los hace mejores que SQL?"

Date y Darwen describen las características a las que un lenguaje moderno de manipulación de datos debe conformarse en su "Tercer Manifiesto", cuya versión más reciente se encuentra en su libro "Bases de datos, tipos y el modelo relacional".

"¿Hay alguna buena base de datos que use este lenguaje alternativo?"

Si por "bueno", quiere decir algo como "fuerza industrial", entonces no. Lo más parecido disponible probablemente sea Dataphor.

El proyecto Rel ofrece una implementación para el lenguaje Tutorial D definido en "Bases de datos, tipos y el modelo relacional", pero el principal objetivo actual de Rel es ser de naturaleza educativa.

Mi proyecto SIRA_PRISE ofrece una implementación para la gestión de datos "verdaderamente relacional", pero dudo en etiquetarlo también como "una implementación de un lenguaje".

Y, por supuesto, también podría considerar algunas cuestiones no relacionales, como algunos han propuesto, pero yo personalmente rechazo la gestión de datos no relacionales como varias décadas de regresión tecnológica. No vale la pena considerar, eso es.

Ah, y dicho sea de paso, un sistema de software que se usa para administrar bases de datos no es "una base de datos", sino "un Sistema de Administración de Base de Datos", "DBMS" para abreviar. Al igual que una fotografía no es lo mismo que una cámara, y si está hablando de cámaras y desea evitar confusiones, entonces debe utilizar la palabra adecuada "cámaras" en lugar de "fotografía".

De vez en cuando escucho cosas sobre cómo SQL apesta y no es un buen lenguaje, pero nunca escucho mucho sobre alternativas. Entonces, ¿hay otros buenos lenguajes que sirven para el mismo propósito (acceso a la base de datos) y qué los hace mejores que SQL? ¿Hay alguna buena base de datos que use este lenguaje alternativo?

EDITAR: Estoy familiarizado con SQL y lo uso todo el tiempo. No tengo ningún problema con eso, solo me interesan las alternativas que puedan existir y por qué a la gente le gusta más.

Tampoco busco tipos alternativos de bases de datos (el movimiento NoSQL), solo diferentes formas de acceder a las bases de datos.


Creo que podría interesarle mirar Dataphor , que es un entorno de desarrollo relacional de código abierto con su propio servidor de base de datos (que habla D) y la capacidad de derivar interfaces de usuario desde su lenguaje de consulta.

Además, parece que Ingres todavía es compatible con QUEL, y es de código abierto.


Dentro del mundo .NET, aunque todavía tiene una sensación de SQL, LINQ-to-SQL le permitirá tener una buena combinación de SQL y procesamiento .NET en memoria de sus datos. También simplifica una gran cantidad de plomería de datos de nivel inferior que nadie realmente quiere hacer.

Si desea ver un tipo de base de datos de una mentalidad completamente diferente, eche un vistazo a CouchDB . "Mejor" es obviamente un requisito relativo y este tipo de base de datos sin relación es "Mejor", pero solo en ciertos escenarios.


Eche un vistazo a LINQ to SQL ...

Lo probé hace un par de meses y nunca miré atrás ...


El movimiento general en estos días es NoSQL; generalmente estas tecnologías son:

Personalmente, creo que no hay nada de malo en SQL, siempre que se ajuste a sus necesidades. SQL es expresivo y excelente para trabajar con datos estructurados.


En la década de 1980, ObjectStore proporcionó acceso a objetos transparentes. Era algo así como un RDBMS más un ORM, excepto sin todas esas capas de abstracción con fugas extra: almacenaba objetos directamente en la base de datos.

Entonces, esta alternativa era realmente "sin ningún idioma", o tal vez "el idioma que ya usabas". Escribirá código C ++ y creará o recorrerá objetos como si fueran objetos nativos, y la base de datos se encargó de todo según fuera necesario. Algo así como ActiveRecord pero en realidad funcionó tan bien como el reclamo de blitzes de marketing de ActiveRecord. :-)

(Por supuesto, no tenía el músculo de marketing de Oracle, y no tenía el costo cero de MySQL, por lo que todo el mundo lo ignoró. Y ahora tratamos de replicar eso con RDBMS y ORM, y algunas personas intentan argumentar que las tablas realmente tiene sentido almacenar objetos, y escribir un archivo XML gigante para decirle a tu computadora cómo asignar objetos a las tablas es de alguna manera una solución razonable.)


Hay muchas implementaciones de SQL (SQL Server, mysql, Oracle, etc.), pero no hay otro lenguaje que tenga el mismo propósito en el sentido de ser un lenguaje de propósito general diseñado para el almacenamiento y recuperación de datos relacionales .

Hay bases de datos de objetos como db4o , y hay bases de datos llamadas noSQL similares que se refieren a casi cualquier mecanismo de almacenamiento de datos que no dependa de SQL, pero más comúnmente son productos de código abierto como Cassandra basados ​​libremente en el concepto Bigtable de Google.

También hay una serie de productos de base de datos de propósito especial como CDF, pero es probable que no tenga que preocuparse por ellos. Si lo necesita, lo sabrá.

Ninguno de estos son equivalentes a SQL.

Eso no significa que sean "mejores" o "peores", simplemente no son lo mismo. Dennis Forbes escribió recientemente una gran publicación que desglosa varias de las extrañas afirmaciones que surgen en contra de SQL. Él mantiene (y acepto) que estas quejas provienen principalmente de personas y tiendas que han elegido la herramienta incorrecta para el trabajo en primer lugar, o no están usando su SQL DBMS correctamente (ni siquiera estoy sorprendido cuando ver otra base de datos SQL donde cada columna es varchar(50) y no hay un solo índice o clave, en cualquier lugar).

Si está implementando otro sitio de redes sociales y no está demasiado preocupado con los principios de ACID , comience por buscar productos como db4o. Sin embargo, si está desarrollando un sistema empresarial de misión crítica, le recomiendo encarecidamente que lo piense dos veces antes de unirse al coro de "SQL Sucks". Investigue primero, descubra las características que los diversos productos pueden y no pueden admitir.

Editar: estaba ocupado escribiendo mi respuesta y no recibí la actualización de la pregunta en unos minutos. Una vez dicho esto, SQL es esencialmente inseparable del propio DBMS. Si ejecuta un producto de base de datos SQL, puede acceder a él con SQL, punto.

Tal vez estás buscando abstracciones sobre la sintaxis; Linq a SQL, Entity Framework, Hibernate / NHibernate, SubSonic y una gran cantidad de otras herramientas ORM proporcionan su propia sintaxis similar a SQL que no es exactamente SQL. Todos estos "compilar hacia abajo" a SQL. Si ejecuta SQL Server, también puede escribir CLR Functions / Procedures / Triggers, que le permite escribir código en cualquier idioma .NET que se ejecutará dentro de la base de datos; sin embargo, esto no es realmente un sustituto de SQL, más una extensión de él.

No conozco ningún "lenguaje" completo que pueda superponer sobre una base de datos SQL; Además de cambiar a un producto de base de datos diferente, eventualmente verá SQL en la tubería.


Las bases de datos relacionales no son el único tipo de bases de datos disponibles. Debo decir algo sobre las Object-Databases ya que no lo he visto en las respuestas de los demás. Tengo experiencia con el framework Zope python que usa ZODB para la persistencia de objetos en lugar de RDBMS (bueno, teóricamente es posible reemplazar ZODB por otra base de datos dentro de zope pero la última vez que lo revisé no pude hacerlo funcionar, no sea positivo al respecto).

La mentalidad ZODB es realmente diferente, más como la programación de objetos que sería persistente.

ORM se puede ver como un tipo de lenguaje

De alguna manera, creo que el modelo de base de datos objeto es de lo que tratan los ORM: acceder a datos persistentes a través de su modelo de objetos habitual. Es un tipo de lenguaje y está ganando algo de cuota de mercado, pero por ahora no lo vemos como un lenguaje sino como una capa de abstracción. Sin embargo, creo que sería mucho más eficiente usar un ORM sobre una base de datos de objetos que sobre SQL (en otras palabras, el rendimiento de los ORM que utilicé usando alguna base de datos SQL como capas base aspiradas).


Los problemas con SQL me han motivado a preparar un borrador de lenguaje de consulta llamado SMEQL en la wiki de Portland Pattern Repository . Comentarios Bienvenido. Toma prestadas ideas de la programación funcional y el lenguaje experimental del Sistema Empresarial 12 de IBM. (Originalmente lo llamé TQL, pero luego descubrí que se tomó ese nombre).


Respuesta directa: no creo que haya ningún candidato serio por ahí. DBase y sus imitadores (Foxpro, Codebase, etc.) fueron un contendiente por un tiempo, pero creo que básicamente perdieron la guerra de lenguaje de consulta de la base de datos. Ha habido muchos otros productos de bases de datos que tenían su propio lenguaje de consulta, como Progress y Paradox y varios otros que he usado cuyos nombres no recuerdo y seguramente muchos más de los que nunca había escuchado. Pero no creo que ningún otro competidor esté a punto de obtener una parte no trivial del mercado.

Como simple prueba de que existe una diferencia entre un formato de base de datos y un lenguaje de consulta, la última versión de DBase que utilicé hace muchos años ofreció tanto el lenguaje de consulta DBase "tradicional" como SQL, ambos podrían utilizarse para acceder a los mismos datos.

Paseo lateral: no diría que SQL apesta, pero tiene muchos defectos. Con el beneficio de los años de experiencia y retrospectiva que ahora tenemos, estoy seguro de que se podría diseñar un mejor lenguaje de consulta. Pero crear un mejor lenguaje de consulta y convencer a la gente para que lo use son dos cosas muy diferentes. ¿Sería suficiente convencer a la gente de que valía la pena aprender? Las personas han invertido muchos años de sus vidas aprendiendo a usar SQL de manera efectiva. Incluso si su nuevo idioma es más fácil de usar, seguramente habría una curva de aprendizaje. ¿Y cómo migraría sus sistemas existentes de SQL al nuevo idioma? Etc. Se puede hacer, por supuesto, al igual que C ++, C # y Java han derrocado en gran medida COBOL y FORTRAN. Pero se necesita una combinación de superioridad técnica y buen marketing para llevarlo a cabo.

Aún así, me río a las personas que se apresuran a defender SQL cada vez que alguien lo critica, que insisten en que cualquier problema que tengas con SQL debe ser tu propia ineptitud al usarlo y no es culpa de SQL, simplemente no debes tener alcanzado el plano superior de thingking necesario para comprender su perfección, etc. Cálmate, toma una respiración profunda: estamos insultando un lenguaje de computadora, no a tu madre.


SQL el lenguaje es muy poderoso, y los sistemas de administración de bases de datos relacionales han sido y aún son un gran éxito. Pero existe una clase de aplicación que requiere una escalabilidad y disponibilidad muy altas, pero no necesariamente un alto grado de consistencia de los datos (la consistencia final es lo que importa). Una variedad de sistemas obtiene un mejor rendimiento y escalabilidad que un RDBMS al relajar la necesidad de transacciones completas que cumplan con ACID. Estos han sido llamados "NoSQL", pero como otros señalan, este es un nombre inapropiado: quizás deberían llamarse bases de datos NoACID.

Michael Stonebraker cubre esto en La discusión "NoSQL" no tiene nada que ver con SQL .


SQL es de facto.

Los marcos que intentan proteger a los desarrolladores de este han creado finalmente su propio lenguaje específico (Hibernate HQL viene a la mente).

SQL resuelve un problema bastante bien. No es más difícil de aprender que un lenguaje de programación de alto nivel. Si ya conoce un lenguaje funcional, es muy fácil comprender SQL.

Teniendo en cuenta que los principales proveedores de bases de datos ofrecen bases de datos de última generación (Oracle y SQL Server) soportan SQL y han invertido años en motores de optimización, etc. y todos los principales software de modelado de datos y ofertas de software de gestión de cambios en SQL, yo diría que es la apuesta más segura.

Además, hay más en una base de datos que solo consultas. Hay escalabilidad, respaldo y recuperación, extracción de datos. Los grandes proveedores soportan muchas cosas que incluso los nuevos motores de "caché" ni siquiera consideran.


SQL funciona bien para el dominio para el que fue diseñado, tablas de datos interrelacionadas. Esto generalmente se encuentra en el procesamiento de datos comerciales tradicionales. SQL no funciona tan bien cuando se trata de persistir en una compleja red de objetos.

Si sus necesidades son almacenar y procesar datos relativamente tradicionales, use algunos DBMS basados ​​en SQL.

En respuesta a su edición:

Si está buscando alternativas al SQL DML para recuperar datos de almacenes de datos relacionales, nunca escuché de ninguna alternativa seria a SQL.

Los knocks que SQL obtiene no son, creo, tanto contra el lenguaje en comparación con los principios de almacenamiento de datos subyacentes en los que se basa el lenguaje. La gente a menudo confunde el lenguaje SQL con el modelo de datos relacionales en el que se construyen los RDBMS.


Tal vez estás pensando en la crítica que C. Date y sus amigos han expresado en contra de las bases de datos relacionales existentes y SQL; dicen que los sistemas y el lenguaje no son 100% relacionales, y deberían serlo. Realmente no veo ningún problema real aquí; por lo que puedo ver, puedes tener un sistema 100% relacional, si quieres, solo disciplinando la forma en que usas SQL.

Lo que personalmente encuentro es la falta de poder expresivo que SQL hereda de su base teórica, el álgebra relacional. Un problema es la falta de soporte para el uso de ordenamiento de dominio, que se encuentra cuando trabaja con datos marcados por fechas, marcas de tiempo, etcétera. Una vez intenté hacer una aplicación de informes completamente en SQL simple en una base de datos llena de marcas de tiempo y simplemente no era factible. Otra es la falta de soporte para el recorrido de rutas: la mayoría de mis datos se ven como gráficos dirigidos en los que necesito recorrer rutas, y SQL no puede hacerlo. (Carece de "cierre transitivo". SQL-1999 puede hacerlo con "subconsultas recursivas" pero todavía no los he visto en su uso real. También hay varios hacks para hacer que SQL haga frente pero son feos). Estos problemas son también discutido por algunos de los escritos de Date, por cierto.

Recientemente me señalaron .QL que parece abordar muy bien el problema del cierre transitivo, pero no sé si puede resolver el problema con los dominios ordenados.


Eche un vistazo a esta lista.

Hibernate Query Language es probablemente el más común. La ventaja de Hibernate es que los objetos se asignan muy fácilmente (casi de forma automática) a la base de datos relacional, y el desarrollador no tiene que dedicar mucho tiempo al diseño de la base de datos. Visite el sitio web de Hibernate para obtener más información. Estoy seguro de que otros hablarán con otros lenguajes de consulta interesantes ...

Por supuesto, hay un montón de cosas NoSQL por ahí, pero específicamente mencionas que no estás interesado en eso.


Ciertamente estoy de acuerdo en que la sintaxis de SQL es difícil de trabajar, tanto desde el punto de vista de generarlo automáticamente, como desde el punto de vista de analizarlo, y no es el estilo de lenguaje que escribiríamos hoy si estuviéramos diseñando SQL para las demandas que colocamos en él hoy. No creo que encontraríamos tantas palabras clave variadas si GROUP_CONCAT el lenguaje hoy, sospecho que la sintaxis de la combinación sería diferente, las funciones como GROUP_CONCAT tendrían una sintaxis más regular en lugar de pegar más palabras clave en el medio de los paréntesis para controlar su Comportamiento ... cree su propia lista de incoherencias y redundancias en SQL que le gustaría / esperamos que se suavice si rediseñáramos el lenguaje hoy.

No hay alternativas a SQL para hablar con bases de datos relacionales (es decir, SQL como protocolo), pero existen muchas alternativas para escribir SQL en sus aplicaciones. Estas alternativas se han implementado en forma de interfaces para trabajar con bases de datos relacionales. Algunos ejemplos de una interfaz incluyen:

Creo que el tema subyacente de hoy es que en lugar de reemplazar SQL con un nuevo lenguaje de consulta, en su lugar estamos creando interfaces específicas para cada idioma para ocultar el SQL en nuestros lenguajes de programación cotidianos, y tratamos SQL como el protocolo para hablar con bases de datos.