Chapter 2. SQL

Table of Contents
El Modelo de Datos Relacional
Formalidades del Modelo Relacional de Datos
Operaciones en el Modelo de Datos Relacional
El Lenguaje SQL

Este capítulo apareció originariamente como parte de la tesis doctoral de Stefan Simkovics. (Simkovics, 1998).

SQL se ha convetido en el lenguaje de query relacional más popular. El nombre "SQL" es una abreviatura de Structured Query Language (Lenguaje de query estructurado). En 1974 Donald Chamberlain y otros definieron el lenguaje SEQUEL (Structured English Query Language) en IBM Research. Este lenguaje fue implementado inicialmente en un prototipo de IBM llamado SEQUEL-XRM en 1974-75. En 1976-77 se definió una revisión de SEQUEL llamada SEQUEL/2 y el nombre se cambió a SQL en consecuencia.

IBM desarrolló un nuevo prototipo llamado System R en 1977. System R implementó un amplio subconjunto de SEQUEL/2 (now SQL) y un número de cambios que se le hicieron a (now SQL) durante el proyecto. System R se instaló en un número de puestos de usuario, tanto internos a IBM como en algunos clientes seleccionados. Gracias al éxito y aceptación de System R en aquellos puestos de usuario, IBM inició el desarrollo de productos comerciales que implementaban el lenguaje SQL basado en la tecnología System R.

Durante los años siguientes, IBM y bastantes otros vendedores anunciaron productos SQL tales como SQL/DS (IBM), DB2 (IBM), ORACLE (Oracle Corp.), DG/SQL (Data General Corp.), y SYBASE (Sybase Inc.).

SQL es también un estandar oficial hoy. En 1982, la American National Standards Institute (ANSI) encargó a su Comité de Bases de Datos X3H2 el desarrollo de una propuesta de lenguaje relacional estandar. Esta propuesta fue ratificada en 1986 y consistía básicamente en el dialecto de IBM de SQL. En 1987, este estandar ANSI fue también aceptado por la Organización Internacional de Estandarización (ISO). Esta versión estandar original de SQL recibió informalmente el nombre de "SQL/86". En 1989, el estandar original fue extendido, y recibió el nuevo nombre, también informal, de "SQL/89". También en 1989 se desarrolló un estandar relacionado llamado Database Language Embedded SQL (ESQL).

Los comités ISO y ANSI han estado trabajando durante muchos años en la definición de una versión muy expandida del estandar original, llamado informalmente SQL2 o SQL/92. Esta versión se convitió en un estandar ratificado durante 1992 - "International Standard ISO/IEC 9075:1992, Database Language SQL" -. SQL/92 es la versión a la que normalmente la gente se refiere cuando habla de "es SQL estandar". Se da una descripción detallada de SQL/92 en Date and Darwen, 1997. En el momento de escribir este documento, se está desarrollando un nuevo estandar denominado informalmente como SQL3. Se plantea hacer de SQL un lenguaje de alcance completo (e Turing-complete language), es decir , todas las queries computables, (por ejemplo queries recursivas) serán posibles. Esta es una tarea muy compleja y por ello no se debe esperar la finalización del nuevo estandar antes de 1999.

El Modelo de Datos Relacional

Como mencionamos antes, SQL es un lenguaje relacional. Esto quiere decir que se basa en el modelo de datos relacional publicado inicialmente por E.F.Codd en 1970. Daremos una descripción formal del modelo de datos relacional más tarde (en Formalidades del Modelo Relacional de Datos), pero primero queremos dar una mirada desde un punto de vista más intuitivo.

Una base de datos relacional es una base de datos que se percibe por los usuarios como una colección de tablas (y nada más que tablas). Una tabla consiste en filas y columnas, en l asuq ecada fila representa un registro, y cada columna representa un atributo del registro contenido en la tabla. La Base de Datos de Proveedores y Artículos muestra un ejemplo de base de datos consistente en tres tablas.

Example 2-1. La Base de Datos de Proveedores y Artículos

   SUPPLIER   SNO |  SNAME  |  CITY      SELLS   SNO | PNO
             -----+---------+--------           -----+-----
               1  |  Smith  | London              1  |  1
               2  |  Jones  | Paris               1  |  2
               3  |  Adams  | Vienna              2  |  4
               4  |  Blake  | Rome                3  |  1
                                                  3  |  3
                                                  4  |  2
   PART       PNO |  PNAME      |  PRICE          4  |  3 
             -----+-------------+---------        4  |  4
               1  |  Tornillos  |   10
               2  |  Tuercas    |    8
               3  |  Cerrojos   |   15
               4  |  Levas      |   25
     

Las tablas PART y SUPPLIER se pueden ver como entidades y SELLS se puede ver como una relación entre un artículo particular y un proveedor particular.

Como veremos más tarde, SQL opera en las tablas tal como han sido definidas, pero antes de ello estudiaremos la teoría del modelo relacional.