Download propuesta de un modelo de datos sql multiplataforma basado en el

Document related concepts

SQL wikipedia , lookup

Base de datos relacional wikipedia , lookup

Lenguaje de definición de datos wikipedia , lookup

Open Database Connectivity wikipedia , lookup

SQL:1999 wikipedia , lookup

Transcript
INSTITUTO POLITÉCNICO NACIONAL
UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERÍA Y CIENCIAS
SOCIALES Y ADMINISTRATIVAS
SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN
MAESTRIA EN CIENCIAS CON ESPECIALIDAD EN INFORMÁTICA
“PROPUESTA DE UN MODELO DE DATOS SQL MULTIPLATAFORMA BASADO EN
EL ESTANDAR SQL: 2003”
T E
S
I
S
QUE PARA OBTENER EL GRADO DE MAESTRO EN
CIENCIAS CON ESPECIALIDAD EN INFORMÁTICA
PRESENTA:
FERNANDO RENÉ SÁNCHEZ SERRANO
DIRECTOR: DR. JAVIER GARCÍA GARCÍA
MÉXICO, D.F.
2010
2
3
Agradecimientos
Al Dr. Javier García por el interés mostrado en la realización del presente trabajo.
A los profesores del comité tutorial por su tiempo dedicado para llegar a la culminación del
presente trabajo.
A todos los profesores de la sección de posgrado de la UPIICSA por su enseñanza.
Al Instituto Politécnico Nacional por ser el marco perfecto para la enseñanza y el
aprendizaje.
4
A mis padres, por la semilla sembrada.
A Ana Lilia, por el amor renacido.
A René, por ser la luz que alumbra mi vida.
5
Resumen
El papel de las bases de datos en el área de la computación y las tecnologías de
información ha sido muy importante y trascendente desde los primeros modelos
presentados en los años 70´s; uno de estos fue modelo relacional y fue presentado por E.
Codd. Este modelo fue rápidamente aceptado e implementado por varias empresas
desarrolladoras de software por la consistencia y calidad del modelo. A partir de éste han
surgido varios sistemas manejadores de base de datos (SMDB) que hoy día siguen
vigentes. Las bases de datos son una parte crucial en la mayoría de los sistemas de
información de las organizaciones.
Posterior a la salida de este tipo de sistemas surgió la necesidad de desarrollar algún
lenguaje que permitiera administrar y manipular las funciones de los sistemas
manejadores de base datos así como los datos mismos que almacenaba. De aquí surgió
un lenguaje de consultas estructuradas denominado SQL (Structured Query Language).
Este lenguaje fue también rápidamente adoptado por la mayoría de los sistemas
manejadores debido a su fácil uso y la fuerte adaptación que guardaba con el modelo
relacional.
Dada la gran aceptación que tuvo el lenguaje por parte de los fabricantes y al mismo tipo
de los desarrolladores, éste ha crecido enormemente y se ha convertido en el lenguaje
“de facto” de los sistemas relacionales de base de datos.
Debido a esto, surgieron muchas versiones e implementaciones del mismo, lo cual llevo a
la necesidad de desarrollar un estándar que unificara estas versiones y ampliará el nivel
de compatibilidad entre los sistemas que lo implementaban.
A partir de esto se han desarrollado varios estándares sobre el lenguaje SQL; estos han
sido desarrollados por institutos de estandarización como ANSI e ISO. Existen tres
principales estándares: SQL-92, SQL-99 y SQL:2003.
A pesar que los fabricantes han hecho un esfuerzo por alcanzar altos niveles de
cumplimiento al estándar, todavía no se ha alcanzado el punto en el que pueda existir una
compatibilidad abierta y transparente entre los sistemas que adoptan e implementan el
estándar.
El cumplimiento que dan los sistemas manejadores al estándar SQL muchas veces está
centrado en cumplir con las funciones y características que dicta el estándar, y no a que
estas funciones o características se apeguen según las reglas que establece y tampoco
que éstas sean compatibles entre otros sistemas.
El presente trabajo investiga sobre el nivel de cumplimiento que dan algunos manejadores
al estándar sobre algunas instrucciones de SQL definidas en la versión SQL:2003, y la
compatibilidad que puede existir al trasladarse dichas instrucciones en las diferentes
implementaciones de los manejadores.
6
Abstract
The role of databases in computing systems and applications is of great significance since
most of them need to store data continuously. The systems in charge of managing such
sets of data are called Database Managing Systems (DBMS). Most of these database
managing systems have implemented the relational model, which was presented by E.
Codd (Codd 1970) in the nineteen seventies and was created as a new data storage
model based on relations. This model was adopted by many software developers
companies due to the completeness and quality of the model. There are many database
systems based on this model that are still present in today´s database products.
Just after the presentation of this model, there came up the necessity of developing a
language that allows developers manage and manipulating the functions and data stored
in database systems. As a result of this, there was a development of a structured query
language called “SQL”. This language was rapid adopted because of its ease of use and
the strong compliance to relational model.
SQL has been adopted by all relational database systems and has become “de facto”
language of databases.
The standardization process of SQL was first developed by ANSI (American National
Standards Institute); the first standard was SQL-92, followed by SQL-99 and extended to
SQL:2003.
Although the effort of many developers to fulfill the standard, there still been incompatibility
among database systems which implement the standard. SQL sentences written in any
compliant SQL system cannot been portable to other system without modification.
The compliance of database systems to SQL is focus in covering such characteristics
promoted by the standard and not in generating portable sentences among database
systems which implement such a standard.
The purpose of this investigation is to evaluate the compliance level of database system to
SQL:2003 and establish some factors to write portable SQL sentences among different
database systems.
7
Contenido
INTRODUCCIÓN ................................................................................................................................. 10
Trabajo relacionado ..................................................................................................................... 13
Objetivos y Motivación ................................................................................................................ 14
FUNDAMENTOS DE BASE DE DATOS Y LENGUAJES RELACIONALES. ................................................ 16
Conceptos .................................................................................................................................... 16
Lenguaje de Manipulación de Datos (DML) ................................................................................. 17
Lenguaje de Definición de Datos (DDL)........................................................................................ 17
Operadores relacionales .............................................................................................................. 18
ESTADO ACTUAL DE LOS SISTEMAS MANEJADORES DE BASE DE DATOS (SMBD). ........................... 23
EL LENGUAJE SQL “STRUCTURED QUERY LANGUAGE” (LENGUAJE DE CONSULTAS
ESTRUCTURADAS). ............................................................................................................................ 28
ALGUNAS IMPLEMENTACIONES DEL LENGUAJE SQL. ....................................................................... 35
Oracle ........................................................................................................................................... 35
SQL SERVER .................................................................................................................................. 38
POSTGRESQL ................................................................................................................................ 42
MYSQL .......................................................................................................................................... 45
Resumen de características generales. ........................................................................................ 47
EL ESTÁNDAR SQL:2003 .................................................................................................................... 50
CUMPLIMIENTO DE LOS SMBD AL ESTÁNDAR SQL:2003 .................................................................. 55
ORACLE ......................................................................................................................................... 56
SQL SERVER .................................................................................................................................. 57
POSTGRESQL ................................................................................................................................ 57
MYSQL .......................................................................................................................................... 58
Tabla resumen.............................................................................................................................. 59
Tipos de datos .............................................................................................................................. 59
Otros aspectos de cumplimiento al estándar SQL:2003 .............................................................. 61
Aspectos generales sobre el cumplimiento de SQL SERVER al estándar SQL:2003. ..................... 64
EXPERIMENTACIÓN ........................................................................................................................... 69
Catálogos (Catalogs) ..................................................................................................................... 71
Esquemas (Schemas).................................................................................................................... 73
8
Tablas (Tables).............................................................................................................................. 76
Tipos De Datos (Data Types) ........................................................................................................ 80
Tipos numéricos. .......................................................................................................................... 82
Proyección .................................................................................................................................. 104
Eliminación ................................................................................................................................. 107
Inserción ..................................................................................................................................... 110
Actualización. ............................................................................................................................. 113
Ordenación................................................................................................................................. 115
CONCLUSIONES. .............................................................................................................................. 119
REFERENCIAS ................................................................................................................................... 123
9
Índice de tablas
Tabla 1 Evolución de SQL .................................................................................................................. 32
Tabla 2 Estructura del Estándar SQL ................................................................................................. 51
Tabla 3 Características de Oracle ...................................................................................................... 56
Tabla 4 Características de SQL Server ............................................................................................... 57
Tabla 5 Características de POSTGRESQL ........................................................................................... 58
Tabla 6 Características de MYSQL ..................................................................................................... 59
Tabla 7 Tabla Resumen de características ........................................................................................ 59
Tabla 8 Tipos de datos....................................................................................................................... 60
Tabla 9 Versiones SMBD en la experimentación............................................................................... 70
Tabla 10 Plataforma de experimentación ......................................................................................... 70
Tabla 11 Tipos de datos Fecha y Tiempo .......................................................................................... 95
Índice de figuras
Figura 1 Operadores relacionales ..................................................................................................... 21
Figura 2 Tabla Características............................................................................................................ 49
Figura 3 CREATE DATABASE-ORACLE ................................................................................................ 71
Figura 4 CREATE DATABASE-SQLSERVER........................................................................................... 72
Figura 5 CREATE DATABASE POSTGRESQL ........................................................................................ 72
Figura 6 CREATE DATABASE-MYSQL.................................................................................................. 73
Figura 7 CREATE SCHEMA-ORACLE ................................................................................................... 75
Figura 8 CREATE SCHEMA - SQLSERVER ............................................................................................ 75
Figura 9 CREATE SCHEMA POSTGRESQL ........................................................................................... 76
Figura 10 CREATE SCHEMA MYSQL ................................................................................................... 76
Figura 11 CREATE TABLE - ORACLE.................................................................................................... 78
Figura 12 CREATE TABLE-SQLSERVER ................................................................................................ 79
Figura 13 CREATE TABLE-POSTGRESQL ............................................................................................. 79
Figura 14 CREATE TABLE-MYSQL ....................................................................................................... 80
Figura 15 TIPO NUMERICO-ORACLE .................................................................................................. 82
Figura 16 TIPO NUMERICO-SQLSERVER ............................................................................................ 83
Figura 17 TIPO NUMERICO-POSTGRESQL ......................................................................................... 84
Figura 18 TIPO NUMERICO-MYSQL ................................................................................................... 84
Figura 19 CONVERSION TIPO NUMERICO SQLSERVER ...................................................................... 85
Figura 20 CONVERSION SQL SERVER ................................................................................................. 85
Figura 21 CONVERSION TIPO NUMERICO-MYSQL ............................................................................ 86
Figura 22 TIPO ESTANDAR NUMERICO-ORACLE ............................................................................... 87
Figura 23 TIPO ESTANDAR NUMERICO-SQLSERVER .......................................................................... 88
Figura 24 TIPO ESTANDAR NUMERICO-SQLSERVER .......................................................................... 88
10
Figura 25 TIPO ESTANDAR NUMERICO-MYSQL ................................................................................. 89
Figura 26 TIPO CADENA-ORACLE....................................................................................................... 90
Figura 27 TIPO CADENA-SQLSERVER ................................................................................................. 91
Figura 28 TIPO CADENA-POSTGRESQL .............................................................................................. 91
Figura 29 TIPO CADENA-MYSQL ........................................................................................................ 92
Figura 30 CHARACTER LARGE OBJECT-MYSQL .................................................................................. 93
Figura 31 CHARACTER LARGE OBJECT-SQLSERVER ........................................................................... 93
Figura 32 CHARACTER LARGE OBJECT-ORACLE ................................................................................. 94
Figura 33 TIPO FECHA/TIEMPO-ORACLE ........................................................................................... 96
Figura 34 FECHA/TIEMPO-SQLSERVER .............................................................................................. 96
Figura 35 FECHA/TIEMPO-SQLSERVER .............................................................................................. 97
Figura 36 FECHA/TIEMPO-MYSQL ..................................................................................................... 98
Figura 37 ZONA HORARIA-MYSQL ..................................................................................................... 99
Figura 38 ZONA HORARIA-SQLSERVER .............................................................................................. 99
Figura 39 FORMATO FECHA-MYSQL................................................................................................ 100
Figura 40 FORMATO FECHA-SQLSERVER......................................................................................... 101
Figura 41 FORMATO FECHA-POSTGRESQL ...................................................................................... 101
Figura 42 TIPO BOOLEANO-ORACLE................................................................................................ 102
Figura 43 TIPO BOOLEANO-SQLSERVER .......................................................................................... 103
Figura 44 TIPO BOOLEANO-POSTGRESQL ....................................................................................... 103
Figura 45 TIPO BOOLEANO-MYSQL ................................................................................................. 104
Figura 46 PROYECCION-ORACLE...................................................................................................... 105
Figura 47 PROYECCION-SQLSERVER ................................................................................................ 106
Figura 48 PROYECCION-POSGRESQL ............................................................................................... 106
Figura 49 PROYECCION-MYSQL ....................................................................................................... 107
Figura 50 ELIMINACION-ORACLE..................................................................................................... 108
Figura 51 ELIMINACION-SQLSERVER ............................................................................................... 108
Figura 52 ELIMINACION-POSTGRESQL ............................................................................................ 109
Figura 53 ELIMINACION-MYSQL ...................................................................................................... 109
Figura 54 INSERCION-ORACLE ......................................................................................................... 111
Figura 55 INSERCION-SQLSERVER ................................................................................................... 111
Figura 56 INSERCION-POSTGRESQL ................................................................................................ 112
Figura 57 INSERCION-MYSQL .......................................................................................................... 112
Figura 58 ACTUALIZACION-ORACLE ................................................................................................ 113
Figura 59 ACTUALIZACION-SQLSERVER........................................................................................... 113
Figura 60 ACTUALIZACION-POSTGRESQL ........................................................................................ 114
Figura 61 ACTUALIZACION-MYSQL.................................................................................................. 114
Figura 62 ORDENACION-ORACLE .................................................................................................... 116
Figura 63 ORDENACION-SQLSERVER ............................................................................................... 116
Figura 64 ORDENACION-POSTGRESQL ............................................................................................ 117
Figura 65 ORDENACION-MYSQL...................................................................................................... 118
11
INTRODUCCIÓN
El papel de las bases de datos en los sistemas y aplicaciones de cómputo es de gran
importancia ya que la mayoría de estos sistemas tienen alguna necesidad de almacenar
datos de manera persistente. Los sistemas encargados de la administración de esos
conjuntos de datos son llamados sistemas manejadores de base de datos (SMBD). La
mayoría de estos sistemas manejadores de base de datos han implementado el modelo
relacional, este modelo relacional fue presentado por E. Codd (Codd 1970) en los años
setentas y surgió como una nuevo modelo de almacenamiento de datos basado en
relaciones. La implementación que han hecho los sistemas manejadores varía de un
sistema a otro, ofreciendo características diferenciales que les permiten penetrar
diferentes nichos de mercado. Hoy en día existen un gran número de productos en el
mercado de base de datos.
Un sistema manejador de base de datos (SMBD) consiste en una colección de datos
interrelacionados y un conjunto de programas para acceder a dichos datos. La colección
de datos, normalmente denominada base de datos, contiene información relevante para
una empresa u organización. El objetivo principal de un SMBD es proporcionar una forma
de almacenar y recuperar la información de una base de datos de manera que sea tanto
práctica como eficiente (Silberschatz, Korth et al. 2006). La base de datos la podemos
entender como un conjunto de datos perteneciente a un mismo contexto o dominio
almacenados en forma sistemática para su uso.
Todos los sistemas manejadores de base de datos actuales siguen en alguna medida el
modelo relacional presentado en 1970 por E. Codd (Codd 1970). A pesar que el modelo
ha sido utilizado desde entonces, el desarrollo de nuevas tecnologías, la programación
orientada a objetos, sistemas en tiempo real, etc. han generado el surgimiento de otros
tipos de sistemas manejadores de base de datos como por ejemplo los que soportan
bases de datos activas (Rabuzin, Malkovic et al. 2007).
Paralelamente al modelo presentado por Codd, se desarrollo un lenguaje estructurado
basado en el algebra relacional que ejecutaba las operaciones relacionales del modelo,
este lenguaje fue llamado SEQUEL (Chamberlin, D. et al. 1974). Este lenguaje también
fue adoptado por la mayoría de los SMBD por la facilidad de uso y al apego al modelo y
hoy en día se ha convertido en el lenguaje “de facto” de los Sistemas Manejadores de
Base de Datos Relacionales.
Dada la popularidad del lenguaje SQL, se ha desarrollado el estándar que describe al
lenguaje. Dicho estándar establece las pautas para su implementación en los
manejadores de base de datos. Los fabricantes de SMBD han tratado de incorporar
funciones y características de dicho estándar en sus implementaciones y también han
desarrollado las propias o nativas alrededor de su manejador. Pese al cumplimiento al
estándar por parte de los SMBD existen lagunas que no permiten hacer que un modelo de
12
datos basado en el estándar pueda ser migrado a lo largo de dichos manejadores que
dicen cumplir el estándar.
El cumplimiento que los SMBD dan al estándar está orientado a ser tomado como una
guía en el diseño y construcción de dichos sistemas; éstos siguen normalmente las reglas
léxicas y sintácticas que dicta el estándar y son utilizadas en el diseño del lenguaje propio
del manejador.
El lenguaje ha pasado por un largo proceso de estandarización y está plasmado en
documentos de estándares como ISO y ANSI.
A pesar de la existencia de este estándar, cada manejador lo ha implementado de
manera diferente y por esta razón existen diferencias sintácticas o semánticas en la
escritura de instrucciones SQL que no son compatibles de un sistema a otro.
El presente trabajo realiza un estudio para identificar las diferencias en la implementación
de dichas instrucciones en cada sistema manejador propuesto y propone un esquema que
si pueda ser compatible en los sistemas manejadores en cuestión.
Trabajo relacionado
El trabajo que se ha realizado alrededor de este tema es muy amplío y está centrado en
varios aspectos; uno de ellos es el propio proceso de estandarización que ha que se le ha
dado al lenguaje por parte de dos organizaciones de estándares, el American National
Standards Institute (ANSI) y el International Standards Organizations (ISO), las primeras
versiones del estándar fueron desarrolladas por ANSI y posterioremente siguieron
desarrollándose bajo ISO. Otra línea de investigación ha sido referente a medir el nivel de
cumplimiento que logra un sistema manejador de base de datos en relación al estándar;
también encontramos números trabajos que marcan las diferencias que existen en la
implementación que cada sistema realiza del estándar; otro tipo de trabajos están
orientado a la definición de ciertas guías para la escritura de programas basados en SQL
que puedan ser trasladados en diferentes SMBD.
Alejandro Tanasi (Tanasi 2008) realiza una tabla comparativa de los tipos de datos que
soportan los diferentes manejadores de base de datos, esta tabla muestra los tipos de
datos que establece el estándar y el soporte que cada sistema tiene del tipo de dato, con
esta guía podemos ver la compatibilidad que puede existir de un dato por si mismo entre
diferentes sistemas, pero no considera la compatibilidad en la definición y ejecución de
instrucciones SQL que definen estos tipos de datos dentro que cada sistema manejador
con lo que en varios casos estas instrucciones no pueden compatibles de un sistema a
otro. En contraste a esta investigación, el presente trabajo muestra las diferencias en la
escritura de dichas instrucciones alrededor de los sistemas en cuestión.
IBM publicó un libro (IBM 2002) donde menciona algunas mejores prácticas para la
escritura de instrucciones SQL que puedan ser compatibles entre otros sistemas
manejadores de base datos, este trabajo está centrado en su propio sistema DB2, la
13
compatibilidad que indica es a partir de este sistema y no en relación a un estándar de
SQL, a diferencia de este trabajo presento un estudio de compatibilidad entre sistemas
manejadores partiendo del estándar SQL:2003 y no de un sistema en particular.
Peter Gulutzan (Gulutzan and Pelzer 2003) realizó un estudio de desempeño en la
ejecución de instrucciones SQL basadas en el estándar sobre diferentes sistemas
manejadores de base de datos que nos permiten visualizar el impacto que puede tener
ejecutar instrucciones basadas en el estándar con instrucciones o funciones nativas de
cada manejador, este permite considerar los aspectos para la toma de decisiones sobre la
implementación de SQL nativo o estándar bajo ciertos tipos de aplicaciones.
El proyecto AstroGrid (AstroGrid 2009) realizó un estudio comparativo de diferentes
sistemas manejadores donde mencionan algunas características generales de cada
sistema, estas características refieren información acerca de las plataformas,
licenciamiento, desempeño, tipos de datos, escalabilidad, entre otros. La compatibilidad
que sugiere este trabajo está más relacionada a las plataformas y aspectos de hardware
que tiene cada implementación.
Un trabajo de maestría en la universidad VIT de la India (KALIAPPAN and WLOKA 2007)
presenta una investigación sobre el cumplimiento que dan ciertos manejadores al
estándar SQL:2003, se concentra en la parte de “SQL/Schemata” definido en el estándar,
este trabajo muestra características específicas del estándar ejecutadas en los diferentes
sistemas y mide el nivel cumplimiento que tiene cada sistema; con esta información
proporciona un resumen indicando algunos porcentajes que indican el nivel de
cumplimiento que tiene cada sistema en relación al estándar SQL:2003; en contra parte al
presente trabajo encontramos nuevamente que esta información no proporciona
elementos que permitan definir y ejecutar dichas instrucciones de manera transparente en
diferentes sistemas de manera compatible.
Bristle Software (Software 2009) desarrolló un contenido que sugiere algunas técnicas y
puntos importantes para la escritura de instrucciones SQL que puedan ser compatibles en
diferentes sistemas manejadores, en contraste, el presente trabajo incluye la
experimentación sobre la ejecución de instrucciones SQL marcando la incompatibilidad y
sugiriendo algunas alternativas para cumplir con el estándar y permitir su migración hacia
otros sistemas.
Objetivos y Motivación
La posibilidad de almacenar datos de manera persistente a través de medios electrónicos
es una de las razones que han impulsado el desarrollo de sistemas y aplicaciones en gran
escala, esta necesidad llevo al desarrollo de modelos para el almacenamiento y
recuperación de datos y es lo que hoy en día denominados “base de datos”. Las bases
tienen un papel muy importante en el desarrollo de sistemas y aplicaciones ya que la
mayoría de estos sistemas requieren almacenar datos para su operación.
14
Uno de los modelos más importantes es el modelo relacional presentado por E. Codd en
los años 70, y hoy después de más de 30 años sigue vigente en la mayoría de los
sistemas manejadores de base de datos del mercado. Este es un modelo de datos
establece todos los fundamentos que un sistema relacional de base datos debe seguir o
contener para operar como un sistema relacional. El seguimiento que los sistemas que
han implementado el modelo ha sido criticado ya que actualmente no existe un sistema
que lo cumpla de manera completa, sin embargo las implementaciones que se han
desarrollado alrededor de este modelo ha resultado en un mercado extenso y valuado en
billones de dólares.
Otro aspecto fundamental en la existencia de los sistemas manejadores ha sido el
lenguaje que han implementado para la definición y manipulación de datos. De manera
paralela a la presentación del modelo relacional fue presentado también un lenguaje que
permitía manipular a través de instrucciones y comandos las funciones del modelo, este
lenguaje fue “SEQUEL” hoy en día llamado “SQL”. La penetración y aceptación que tuvo
este lenguaje lo ha llevado a ser considerado el lenguaje “de facto” de los sistemas
manejadores de base de datos; mucho del éxito que han tenidos estos sistemas es por el
lenguaje que han implementado.
Este lenguaje ha sido producto de un largo proceso de estandarización, y ha producido
una serie estándares. Los sistemas que han implementado dicho estándar no han logrado
hacer una plataforma compatible entre los propios sistemas que lo implementa. De aquí
que es importante resaltar las diferencias que pueden existir entre las diferentes
implementaciones.
OBJETIVO
El objetivo es hacer un estudio sobre el estándar SQL:2003, las implementaciones que lo
han adoptado y establecer el nivel de compatibilidad que existe entre ellos; también el
recolectar información relevante para desarrolladores interesados en la migración de
esquemas de datos entre diferentes manejadores y para nuevos desarrollos que
requieran asegurar un nivel mínimo de compatibilidad al ser implementado con diferentes
sistemas manejadores de base de datos. Por otro lado, dadas las diferencias
encontradas, establecer las alternativas que pudiesen existir para desarrollar esquemas
de datos compatibles así como establecer algunos factores importantes para ayudar en la
toma de decisiones sobre la implementación de un sistema manejador de base de datos.
15
FUNDAMENTOS DE BASE DE DATOS Y LENGUAJES
RELACIONALES.
En este apartado se muestran algunos conceptos fundamentales alrededor del modelo
relacional de base de datos, las instrucciones básicas del sublenguaje de definición y
manipulación de datos y algunos conceptos de los operadores relacionales.
Conceptos
Un sistema manejador de base de datos por sus siglas SMBD, consiste en una colección
de datos interrelacionados y un conjunto de programas para acceder dichos datos. Es un
conjunto de programas especializados para describir, proteger, almacenar y acceder a
una base de datos (Silberschatz, Korth et al. 2006).
Una base de datos puede ser vista como un conjunto de datos que pertenecer a un
mismo contexto y son almacenados sistemáticamente para su uso posterior.
Un sistema relacional de base de datos está basado en el modelo relacional y usan un
conjunto de tablas para representar tanto los datos como las relaciones entre ellos
(Silberschatz, Korth et al. 2006).
El modelo relacional está basado en un modelo matemático que abarca la teoría de dos
ramas: la teoría de conjuntos y la lógica de predicados de primer orden (Zavala 2009).
Matemáticamente, una relación se puede definir como un subconjunto del producto
cartesiana de una lista de dominios (D1, D2, …Dn), donde cada elemento de la relación,
Tupla, es una serie de n valores.
Una base de datos relacional consiste en un conjunto de tablas, a cada una de las cuales
se le asigna un nombre exclusivo. Cada fila de la tabla representa una tupla y cada
atributo de la tupla es una columna con un valor de un conjunto de posibles, dominio.
El modelo relacional trata tres aspectos fundamentales de los datos: estructura, integridad
y manipulación (Zavala 2009).
El modelo introduce algunos conceptos alrededor del concepto:
Relación: Representa una tabla dentro de la base de datos.
Tupla: Es una fila dentro de una tabla.
Atributo: Es una propiedad o columna de la tabla.
Cardinalidad: Es el número de filas o tuplas que contiene una tabla.
Grado: Es el número de atributos que contiene una tabla.
16
Clave: Es un atributo o conjunto de atributos que identifican de manera única una tupla
dentro de una relación.
Dominio: Es el conjunto de valore posibles que puede tomar un atributo.
Los sistemas manejadores de base de datos proporcionan un lenguaje de definición de
datos para especificar el esquema de la base de datos y un lenguaje de manipulación de
datos para expresar las consultas y las modificaciones de la base de datos (Silberschatz,
Korth et al. 2006). Actualmente existe un lenguaje denominado SQL que ha sido
implementado por la mayoría de los sistemas manejadores de base de datos; este
lenguaje está compuesto de manera general en 3 subconjuntos principales:



DML (Data Manipulation Language). Lenguaje de Manipulación de Datos.
DDL (Data Definition Language). Lenguaje de Definición de Datos.
DCL (Data Control Language). Lenguaje de Control de Datos.
Lenguaje de Manipulación de Datos (DML)
Un lenguaje de manipulación de datos es un lenguaje que permite a los usuarios tener
acceso a los datos de acuerdo a la estructura de los mismos y a su manipulación
(Silberschatz, Korth et al. 2006).
Algunas de las acciones que permite la utilización de este lenguaje son:




Recuperación de información almacenada.
Inserción de nuevos datos en las relaciones de la base de datos.
Eliminación de información de la base de datos.
Modificación de datos de la base de datos.
Este lenguaje es del tipo declarativo ya que permite especificar qué datos serán
manipulados sin la necesidad de establecer cómo se ejecutara dicha acción.
Lenguaje de Definición de Datos (DDL).
La estructura que guarda una base de datos se denomina esquema de datos, este
esquema declara la estructura lógica que tendrán los datos dentro de las relaciones y las
restricciones que aseguran la integridad de los mismos (Silberschatz, Korth et al. 2006).
Las instrucciones que permiten la definición de estos esquemas están integradas en el
lenguaje de definición de datos (DDL).
17
Este lenguaje contiene instrucciones que permite crear, modificar y eliminar relaciones;
provee también instrucciones para definir las restricciones de integridad y la definición de
llaves que aseguren que no exista duplicidad en los datos.
Operadores relacionales
Los operadores básicos permiten a cualquier usuario obtener información de cualquier
parte de la base de datos en una forma flexible y poderosa, sin tener que atender detalles
de programación. La estructura de estos operadores están basados en la lógica de
predicados de primer orden, ésta lógica de predicados fue adoptada por el modelo como
el estándar. Los operadores no están contemplados para ser parte del sistema
manejadores de base de datos, sino para estar integrados en un lenguaje externo al
sistema (CODD 1990).
Los operadores están divididos básicamente en dos, los que operan sobre las relaciones
mismas, y aquellos que permiten manipular los datos contenidos en las tablas.
Operadores básicos (Codd 1990):









Proyección (projection).
Selección theta (theta-selection).
Unión relacional (relational union).
Intersección relacional (relational intersection).
Diferencia relacional (relational difference).
Producto cartesiano (cartesian product).
Reunión theta (theta-join).
Reunión natural (natural join).
División relacional (relational division).
La proyección y la selección aplican sobre un solo operador, el resto de los operadores
utiliza dos operaciones (relaciones).
Proyección: El operador proyección produce una nueva relación de R que contiene solo
algunas columnas o atributos de R.
18
Selección: El operador selección aplicado a una relación R, produce una nueva relación
con un subconjunto de tuplas de R.
Unión: La unión de dos relaciones R y S es el conjunto de tuplas que se encuentran en R
o en S o en ambas.
R y S deben tener el mismo conjunto de atributos y su tipo debe ser también el mismo.
Los atributos de R y S deben aparecer en el mismo orden.
Intersección: La intersección de dos relaciones R y S es el conjunto de tuplas que están
en ambas relaciones R y S.
Las mismas condiciones que tiene la unión se cumple en la intersección.
Diferencia: La diferencia de dos relaciones R y S es el conjunto de tuplas que están en R
pero no están en S.
Las mismas condiciones que tiene la unión se cumple en la diferencia.
19
Producto cartesiano: El producto cartesiano de dos relaciones R y S es el conjunto de
pares conformado por cada tupla de R con cada tupla de S.
Reunión theta: La reunión theta de dos relaciones R y S es el conjunto de tuplas en el
producto cartesiano de R y S que satisfacen alguna condición C.
S
Reunión natural. La reunión natura de dos relaciones R y S es el conjunto de de pares de
tuplas, una de R y la otra de S, que coincidan en cualquier atributo común en las
relaciones R y S.
La relación resultante contiene la unión de los atributos de R y S.
Dadas las relaciones R(A,B,C) y S(B,C,D)
En la siguiente figura podemos resumir los operadores básicos del modelo relacional
(Murali 2009).
20
Figura 1 Operadores relacionales
Operadores de manipulación:





Inserción (insert).
Actualización (update).
Actualización de llave primaria con actualización es cascada (primary key update).
Eliminación (delete).
Eliminación en cascada (delete with cascade).
Estos operadores se ejecutan sobre varios registros o tuplas a la vez, puede ser, cero,
uno o más.
Inserción: El operador de inserción permite una colección de uno o más tuplas ser
insertadas dentro de una relación. En esta operación el usuario no tiene ningún control de
la forma en que la inserción se realiza.
En esta operación no se admiten tuplas duplicadas, si existen duplicados se eliminaran y
solo se insertara una tupla
.
21
Actualización: Esta operación permite modificar los valores de uno o más atributos de
alguna o algunas tuplas ya existentes en la relación. Esta operación debe verificar la
integridad referencial y actualizar los índices asociados a la relación.
Actualización de llave primaria: Cuando el valor del atributo corresponde a la lista de
atributos que definen la llave primaria de la relación, la actualización se debe realizar para
toda llave foránea donde esté implicado el atributo a modificar. Esta actualización se debe
llevar en cascada hacia las otras relaciones.
Eliminación: Este operador permite eliminar o borrar múltiples tuplas o renglones de una
relación: “múltiple” incluye los casos especiales de cero y uno.
Eliminación en cascada: Al igual que la actualización en cascada, cuando la llave primaria
de la tupla a eliminar esta presente como llave foránea e alguna otra relación, éstas
deben ser eliminadas también siempre que se cumplan todas las reglas de integridad
asociadas a las relaciones.
Los operadores de actualización y eliminación permiten incorporar el operador de
selección para identificar las tuplas en las que aplicara el operador.
22
ESTADO ACTUAL DE LOS SISTEMAS MANEJADORES DE BASE
DE DATOS (SMBD).
Los sistemas manejadores de bases de datos surgen en los años 70’s, cuya funcionalidad
principal es el proceso de datos de negocio centralizada bajo un concepto de operaciones
en línea. En los últimos 25 años la mayoría de los sistemas manejadores de bases de
datos han seguido este paradigma. Este paradigma ha dejado de estar vigente ya que
han surgido problemas sobre dominios específicos en las que los sistemas actuales ya no
satisfacen de forma integral las soluciones, esto generará la creación de una colección de
sistemas de bases de datos independientes y heterogéneos, donde cada uno contará con
características orientadas a satisfacer las necesidades de ciertos dominios. Entre los
dominios que ya no son manejados de forma completa por los sistemas actuales
podemos encontrar: “dataware housing”,
“stream processsing”, “sensor-based
applications”, “text search” (Stonebraker and Çetintemel 2006).
Hoy en día existe una gran variedad de dispositivos de cómputo que ejecutan una gama
de nuevas aplicaciones y servicios que en el pasado era difícil pensarlas, muchas de
estas se encuentran en el cómputo móvil tales como el envío de mensajes de texto y
multimedia, búsquedas de localidades físicas como el caso de GPS, juegos con motores
de búsqueda y almacenaje de datos distribuidos entre otros (SELTZER 2005).
Estas nuevas aplicaciones en conjunto con los dispositivos demandan nuevos esquemas
de almacenamiento y recuperación de datos, donde estas funciones varían de una
aplicación a otra.
Estas funciones de almacenamiento y recuperación de datos sugieren evidentemente el
uso de bases de datos, en esta caso relacionales. Las bases de datos relaciones han
tenido un enorme éxito en las últimas tres décadas y SQL ha sido el lenguaje “de facto”
para su definición y manipulación de las mismas.
Mucho del éxito de los manejadores de base de datos relacionales se debe a dos
aspectos fundamentales; el primero refiere al hecho de que en el pasado los
programadores eran responsables de dotar de funciones para el almacenamiento y
recuperación de datos atendiendo los factores involucrados en la organización física y
lógica de dichas funciones. Estas funciones eran programadas en cada aplicación, esto
consumía una gran cantidad de tiempo y focalizaba el esfuerzo de los programadores en
aspectos físicos de almacenamiento y recuperación más que crear vistas lógicas de los
datos que apoyaran los objetivos reales de las aplicaciones, así, el uso de las bases de
datos relacionales permitió al programador encargarse de la parte lógica de la aplicación
dejando el resto del trabajo al manejador de base datos; el segundo aspecto
fundamental es que dichos manejadores incorporan el uso de un lenguaje declarativo que
describe los datos en consultas específicas (querys) (SELTZER 2005).
De aquí que las grandes organizaciones que manejaban un gran volumen de datos
adoptarán rápidamente este tipo de sistemas y con esto creció de igual forma la oferta de
estos sistemas en el mercado donde los fabricantes agregaban funcionalidad que les
23
diera cierta diferenciación en el nicho de mercado que atacaban; este hecho generó que
los sistemas manejadores contaran con cada vez mas funciones propietarias que hacían
de ellos sistemas enormes y robustos (SELTZER 2005).
Al paso de las últimas tres décadas es evidente que el modelo de los manejadores de
base de datos actuales se ha vuelto complejo y las tareas de configuración y
administración se han vuelto esenciales para operarlas.
Ante esta situación han surgido numerosos estudios y propuestas que dejan ver que la
arquitectura convencional de manejadores actuales se han vuelto inapropiados para
resolver problemas de nichos específicos. Esto ha llevado al un replanteamiento total
acerca de los manejadores de base datos, de donde se ha sugerido que dichos
manejadores deben ser modulares y expresadas en bloques de componentes (SELTZER
2005).
A pesar de esto, los fabricantes han seguido manejando la idea que sus productos son la
respuesta a cualquier necesidad de administración de datos. Algunos dominios a los que
los manejadores actuales no satisfacen de manera integral la necesidad de administración
de de datos son: Data Warehousing, XML, WebSearch, Stream processing.
Data warehousing.
Este tipo de aplicaciones utiliza tablas con enorme volumen de datos que en la mayoría
son accedidos en formato de solo lectura, solo algunos campos de estas tablas son
utilizados y existe la necesidad de ordenar y sortear las tablas y consultas en diferentes
formas, estas necesidades y funciones han sido adaptadas en los manejadores actuales
para proveer la funcionalidad.
XML.
Las transacciones en línea que utilizan e intercambian información en documentos
codificados y expresados en XML ha aumentado; la solución actual a este tipo de
aplicaciones involucra tareas de conversión de XML a formatos tradicionales de bases de
datos relaciones y viceversa cuando esta información es solicitada, esta solución es
costosa e ineficiente y deja ver la necesidad de contar con modelos de almacenamiento y
administración de datos nativos a XML.
Web search.
La búsqueda de información en Internet está construida sobre herramientas de
administración de datos y de acceso y recuperación de información. El tipo de datos,
objeto del almacenamiento y las consultas, están expresados en archivos con formato
semiestructurado, tal es el caso de HTML, y no en archivos de texto plano, en donde el
resultado de las consultas genera una lista ordenada de posibles respuestas, esta tarea
requiere del uso de índices altamente paralelizados.
Stream processing.
24
Este tipo de aplicaciones utilizan un intenso flujo de envío y recepción de datos, dicha
actividad se centra más en las tareas de filtrado de estos datos más que en el hecho de la
administración y almacenamiento de los mismos. SQL esta principalmente diseñado para
trabajar sobre fuentes de datos persistentes, el stream processing utiliza muchos tipos de
datos que se almacenan de forma temporal y transitoria, con esto podemos ver que los
sistemas manejadores de base de datos actuales no están equipados con funciones
adecuadas para este tipo de tareas.
Estos tipos de aplicaciones no son soportados de manera integral por los sistemas
relacionales actuales; su uso para satisfacer este tipo de aplicaciones requiere
adecuaciones y un sobre-funcionamiento de los mismos. Dado que no existe una
solución única para atacar dichos problemas se ha planteado la necesidad de construir
aplicaciones flexibles que puedan ser adaptadas a las necesidades de una aplicación en
particular; no se debe seguir viendo a los sistemas relacionales actuales como una
solución única y total a todos los tipos de aplicaciones.
Existen varias formas de proporcionar flexibilidad a las aplicaciones: la primera es un
retorno a las prácticas pasadas en las que cada aplicación tenía que desarrollar su propio
de mecanismo o servicio de almacenamiento de datos, esta solución es la más simple y la
menos práctica que podría funcionar para pequeñas aplicaciones, aunque por otro lado,
sería una solución que debería cubrir los requerimientos de almacenamiento en una forma
completa para el tipo de aplicación en cuestión.
La segunda forma de proporcionar flexibilidad es proporcionando un tablero con un
extenso número de opciones que puedan adaptar las necesidades de una clase de
aplicación, esta es una forma usada en los manejadores actuales tal es caso de las
funciones de datawarehousing y OLTP.
La tercera forma es producir motores de almacenamiento con un alto nivel de
configurabilidad que puedan ser ajustadas a los requerimientos de aplicaciones
individuales. La solución que ha emergido alrededor de este tipo de solución es contar
con un número razonable de sistemas de almacenamiento y administración de datos que
sean útiles a un amplio número de clases de aplicaciones.
Existen dos propiedades fundamentales que las aplicaciones deben poseer para poder
responder a la amplia gama de necesidades que se presentan en las aplicaciones
actuales: modularidad y configurabilidad. Son pocas las aplicaciones que requieren y
utilizan toda la funcionalidad que provee un sistema manejador, por ello las aplicaciones
que no requieren de cierto tipo de funcionalidad no deberían pagar por ello en tamaño,
complejidad o costo. Por lo tanto, un motor flexible debe permitir al desarrollador incluir o
excluir subsistemas dependiendo de la necesidad propia de la aplicación.
Modularidad
Algunos opinan que la arquitectura de las base de datos están en la necesidad de una
revolución semejante a la que sufrió el equipo de hardware tipo RISC. La arquitectura
monolítica de los actuales manejadores de base de datos no son lo suficientemente
25
adaptables a las necesidades actuales de datos, de aquí que se deben desarrollar nuevas
capacidades en la administración de datos basadas en componentes sencillos y
reutilizables.
La idea de contar una arquitectura basada en componentes puede extendida para incluir
otros aspectos del diseño de base de base de datos como son el control de concurrencia,
uso de transacciones, registro y alta disponibilidad (SELTZER 2005).
Algunas aplicaciones son completamente de hilos de ejecución único y no requieren
bloqueo, otras aplicaciones tienen un nivel bajo de concurrencia y deben ser atendidos
por bloque a nivel tabla o bloqueos a nivel aplicación; y finalmente existen aplicaciones
que tienen un alto nivel de concurrencia que requieren un bloqueo con un alto nivel de
granularidad así como múltiples grados de aislamiento. En los sistemas convencionales
de base de datos el bloqueo se asume, pero en esta nueva gama de aplicaciones el
bloqueo es opcional y diferentes componentes pueden ser usados para proveer diferentes
niveles de concurrencia.
Las transacciones dan la ilusión de que un conjunto de operaciones son aplicadas a la
base de datos como una unidad atómica y que una vez aplicada, las operaciones
persistirán aun si el sistema falla. El manejo de transacciones es una de las
características medulares de los sistemas manejadores de base de datos, muchas de los
recursos y funciones de los mismos están enfocados a satisfacer este necesidad, esto a
pesar de que muchas aplicaciones no requieren la integración de transacciones en sus
procesos, en este nuevo esquema basado en componentes, esta característica se vuelve
un componente opcional también.
Muchos de los sistemas que manejan transacciones utilizan algún método de registro
para poder realizar la funciones de recuperación (rollback), esto hace latente la necesidad
de integrar el control de registro de la base de datos como un componente adicional, el
cual sería configurado para satisfacer diferentes tipos y niveles de registro dándole la
posibilidad de decidir al diseñador si dicha función de registro es necesaria.
En algunos casos los datos son críticos o altamente sensibles y cualquier tiempo en el
que no estén disponibles es inaceptable. Muchos sistemas de base de datos proveen
modelos de replicación para satisfacer esta necesidad, a pesar que esta funcionalidad ya
es ofrecida como módulos adicionales no existe la posibilidad de incluir o excluir funciones
o conjunto de funciones del sistema base.
Además de proveer aplicaciones más pequeñas y simples, componentes con interfaces
bien definidas y claras proveen un grado de extensibilidad lo cual no es posible en
sistemas monolíticos.
Configurabilidad
La configurabilidad es otro aspecto importante que debe ser cubierto por el nuevo modelo
basado en componentes. Mientras que el aspecto de modularidad es un mecanismo
arquitectónico, la configuración es un mecanismo en el tiempo de ejecución. En una
26
arquitectura basada en componentes, la configuración está involucrada en la selección
apropiada de componentes. Una misma selección de componentes pueden correr en
diferentes sistemas con diferencias en sus capacidades.
La configurabilidad se refiere al hecho de que tan bien un sistema o aplicación puede ser
ajustado a su ambiente y necesidades.
Los ambientes de hardware introducen variabilidad en velocidad de CPU, tamaño de
memoria, capacidad de almacenamiento persistente entre otros.
Esta variabilidad en la tecnología de almacenamiento persistente coloca nuevas
necesidades en los motores de base de datos que permitan tener un control sobre los
medios de almacenamiento y el esquema de persistencia y recuperación.
A pesar que muchos sistemas son capaces de manejar dispositivos sobre diferentes
plataformas, aún existen muchos propietarios. Los modelos de almacenamiento y
administración de datos debe ser portable a una variedad de plataformas de hardware y
sistemas operativos mediante la utilización de librerías en los códigos fuente (SELTZER
2005).
27
EL LENGUAJE SQL “STRUCTURED QUERY LANGUAGE”
(LENGUAJE DE CONSULTAS ESTRUCTURADAS).
SQL (Structured Query Languaje) es el lenguaje de definición y manipulación de datos ,
es una lenguaje de consulta estructura (Ullman and Widowm 1999), SQL es el lenguaje
más usado en los sistemas manejadores de bases de datos.
SQL es un lenguaje diseñado para la obtención y administración de datos de un Sistema
Relacional de Base de Datos (RDBMS), así como para la creación de bases de datos y
control de acceso a los mismos (Chapple 2007) (IBM 2006).
Las bases de datos relacionales son las más importantes en el mundo de las bases de
datos porque no son muy difíciles de entender y porque además cuentan con un amplío
estándar: SQL(Baroni, Calero et al. 2005).
El éxito de las bases de datos relacionales no es el resultado únicamente de altos niveles
de independencia de datos y modelos de datos más sencillos que en sistemas anteriores,
mucho de este éxito proviene de la estandarización que ofrecen. La aceptación de SQL
estándar permite un alto grado de portabilidad e interoperabilidad entre sistemas (Catell
and Barry 2000).
Después de cuatro décadas de continua maduración, las bases de datos han llegado a
ser un componente crucial de los sistemas de información, jugando un rol estratégico en
el soporte de decisiones. Una muestra de esto es el mercado de las bases de datos
orientadas a objetos y relacionales alcanzaron 13.6 miles de millones de dólares el año
pasado y se espera alcanzar cerca de 20 mil millones para este año 2008 (IDC, 2005)
(Calero, Ruiz et al. 2005). La piedra angular de un sistema manejador de base de datos
es su lenguaje de consulta.
El modelo relacional de base de datos se fue convirtiendo en el estándar de la industria de
las bases de datos a finales de los años 80’s. El problema es que a pesar de que SQL se
convirtió en un lenguaje de base de datos comúnmente reconocido, la diferencias en la
implementación del mismo en los sistemas manejadores de bases de datos crecían y así
un proceso de estandarización se volvía cada vez más necesario (Kriegel and Trukhov
2008).
Alrededor de 1978, el Comité de Lenguajes y Sistemas de Datos (CODASYL por sus
siglas en Inglés) comisionó el desarrollo de un modelo de datos de red como un prototipo
para cualquier implementación futura de una base de datos. Este trabajo continuo inicio a
finales de los años 70’s con el Comité del Lenguaje de Definición de Datos (DDLC). Para
el año 1982, estos esfuerzos culminaron en la creación del Lenguaje de Definición de
Datos (DDL) y el Lenguaje de Manipulación de Datos (DML) como lenguajes estándares.
Y fue así que después de cuatro años se consiguió el primer estándar del ahora llamado
SQL (Kriegel and Trukhov 2008).
28
SQL ha sido el foco de un proceso intenso de estandarización a lo largo de los años
(87,89,92,95,96,99,2003) en donde la mayoría de los desarrolladores y vendedores de
DBMS han estado involucrados de forma activa. La más reciente versión del estándar,
nombrada SQL:2003, presenta algunas mejoras importantes desde su predecesor:
SQL:1999 (Calero, Ruiz et al. 2005).
El estándar de SQL esta desarrollado por dos organizaciones: el American National
Standards Institute (ANSI) y el International Standards Organizations (ISO). El estándar es
fundamentalmente una base sobre la cual está basada la sintaxis y la lógica del lenguaje
SQL dentro de la implementación de un manejador de base de datos (Jones 2005).
El SQL originalmente llamado SEQUEL (Structured English Query Language) fue
implementado en un prototipo de IBM (SEQUEL-XRM), durante la mitad de los 70’s
(Chamberlin, D. et al. 1974). Algunos años más tarde, un subconjunto de este lenguaje
fue implantado en el (System-R) Sistema-R de IBM. En 1979, ORACLE surgió como el
primer Sistema Manejador de Base de Datos (DBMS) comercial basado en SQL, seguido
de muchos otros productos como: SQL/DS, DB2, DB/SQL, SYBASE, INTERBASE,
INFORMIX, UNIFY. Aún cuando estos productos no implementaban SQL como su
sistema de consulta original ofrecían interfaces SQL como INGRES, ADABAS, SUPRA,
IDMS/R) (Calero, Ruiz et al. 2005).
Como resultado de este proceso, SQL llego a ser el estándar de facto, esto gracias a que
el primer SMDB comercial, ORACLE, lo adoptó. Lo anterior fue comentado por el propio
Don Chamberlin en la conferencia de SIGMOD en 2005 (Chamberlin 2005). A finales de
1982, ANSI H2 empezó a estandarizar una versión del modelo relacional de datos a
través de la aportación del lenguaje de IBM, SEQUEL (ANSI, 1982). Renombrado como
SQL H2, el SQL básico se completó y llego a ser un estándar del ANSI en 1986, y pronto
un estándar ISO en 1987 (Calero, Ruiz et al. 2005).
En 1989, la primera versión del estándar SQL fue revisada y un addendum (ISO,1989) la
cual incluía mejoras en aspectos principales de integridad referencial. Así, ANSI creó un
estándar para el SQL incrustado (embedded) (ANSI, 1989) (Calero, Ruiz et al. 2005).
Al inicio de los años 90’s una nueva versión conocida como SQL2 o SQL-92 fue publicada
por ISO (ISO, 1982). Las capacidades semánticas del lenguaje y el manejo de errores
fueron considerablemente mejoradas en esta versión. El estándar fue complementado
algunos años después con el aprobado SQL/CLI (Call-Level Interface) (ISO,1995) y el
SQL/PSM (Persistent Stored Modules) (ISO, 1996). SQL se convirtió en un completo
lenguaje computacional con características como el control de estructuras y el manejo de
excepciones. Durante la segunda mitad de los 90’s SQL fue extendido por la inclusión de
capacidades de orientación a objetos. El estándar resultante fue dividido en varias partes.
Esta versión formalmente conocida como SQL3 y finalmente nombrada SQL:1999,
incorporó características como nuevos tipos de datos, tipos de datos definidos por el
usuario, operadores de consulta recursivos, cursores sensitivos, generalización de tablas
y roles de usuario (Calero, Ruiz et al. 2005).
29
Desde el estándar SQL:1999 se soporta el paradigma de orientación a objetos. Este
nuevo paradigma propone una buena asociación entre el modelo relacional y el modelo
orientado a objetos. Esta formación tiene un modelo de datos robusto y poderosos
mecanismos de optimización de consultas, recuperación, seguridad y concurrencia. En
esta última versión se incluyen mecanismos de orientación a objetos como el
encapsulamiento, generalización, agregación y polimorfismo que permiten representar
elementos más complejos que son requeridos en varios dominios como CAD, CAM o GIS.
Las bases de datos orientadas a objetos ofrecen la posibilidad de definir clases o tipos de
datos abstractos, así como tablas, llaves primarias y restricciones como las bases de
datos relacionales (Calero, Ruiz et al. 2005).
En la versión ANSI 1992 conocida como SQL 92 se incluyeron aspectos como conexiones
a base de datos, creación de SQL dinámico y “outer joins”, además se establecieron
niveles de cumplimiento al estándar: inicial, intermedio y completo que podían cubrir los
sistemas manejadores. El siguiente estándar fue SQL:1999 el cual incluyo mas tipos de
datos, como arreglos, tipos definidos por el usuario, booleanos, y blobs. Posteriormente
se definió SQL:2003 el cual expandió toda la funcionalidad de su predecesor el SQL:1999
además de incluir un mayor número de tipos de datos con algunas otras funciones; de
aquí que si se le da cumplimiento al estándar SQL:1999 se puede decir que también
cumple con el estándar SQL:2003, es importante resaltar el hecho que un sistema
manejador cumple con el estándar SQL:2003 no significa que ha implementado toda la
funcionalidad y cambios propuestos en la versión.
La última versión del estándar, SQL:2003 (ISO,2003), es el resultado de revisiones
mayores y extensiones de la mayoría de las partes sobre el estándar SQL:1999. Esta
versión incluye SQL/XML (especificaciones XML), nuevos tipos de datos (bigint, multiset,
y XML), mejoras a las rutinas de invocación de SQL, extensiones para la sentencia de
creación de tablas (CREATE TABLE) y la nueva sentencia MERGE, un nuevo esquema
objeto y dos nuevos ordenadores de columnas, identidad y generado (Calero, Ruiz et al.
2005).
SQL ha sido utilizado como un lenguaje estándar para la obtención y manipulación de
datos en los sistemas relacionales de base de datos. Sistemas manejadores como
ORACLE, MSSQL, MYSQL Y POSTGRESQL han adoptado varias técnicas para alcanzar
cierto nivel de cumplimiento al estándar SQL:2003 pero a pesar de esto, la
implementación del estándar no lo hace compatible de un sistema a otro; cada uno de
estos sistemas tienen su propia funcionalidad pero muchas veces logran un nivel mínimo
de cumplimiento a dicho estándar (KALIAPPAN and WLOKA 2007).
El propósito primordial del lenguaje SQL es proveer una forma en la que los sistemas
manejadores de base de datos pudieran definir y obtener datos en una forma declarativa.
Esta forma declarativa se refiere a un tipo de programación en la cual el usuario pueda
especificar o definir los datos que serán seleccionados, actualizados, agregados e
eliminados sin con que éste tenga que conocer la forma en la que éstos datos están
almacenados (Jones 2005). Dentro de las funciones principales que tiene el lenguaje
SQL dentro de un sistema manejador de base de datos podemos encontrar:
30

Obtener datos e información almacenada en el sistema manejador.

Agregar, eliminar o actualizar datos en la base de datos.

Administrar permisos a los usuarios de la misma.

Crear y modificar la estructura de la base de datos.
Existen 3 modelos básicos en los que el lenguaje SQL puede ser implementado (Jones
2005):
Incrustado. Las sentencias SQL están integradas o incrustadas en programas separados
del sistema manejador.
Directo. El implementador provee funcionalidad de operar SQL directamente en el
implementador.
Modulo. Son extractos de código modularizados que pueden ser llamados desde
programa externos y regresan valores o resultados a los mismos.
Actualmente el estándar no establece un nivel de cumplimiento al mismo por parte de los
manejadores por lo cual es estándar es tomado como una base de implementación del
lenguaje SQL dentro de los manejadores de base de datos(Jones 2005).
El objetivo principal de un lenguaje estándar es proveer portabilidad de aplicaciones entre
productos o plataformas. Con el mismo conjunto de datos sobre dos sistemas
manejadores de bases de datos, los mismos “querys” retornaran los mismos resultados.
Pero en la realidad la portabilidad sobre diferentes sistemas o aplicaciones implica una
serie de retos significativos para su ejecución (Paul 1999).
Un lenguaje estándar es relevante en la medida que asegure que sea útil y usado. Nos
referimos al término útil cuando el lenguaje estándar ayuda a resolver problemas que se
supone están dentro del ámbito de dominio; y usado en el sentido que sea adoptado por
fabricantes y desarrolladores de aplicaciones (Paul 1999).
Evolución de SQL (Calero, Ruiz et al. 2005)
Año
70’s
80’s
Descripción
Modelo Relacional
Prototipos DBMS (SEQUEL XRM)
Aparece el primer SMBD Relacional
ANSI SQL-86
ISO SQL-87
31
Año
90’s
2003
2008
Descripción
SQL-89
ANSI Embedded SQL
SQL 92
SQL/CLI
SQL/PSM
SQL:1999
SQL:2003
SQL:2008
Tabla 1 Evolución de SQL
Proceso de estandarización de SQL (Kriegel and Trukhov 2008)
SQL-86/87 (SQL1)
X3H2 fue un mandato para estandarizar el modelo relacional en el año de 1982. El
proyecto estaba basado inicialmente en las especificaciones el sistema de IBM SQL/DS, y
durante algún tiempo éste siguió el sistema el desarrollo de DB2 de IBM.
En 1984, el estándar fue rediseñado con el objetivo de ser más genérico y de permitir una
mayor diversificación dentro de los diferentes fabricantes de sistemas manejadores de
base de datos. Después de un largo proceso burocrático fue reconocido como estándar
hasta 1986 por el American National Standards. En 1987, la International Organization for
Standardization ISO adopto el estándar.
SQL-89 (SQL1.1)
SQL-89 es en cierto grado un estándar minimalista que fue establecido para incorporar
todos los sistemas manejadores existentes en 1989. Solo comprendía un número limitado
de características relacionadas estrictamente a la colocación y recuperación de datos en
un sistema relacional de base de datos. Muchos de los fabricantes de sistema
comerciales no pudieron llegar a un acuerdo al respecto de ciertas características del
estándar y por tal razón éste quedo intencionalmente incompleto y muchas características
fueron marcadas como “definidas por el implementador”.
SQL-92 (SQL2)
Debido a las diferencias y limitaciones que presentaba el estándar, éste fue revisado y se
publicó el primer estándar solido de SQL: SQL-92. ANSI tomó el estándar SQL-89 como
su base pero corrigió muchas debilidades que presentaba y llenó muchos aspectos
inconclusos y finalmente presento características conceptuales de SQL. Cabe mencionar
que SQL-92 es cinco veces más grande que su antecesor (cerca de 500 páginas más)
y establece 3 niveles de cumplimiento.
El primer nivel de cumplimiento (Entry-Level) fue básicamente introducido desde el
estándar SQL-89, las diferencias en realidad fueron muy pocas con el antecesor, por
ejemplo, la especificación de la inclusión de “WITH CHECK OPTION” fue simplemente
ampliada en su explicación.
32
El nivel intermedio de cumplimiento (Intermediate-Level) fue un conjunto de mejoras
significativas que incluía, por ejemplo, nombres definidos por el usuario para las
restricciones (constraints); soporte para caracteres de longitud variable y la especificación
de conjuntos de caracteres, expresiones de “casting”, operadores de unión (join’s),
inclusión de comandos para modificar estructuras de tablas como “alter table”, uso de
transacciones, uso de subconsultas (subqueries) en vistas actualizables y el uso de
operadores que permitían unir el resultado de varias consultas, por ejemplo, UNION,
EXCEPT, INTERSECT. Este nivel de cumplimiento ofrececia al desarrollador una serie
de características que permitían potenciar el uso de los sistemas manejadores de base de
datos relacionales.
El nivel de cumplimiento total (Full-Level) incluía algunas características avanzadas como
la deshabilitación de restricciones (constrainst), tablas temporales y el establecimiento de
permisos sobre conjuntos de caracteres y dominios.
La medición sobre el nivel de cumplimiento que un sistema daba al estándar de SQL era
evaluado por el Departamento de Comercio del gobierno de los Estados Unidos a través
de su Instituto Nacional de Estándares y Tecnología (NIST). Los fabricantes que querían
ser considerados como compatibles con el estándar tenían que aprobar dicha prueba.
Esto se convirtió en una ley en 1990, y establecía que un sistema relacional de base de
datos (RDBMS) debía cumplir con dicha prueba para poder ser considerado por cualquier
agencia federal.
En 1996, NIST desmantelo el programa de verificación de cumplimiento al estándar
debido a razones de costo. Desde entonces, los fabricantes han dejado el objetivo
fundamental de generar sistemas que cumplieran de manera estricta con el estándar; esto
le ha permitido desarrollar sistemas que incluyen una alta variedad de funciones
propietarias y de sistemas que proporcionan características que los diferencian de sus
competidores sin tener un nivel estándar de cumplimiento.
SQL:1999 (SQL3)
SQL:1999 representó un avance muy importante en el desarrollo del estándar de lenguaje
SQL. El trabajo y los esfuerzos por desarrollar este estándar iniciaron incluso un año
antes de que su predecesor fuera adoptado. El desarrollo de este nuevo estándar estuvo
guiado por ambos comités de estandarización: el ISO y el ANSI, este cambió introdujo
cambios dramáticos en el mundo de las bases de datos como el cambio de paradigma en
la adopción y diseño de bases de datos basados totalmente en el modelo relacional.
Su incomparable complejidad se ve reflejada en el número de páginas impresas que
contenía este nuevo estándar, 2000 páginas, que comparadas con las 120 del SQL-89 y
las 628 del SQL-89 representaba y suponía un estándar mas amplío y con muchas
nuevas características. Algunas de las características que incluía este estándar eran
implementadas como extensiones a los sistemas base de los fabricantes, como el caso
de los procedimientos almacenados (stored procedures) que no estaban incluidos como
parte del núcleo y se ofrecían como extensiones al mismo. La inclusión de funciones y
33
características del modelo orientado a objetos fueron completamente elementos nuevos
en esta versión del estándar. SQL3 fue liberado como un estándar ANSI e ISO en 1999.
SQL3 extiende el modelo relacional tradicional para incorporar objetos y tipos de datos
complejos dentro de las tablas relacionales, así como todas las funciones soportadas.
Este estándar trae todos los principales principios de la programación orientada a objetos,
como la herencia, encapsulamiento, polimorfismo a parte de todas las características del
estándar que ya incluía su antecesor.
SQL:2003
Este estándar surge con una expectativa muy grande alrededor de XML. Adicionalmente
tiene algunas modificaciones y agregaciones al estándar anterior, SQL:1999, así como
algunas nuevas características como son las funciones de tabla, generadores de
secuencia, valores autogenerados, columnas identidad y algunas modificaciones al
Lenguaje de Manipulación de Datos (DML) como el caso del comando MERGE y también
al Lenguaje de Definición de Datos: CREATE TABLE LIKE y CREATE TABLE AS.
También se quitaron un par de tipos de datos ya obsoletos como es el caso de BIT y BIT
VARYING y al mismo tiempo se agregan algunos como BIGINT, MULTISET y XML.
SQL:2003 consiste de nueve partes y consta de alrededor de 3600 páginas, lo cual es
casi dos veces el tamaño del estándar anterior.
SQL:2008
SQL:2008 es la última revisión del estándar de SQL. En este estándar se hizo una
revisión y se le hicieron ciertas modificaciones a la parte relacionada a XML y algunos
cambios que quedaron pendientes en su versión anterior. Esta nueva versión incluye
nueves tipos de datos como BINARY, el manejo de expresiones regulares y la posibilidad
de incluir comandos como FIRST n en las vistas.
34
ALGUNAS IMPLEMENTACIONES DEL LENGUAJE SQL.
Un aspecto importante en la comprensión de las bases del lenguaje SQL ANSI como
estándar, es conocer y ver la forma en la que es implementado en los sistemas
manejadores de base de datos, ya que a pesar que el estándar establece las bases del
lenguaje, cada manejador lo implementa de forma diferente dando como resultado
diferencias significativas entre los sistemas que implementan dicho estándar.
En este apartado haremos un recorrido por las principales implementación de SQL en el
mercado; mostraremos las características generales que cada manejador ofrece dentro
de su sistema.
Las implementaciones que abordaremos son: ORACLE, SQL SERVER, POSTGRESQL y
MYSQL. De cada uno presentaremos sus características principales, posición en el
mercado y algunos aspectos comerciales de los mismos. Las características que se
muestran son generales y en algunos casos diferenciales que los fabricantes marcan para
su producto como mejoras o nuevas características, de aquí que no se mencionen las
mismas características para todos los sistemas.
Oracle
La base de datos de Oracle es un popular sistema manejador de base de datos (SMBD)
desarrollado y comercializado por una de las compañías de software más importantes del
mundo, Oracle Corporation (Kimpo, Lucero et al. 2004).
IBM fue unos de las empresas que implementó el modelo relacional presentado por E.
Codd en un sistema manejador de base de datos relacional comercial, éste fue el caso de
“System/R” que a su vez incorporó un lenguaje de creación y manipulación de datos
denominado SEQUEL, y más tarde nombrado SQL. Este trabajo trajo la atención de un
grupo de ingenieros en California, E.U. alrededor del modelo relacional y posteriormente
fundaron una empresa denominada Relational Software; para finales de década de los
70’s esta empresa liberó su primera versión de un SMBD comercial denominado
ORACLE. Años más tarde la empresa cambió su nombre por Oracle Corporation, nombre
que hoy en día sigue vigente (Kimpo, Lucero et al. 2004).
A lo largo de la década de los 80’s Oracle Corporation creció y se consolidó como el
proveedor más grande en la venta de sistemas manejadores de base de datos con un
total de 1000 instalación para el año de 1985 (Kimpo, Lucero et al. 2004).
A partir de la versión 8.0 el sistema integra un paradigma nuevo orientado a objetos, lo
cual lo pone nuevamente un paso adelante con respecto a sus competidores, la última
versión 11 g sigue siendo un sistema relacional pero con una crecida lista de
características orientadas a objetos (Kimpo, Lucero et al. 2004).
35
Características generales.
La base de datos de Oracle está disponible para distintos sistemas operativos en los que
podemos encontrar: Linux, Mac OS X, Solaris y Windows. También disponible en
diferentes versiones: un usuario, multi-usuario, red y distribuido.
Incluye características orientadas a objetos dentro del esquema relacional, es
considerado un sistema híbrido. Para este efecto el lenguaje SQL del manejador incluye
una instrucción para la creación de objetos (CREATE TYPE as object).
Oracle utiliza un dialecto de SQL denominado SQL*PLUS, el cual es reconocido como la
implementación de SQL más completa y sofisticada. Oracle soporta el estándar de SQL y
extiende el lenguaje a través de sus funciones propias.
Fundamentos de Oracle Database.
Diseño seguro. Oracle utiliza una arquitectura centralizada (kernerlized architecture), la
cual emplea un sistema que opera entre la base de datos, el manejador, las vistas
externas y los usuarios de la misma. Este sistema aumenta la protección y administra las
peticiones de datos a nivel físico.
Identificación y autenticación de usuarios: Oracle provee dos mecanismos para el acceso
seguro: la autenticación por contraseñas y a nivel sistema operativo.
Integridad de datos: Oracle es compatible con el manejo de transacciones alrededor del
concepto ACID (Atomic, Consistent, Isolation, Durability)(Kimpo, Lucero et al. 2004).
Permite el bloqueo a nivel registro, incluye también reversas completas y parciales
(rollforwards) para la restauración de datos.
Funciones avanzadas: Oracle suporta el uso de procedimientos almacenados (store
procedures), vistas (views), secuencias (sequences), disparadores (triggers), cursores
(cursors), herencia (inheritances) y datos definidos por el usuario (user_defined datatypes).
Ordenación (Indexing). Oracle emplea poderos mecanismos de ordenación y soporta
índices en columnas simples, multicolumna, llaves primarias y campos de texto.
Métodos de interface: Oracle permite realizar interfaces a través de ODBC, JDBC, C++ y
Java. La versión profesional también permite interfaces con COBOL, FORTRAN, PL/1
ADA y PASCAL.
Restricciones de integridad (Integrity Constraints). Oracle soporta la opción de habilitar y
deshabilitar las restricciones de integridad.
Mejoras a la última versión.
Los procesos de respaldo, recuperación y restauración han sido aumentadas y mejoradas
incluyendo varias nuevas características:
36
Copias de imagen extendidas (Expanded Image Copying). Una copia de un archivo de
datos se restaura más rápido que una archivo de datos completo debido a que la
estructura física del archivo de datos ya existe.
Creación y actualización de respaldos incrementales (Incrementally Udated Back-Ups).
Permite crear y aplicar cambios de base de datos incrementales hacia una copia de
imagen de un respaldo.
Creación automática de archivos de datos faltantes.
Mantenimiento mejorado de logs de recuperación.
Administración mejorada en los recursos y procesos de respaldo.
Recuperación independiente de tablas. Permite recuperar tablas eliminadas de manera
independiente sin la necesidad de recuperar la base de datos completa, esto gracias a
que cada que se elimina una tabla ésta es enviada a una bandeja de reciclaje.
Análisis de fortalezas y debilidades.
Fortalezas:
Oracle es el más fuerte sistema manejador de la industria en términos de complejidad y
características ofrecidas. Siendo el primer SMBD relacional lo hace un “veterano” en ese
campo y le permite consolidarse como el líder tras cinco décadas de mejoras. También el
sofisticado dialecto de SQL que implementa (SQL*PLUS) da una vasta lista de
capacidades y da a su vez mas elementos y herramientas al desarrollador para usar,
ampliar y explotar las bases de datos.
Las estrategias de ordenación son por mucho superiores a las ofrecidas por SMBD de
código abierto (Open Source) ya que la naturaleza relacional y orientada a objetos le da al
desarrollador la libertad de explotar los beneficios de ambos paradigmas.
Otra ventaja que ofrece Oracle son las diferentes plataformas o sistemas operativos en
los que puede correr el sistema como Linux, Windows y Unix. Oracle permite también
administrar terabytes de información de manera sencilla a diferencia de sus competidores.
Debilidades.
La complejidad que mantiene Oracle es una de sus principales debilidades ya que
requiere que el desarrollador mantenga un nivel alto de conocimiento para poder realizar
funciones dentro del sistema.
Dado que el sistema Oracle está dotado de un gran número de características, éste tiene
un costo significativo; es precio es otra debilidad en el sentido que se vuelve en algunos
casos un sistema “caro” que deja fuera algunas organizaciones de adquirirlo. La versión
sencilla no contiene muchas de las funciones importantes que tiene Oracle.
37
Además, la inclinación de un sistema hibrido, orientado a objetos y relacional, que
mantiene el manejador aumente la complejidad e introduce flujos no deseados en el
modelo relacional.
Al comparar las fortalezas y debilidades de Oracle encontramos tres aristas
fundamentales: Precio vs Potencia, Complejidad vs Facilidad de Uso y Modelo ObjetoRelacional vs Modelos no Relacionales.
La base de datos de Oracle fue pionera en la implementación del modelo relacional y uno
de los primeros en la implementación del lenguaje SQL como su lenguaje base; Oracle es
un sistema caro y complejo pero lleno de características incluidas en un paquete que
permiten manejar cualquier escala de datos sobre una amplia variedad de plataformas.
Oracle fue el primer sistema manejador de base de datos relacional que incluyó por
primera vez el lenguaje SQL como su base de definición y manipulación de datos. En su
versión 10g, Oracle cumple con el estándar SQL:2003 y cuenta con diferentes versiones
para sistemas operativos.
SQL SERVER
Microsoft es una de las compañías más grandes de desarrollo de software. Cuenta con un
manejador de base de datos denominado SQL SERVER en diferentes versiones,
actualmente la más reciente es SQL SERVER 2008.
SQL Server (MSSQL) ha pasado por un largo proceso de evolución. La versión original de
SQL Server fue liberada en 1988 como un producto de Microsoft y Sybase que corría
sobre OS/2 exclusivamente. Esta versión fue una falla ya que no hubo una buena
aceptación en el mercado.
En 1994, Microsoft finalizó su relación con Sybase y liberó una nueva versión 6.0 en 1995
seguida de otra versión 6.5 en 1996. No fue hasta esta última versión en la que SQL
Server inició a penetrar en el mercado generando aceptación entre los directores y
desarrolladores de base de datos.
Mucho de este nuevo éxito que experimentó el sistema de Microsoft fue gracias a las
nuevas características que incluyó en su última versión y gracias a que de manera
paralela existía un crecimiento en la adquisición e instalación de servidores basados en
procesadores Intel y a su vez basados en el sistema operativo de Microsoft Windows NT.
Posteriormente Microsoft liberó su versión 7.0 con la que finalmente permitió el ingreso de
SQL Server al mercado de base de datos de alta disponibilidad.
Licenciamiento
SQL Server tiene tres opciones de licenciamiento:
38
Licencia por procesador.
Se requiere de una licencia por cada procesador en el sistema operativo. Este tipo de
licencia no requiere licencias para los clientes que se conectan al servidor.
Licencia por dispositivo (Server plus device CALs).
Este tipo de licencia requiere una licencia para el servidor que corre el servidor de base
de datos y una licencia para cada dispositivo cliente que se conecta al servidor de base
de datos.
Licencia por usuario (Server plus user CALs).
Requiere una licencia para el servidor que corre el servidor de base de datos y otra para
cada usuario que se conecta al mismo.
Características principales
Integración con Windows.
Correo de manera integrada en todos los sistemas operativos de servidor de Microsoft
Windows.
Disponibilidad en ambiente Web.
Permite correr aplicaciones en ambiente Web.
Soporte enriquecido de XML.
Trabaja de forma integrada con archivos con formato XML en alojamiento y transferencia
de éstos.
Análisis Web.
Permite analizar data de cubos OLAP remotos que sean disponibles desde Web.
Acceso Web a datos.
Permite la conexión del servidor de base de datos hacia cubos OLAP de manera flexible.
Alta disponibilidad.
Permite integrar el servidor en arreglos de clusters, realizar respaldos en línea y llevar un
registro detallado de actividades (log).
Escalabilidad.
Permite escalar las aplicaciones hasta en un máximo de 32 CPU’s y utilizar hasta 64 GB
en memoria RAM.
39
Seguridad.
Establece un sistema de seguridad basado en role e implementa encriptación en archivos
y redes.
Vistas distribuidas particionadas.
Permite dividir o particionar la carga de procesamiento a lo largo de diferentes servidores.
Administración de base de datos simplificada.
SQL Server incorpora una consola de administración que permite afinar el sistema y dar
mantenimiento al mismo.
Servicio de transformación de datos.
El servidor tiene herramientas que permiten integrar datos desde fuentes externas y
heterogéneas de información hacia la base de datos.
Vistas ordenadas.
Permite guardar resultados de query’s en el hardware disponible al sevidor y utilizarlo
posteriormente, esto reduce el tiempo de respuesta del servidor de base de datos.
Replicación
SQL Server implementa un modelo de replicación transaccional, combinado y resumida.
Creación de preguntas en inglés.
Permite al usuario redactar preguntas no estructuradas en el lenguaje inglés hacia la
base de datos.
Servicio de análisis OLAP.
Permite realizar análisis rápidos y sofisticados sobre sets de datos largos y complejos.
Minería de datos.
Incluye herramientas que permiten ejecutar tareas de minería de datos para descubrir
patrones, tendencias en los datos almacenados.
Aspectos de Seguridad
SQL Server implementa un mecanismo de identificación y autenticación para poder
acceder a los datos en la base alojada. Cualquier usuario debe ser autentificado antes de
poder acceder al sistema y a los datos.
SQL Server incorpora dos mecanismos de autenticación de usuarios: el primero basado
en el modelo de Windows NT, normalmente adjunto al sistema operativo, y el segundo
basado el modelo integrado del propio manejador de base de datos.
40
SQL Server administra dos tipos de cuentas de usuario:


Login ID.
Database User ID.
E incorpora tres tipos de permisos:



Statement.
Object.
Implied.
Respaldo de base de datos.
El método de respaldo de base de datos que utiliza SQL Server es uno de los más
versátiles y confiables. Dentro de las funciones de respaldo con las que cuenta el servidor
podemos mencionar:




Respaldo de bases de datos enteras.
Respaldo de archivos específicos de base de datos.
Respaldo del archivo de registro (log).
Respaldos diferenciales.
Los respaldos que realiza el servidor son confiables ya que nunca realiza respaldos de
transacciones de manera parcial, con esto, este tipo de respaldos mantienen la integridad
de los datos.
Los respaldos los pueden realizar de manera dinámica, es decir, permite ejecutar los
procesos de respaldo mientras esta en uso la propia base de datos.
Características diferenciales.
Servicios de notificación.
Permite a los negocios construir aplicaciones de notificación enriquecidas que envían
información personalizada en tiempos predefinidos hacia cualquier dispositivo.
Servicios de reportes.
Una de las características importantes que incluye SQL Server son los servicios
integrados para la generación de reportes que incluye la creación de archivos en formato
PDF.
Uno de los objetivos principales de este sistema manejador de base de datos es
proporcionar un fácil uso al usuario a un costo accesible en comparación de otros
sistemas bajo el esquema de licencias comerciales.
41
Otro aspecto importante es que esta manejador incorpora su propia implementación de
SQL denominada T-SQL el cuál no cumple de manera amplía el estándar ANSI de SQL a
pesar que no muestra diferencias aparentes con dicho estándar (Jones 2005).
Una limitante importante que muestra este manejador de base de datos es que solo
puede correr en la propia plataforma del sistema operativo de Microsoft.
POSTGRESQL
PostgreSQL es un sistema manejador de base de datos orientado a objetos y relacional
derivado del paquete POSTGRES, fue desarrollado en 1986 en la universidad de
California en Berkeley (Kimpo, Lucero et al. 2004; Jones 2005). El proyecto fue lidereado
por el profesor Michael Stonebraker y patrocinado por la Agencia de Proyectos de
Investigación Avanzada de la Defensa (DARPA por sus siglas en Inlgés), la Oficina de
Investigación de la Armada (ARO), la Fundación Nacional Científica (NSF) y la
corporación ESL Inc. (Kimpo, Lucero et al. 2004) .
La primera demostración operacional del software fue el 1987. Posteriormente en junio de
1989, la versión 1 fue liberada para solo algunos usuarios externos al proyecto. Como una
respuesta a la revisión del sistema de reglas de sistema, la versión 2 fue liberada el año
siguiente. La versión 3 apareció en el año de 1991 la cual agregó soporte para múltiples
modos y administradores de almacenamiento, un ejecutor de query’s mejorados y un
sistema de reglas re-escrito completamente. El proyecto de Berkeley POSTGRES terminó
oficialmente con la versión 4.2 después de un largo tiempo de desarrollo e investigación
(Kimpo, Lucero et al. 2004).
En 1994, Andrew Yu y Jolly Chen agregaron un intérprete del lenguaje SQL al sistema
POSTGRES. Esto generó una nueva versión denominada Postgres95 la cual fue liberada
en la web, dejando una marca en el mercado de las base de datos como un descendiente
de código abierto (open-source) del proyecto de Berkeley POSTGRES.
Esta nueva versión está escrita complemente en ANSI C. Además de todas las
correcciones de los “bugs” conocidos de la versión anterior, el lenguaje de consultas
PostQUEL fue remplazado por SQL. Con esto, el uso de subqueries fue soportado. Las
funciones de agregación fueron re-implementadas en su totalidad con lo que la sentencia
de agrupación GROUP BY fue agregada al sistema.
Así, PostgreSQL nació de la integración del proyecto original POSTGRES y la inclusión
de SQL como el lenguaje base del sistema manejador.
Licenciamiento
PostgreSQL es distribuido bajo GNU Public License, la cual permite muchas posibilidades
sin costo alguno, como son el uso, modificación, distribución para cualquier propósito ya
sea privado, comercial o académico.
Características Principales.
42
PostgreSQL soporta los estándares SQL92 y SQL99 y ofrece la creación de query’s
complejos, llaves foráneas (foreign keys), disparadores (triggers), reglas (rules), vistas
(views), integridad transacional y control de concurrencia multicontrol.
PostgreSQL puede ser extendido por el usuario de manera libre y abierta como por
ejemplo agregando nuevos tipos de datos, funciones, operadores, funciones de
agregación métodos y lenguajes procedimentales.
PostgreSQL es el único sistema “open source” que soporta lenguajes procedimentales
para la construcción de procedimientos almacenados (strored procedures) y disparadores
de eventos (triggers). Utiliza el lenguaje PL/pgSQL para la definición de estos comandos.
Este lenguaje sigue el formato y estructura del homologo PL/SQL de Oracle.
PostgreSQL incluye interfaces nativas para ODBC, JDBC, C, C++, PHP, Perl, TCL,
ECPG, Python y Ruby.
PostgreSQL soporta comunicación SSL y utiliza mecanismos de autenticación basados en
Kerberos.
Cumple con ambos esquemas para el manejo de transacciones ACID (atomicity,
consistency, isolation, durability) y el ANSI SQL.
PostgreSQL permite la replicación, siendo posible la duplicación de servidores maestros a
múltiples servidores esclavos. Dado que PostgreSQL es un sistema orientado a objetos,
permite la herencia.
PostgreSQL ejecuta outer JOIN y SUBSELECT y soporta UNION, UNION ALL y EXCEPT.
También incorpora el operador SQL LIKE y SIMILAR TO del SQL99, permite también la
ejecución de expresiones regulares con estilo POSIX.
El sistema cuenta con herramientas que permiten generar instrucciones SQL portables
ejecutables en otros sistemas compatibles con SQL. Las funciones son compatibles con
tablas cruzadas para permitir una transición desde sistemas con un menor rango de
compatibilidad.
PostgreSQL corre en modo servidor de manera nativa en Linux, Windows, UNIX entre
otros.
Las versiones recientes son capaces de recuperarse desde una falla de una sentencia
dentro de una transacción mediante el uso de puntos de recuperación (savepoints). No es
posible realizar una recuperación desde disco ante una falla excepto si se hace la
recuperación desde un respaldo previo o desde un servidor de replicación. Establecer
puntos de recuperación temporales permite realizar respaldos continuos del servidor. Así,
es posible recuperar desde un punto de falla o desde una transacción pasada.
El uso y definición de espacios de tablas (tablespaces) son una característica más del
sistema. A través de estos, los administradores pueden seleccionar los sistemas de
archivos donde se pueden almacenar tablas, índices y base de datos completas. Los
43
espacios de tablas permiten mejorar el desempeño y control sobre el espacio en disco
que se utiliza para almacenar las bases de datos.
En versiones pasadas, la precisión de un número flotante era tomada para establecer el
número de dígitos en un número decimal. Esta característica fue corregida para cumplir
con el estándar de SQL, el cual indica que la precisión debe ser medida in dígitos
binarios. También en versiones anteriores, las cadenas muy largas eran siempre
truncadas sin generar error alguno y los bits eran truncados o rellenados con ceros en la
derecha, con o si un casting explicito.
PostgreSQL es un software complejo, en función de otros sistemas de código abierto de
base de datos, y su administración puede resultar una tarea complicada. Muchas de las
mejoras que se buscan para el sistema se desarrollan más eficientemente cuando son
desarrollados de manera separada al núcleo del sistema. Algunas de estas interfaces son:
psqlODBC
Interface común para aplicaciones basadas en Windows.
Pgjdbc
Interface JDBC para aplicación de Java.
Npgsql
Interface para aplicaciones Windows basadas en el framework .NET
Libpqxx
Una versión nueva de la interface para el lenguaje C++.
Pgperl
Interface para el lenguaje de programación Perl.
DBD-Pg
Interface Perl que utiliza la API entandar DBD.
Pgtclng
Interface para TCL.
PyGreSQL
Interface para Python.
Análisis de fortalezas y debilidades.
Fortalezas.
Es libre en el sentido que no hay que pagar un costo económico.
Flexibilidad para realizar investigación y desarrollo de prueba.
Soporta un subconjunto amplio del estándar SQL.
Soporta tamaño de tablas muy grandes, incluso rebasa el límite máximo en sistemas
Linux.
Es un sistema completamente programable.
Es un sistema extensible ya que el código está disponible para cualquier persona sin
costo adicional.
44
Se encuentra en el rango medio de velocidad de respuesta de los sistemas manejadores
de bases de datos comerciales.
Está disponible para casi todas las marcas de UNIX, Linux y Windows.
Permite utilizar múltiples estrategias de almacenamiento para renglones o tuplas en
ambientes con altos niveles de volúmenes de datos.
Debilidades.
PostgreSQL esta aún en el camino de lograr el cumplimiento total a los estándares SQL92
y SQL99.
Existe una falla al aplicar funciones de permisos a la base de datos.
Existe otra falla de “buffer overflow” cuando existe una declaración de cursor.
PostgreSQL corre más lento que su competidor directo MySQL.
Diferenciadores.
PostgreSQL es el único sistema de código abierto (Open source) que soporta un lenguaje
procedural para construir procedimientos almacenados (Strored procedures) y
disparadores (triggers). Utiliza un lenguaje llamado PL/pgSQL para estos comandos.
Incluye tipos de datos adicionales como son tipo de datos geométricos como puntos,
líneas, cuadros, polígonos, círculos y direcciones de red como inet, cidr, inet y macaddr.
PostgreSQL es un sistema más completo y complejo que su competidor MySQL, pero
tiene una ejecución más lenta.
PostgreSQL es considerado el manejador más potente en el mercado “Open Source”. Fue
desarrollado inicialmente para correr sobre plataformas UNIX pero en las versiones más
recientes puede correr en plataformas basadas en Windows. PostgreSQL fue desarrollado
con el objetivo fundamental de ser compatible con el estándar.
MYSQL
MySQL es un manejador de base de datos “Open Source” desarrollado por la compañía
Sueca MySQL AB. MySQL fue completado en mayo del 2005 por Michael Monty (Kimpo,
Lucero et al. 2004). Este manejador fue inicialmente desarrollado con el objetivo de de
proporcionar velocidad y desempeño más que con el objetivo de cumplir con un estándar.
45
Es un sistema de código abierto desarrollado en ANSI C y tiene conexión nativa desde
diferentes lenguajes de programación como C, C++ Smaltalk, Java, Perl, PHP, etc.
MySQL está disponible bajo dos tipos de licencias:
GNU General Public License. Los permisos de usuario están protegidos en dos
esquemas: software copyright y posesión de licencia que proporciona permisos legales de
copia, distribución y/o modificación.
Commercial License. En este esquema, no se proporcionan los códigos fuentes. Los
clientes adquieren una licencia comercial con soporte. Existe la posibilidad de re-distribuir
el software.
Características principales de MySQL.
Velocidad.
Es una de las características principales del sistema manejador, fue uno de los principales
objetivos desde su desarrollo (Kimpo, Lucero et al. 2004). Algunos estudios comparativos
de desempeño colocan a MySQL como uno de los más rápidos ante diferentes pruebas
realizadas en diferentes sistemas manejadores de base de datos.(AB 2005)
Precio.
Aunque existe una versión libre de MySQL que no tiene un costo, existe una licencia
comercial que está por debajo de los 500 dólares mientras que otros sistemas están
alrededor de los 50,000 dólares (Kimpo, Lucero et al. 2004).
Seguridad.
El servidor de la base de datos soporta SSL (transport-layer encryption) como parte del
sistema avanzado de seguridad y permisos. La versión 4.0 permite establecer recursos
por usuario (Kimpo, Lucero et al. 2004).
Multiplataforma.
MySQL puede ejecutarse sobre Linux, Windows, FreeBSD, Sun, MAC OS, entre otros.
Adicionalmente tiene soporte para diferentes lenguajes de programación así como un
conector ODBC para la base de datos (Kimpo, Lucero et al. 2004).
Confiabilidad.
MySQL es un sistema que normalmente no requiere grandes esfuerzos en
mantenimiento, no son usuales las caídas del sistema; cuando llega a existir una caída se
puede recuperar fácilmente. MySQL AB tiene un control de código con las versiones que
libera y siempre incluye las modificaciones a los “bugs” conocidos.
46
Flexibilidad.
En MySQL el administrador de la base de datos puede elegir el tipo de motor de
almacenamiento de las relaciones:
InnoDb: Orientado a aplicaciones con transacciones con commits, roll back y crash
recovery.
MyISAM. Es el motor por default, orientado a aplicaciones no transaccionales. Este
tipo de motor ofrece un mejor desempeño.
MySQL permite definir diferentes tipos de motores para diferentes tablas en una misma
base de datos.
BLOB’s.
MySQL permite manejar atributos binarios que son tratados como cadenas binarias y
pueden almacenar datos binarios no procesados, como archivos los cuales pueden ser
manipulados como cualquier tipo común de datos.
Transacciones y Operaciones Atómicas.
A partir de la versión 4.0, MySQL provee soporte para transacciones, esto es solo posible
en el motor tipo InnoDB y BDB.
Replicación.
MySQL incorpora un sistema de replicación en la que están involucrados al menos dos
servidores: uno en un modo maestro y el otro en modo esclavo. Esta opción de clusters
permite mantener trabajando el servidor de base datos si uno o varios de ellos fallan. La
arquitectura de replicación de MySQL permite a cada servidor contar con su propia
memoria y disco duro así, las tablas almacenadas en los nodos de almacenamiento son
accesibles directamente desde cualquier otro servidor MySQL en el cluster.
MySQL es un sistema confiable, abierto y con un aspecto de simplicidad que lo hacen una
opción en la elección de un sistema manejador de base de datos. MySQL incorpora
menos funcionalidad con respecto a sus competidores directos como el caso PostgreSQL
aunque en general MySQL sigue manteniendo características de velocidad y flexibilidad.
Resumen de características generales.
Oracle, MSSQL, PostgreSQL y MySQL representan los cuatro sistemas manejadores de
bases de datos más utilizados y prominentes en el mercado de las bases de datos. Oracle
y MSSQL son sistemas comerciales mientras que PostgreSQL y MySQL son sistemas de
código abierto.
47
Oracle es el primer sistema relacional manejador de base de datos en el mercado, y su
complejidad y cantidad de características van en relación directa con el precio, es el
sistema más caro dentro de esto cuatro en cuestión.
Por el otro lado MSSQL es un sistema potente que ofrece una alternativa accesible en
cuanto a costo en relación a Oracle, aunque sigue siendo cara desde el punto de vista de
un desarrollador personal. MSSQL puede ser visto como un sistema más simple y con
una interfaz de usuario más amigable en comparación de Oracle; se puede decir que
cuenta con gran parte de las características que ofrece Oracle pero limitado a una sola
plataforma: Windows.
Oracle y MSSQL son ambos aptos para una administración de base de datos a de nivel
personal y empresarial, aunque sus costos y características individuales pueden llegar a
ser más apropiadas para corporaciones y/o departamentos.
En contra parte a estos sistemas comerciales encontramos dos opciones en el mercado
de código abierto: MySQL y PostgreSQL los cuales pueden ser usados sin costo alguno.
Mientras que ambos pueden ser usados a nivel personal o comercial, las aplicaciones de
código abierto son normalmente implementadas en soluciones “stand-alone” o
comerciales de baja demanda.
PostgreSQL se proclamo a sí mismo como el “sistema relacional manejador de base de
datos de código abierto más avanzado”, mientras que MySQL es el sistema de código
abierto más popular en este mercado. Estos dos sistemas han dejado ver que son una
opción viable en contraparte a los sistemas comerciales que existen en el mercado
aunque es evidente también que aun no pueden cubrir totalmente la complejidad relativa
de las opciones comerciales que se ofrecen en el mercado como es el caso de Oracle y
MSSQL (Kimpo, Lucero et al. 2004).
48
Tabla comparativa de características generales (Kimpo, Lucero et al. 2004)
Figura 2 Tabla Características
49
EL ESTÁNDAR SQL:2003
El lenguaje SQL está presente en la mayoría de los SMBD y se ha convertido en el
lenguaje “defacto”, ante esta situación el lenguaje ha sido objeto de un intenso proceso de
estandarización que ha resultado en varias versiones del mismo. El estándar al que nos
referiremos en este trabajo es SQL:2003, este se encuentra descrito en el estándar
ISO/IEC 9075, en el apartado Tecnología de Información-Lenguajes de base de datos
(Baroni, Calero et al. 2006).
El ISO/IEC 9075 define el lenguaje SQL. El alcance del lenguaje SQL es la definición de
las estructuras y operaciones sobre la estructura de almacenamiento de datos (ISO/IEC
2008).
El estándar SQL:2003 está compuesto de nueve partes. La numeración de las partes no
es continua debido a razones históricas. Algunas partes han desaparecido (ejemplo: parte
5 de SQL:1999 SQL/Bindings está incluida en la parte 2 del estándar SQL:2003) y
algunas otras son nuevas. Las partes del nuevo estándar son el resultado de una mayor
división o del resultado de la implementación de nuevos requerimientos, como son las
partes 13 y 14 que hablan de algunos métodos JAVA o el manejo de datos XML (Calero,
Ruiz et al. 2005). Las partes 1,2 y 11 enmarcan los requerimientos mínimos del lenguaje.
El resto de las partes definen extensiones del mismo.
El estándar define también las formas en las que el lenguaje SQL puede ser usado en
conjunto con XML. Define las formas de importar y almacenar datos XML en base de
datos basadas en SQL.
A continuación presentamos la estructura general del estándar (Calero, Ruiz et al. 2005):
Parte
1
2
3
4
Nombre
“Framework”
Descripción
Es un resumen general del estándar. Describe el marco
conceptual usado en otras partes para especificar la
gramática del SQL y el resultado de el procesamiento de
sentencias en el lenguaje que implemente SQL. También
define los términos y notaciones utilizadas en el resto de
las partes.
“Foundation”
Esta parte define la estructura de datos y las operaciones
básica sobre datos SQL. Provee las características
funcionales para crear, acceder, mantener, controlar y
proteger datos SQL. Esta parte también especifica la
sintaxis y semántica del lenguaje SQL. Trata aspectos de
la portabilidad de la definición de datos y compilación entre
implementaciones de SQL y la interconexión de las
implementaciones.
“Call-Level
Define las estructuras y procedimientos que pueden ser
Interface”
usado para ejecutar sentencias SQL en ó desde
(SQL/CLI)
aplicaciones que utilicen lenguajes de programación
estándar.
“Persistent Stored Esta parte especifica la sintaxis y semántica del lenguaje
50
Parte
9
10
Nombre
Modules”
(SQL/PSM)
“Management
of
External
Data”
(SQL/MED)
“Object Language”
Descripción
para declarar y mantener rutinas del lenguaje persistentes
en módulos de servidor SQL.
En esta parte se definen extensiones al lenguaje de base
de datos SQL para soportar la administración de datos
externos.
Define extensiones para soportar sentencias SQL
incrustadas en programas desarrollados en Java
comúnmente conocidos como “SQLJ”. Esta parte
especifica la sintaxis y semántica de los “SQLJ” así como
los mecanismos para asegurar la portabilidad binaria
resultado de aplicaciones “SQLJ”. Adicionalmente
especifica un número de paquetes y clases del lenguaje
Java.
Esta parte define un esquema de información y un
esquema de definición que describe el identificador de
objeto SQL, la estructura y las restricciones de integridad
de los datos SQL, la especificación de la seguridad y
autorización relacionada a los datos SQL, las
características y sub-características y paquetes de este
estándar, y el soporte que cado uno tiene en la
implementación de SQL. También incluye información de
implementación y dimensionamiento de objetos.
Esta parte especifica las facilidades de invocar métodos
estáticos escritos en lenguaje Java como rutinas que
invocan SQL y el uso de clases definidas en Java como
tipos de datos definidos por el usuario.
11
“Information
and
Definition Schema”
(SQL/Schemata”
13
“Routines
and
Types Using the
Java Programming
Language”
(SQL/JRT)
“XML-Related
Esta parte contiene todos los aspectos relacionados a la
Specifications”
implementación de XML dentro del lenguaje SQL.
(SQL/XML)
14
Tabla 2 Estructura del Estándar SQL
El estándar SQL:2003 hace una revisión de todas las partes de su antecesor SQL:1999 y
agrega una parte más, la parte 14 relacionada a los aspectos de SQL/XML.
Adicionalmente se hizo una reorganización de las partes heredadas de su antecesor. Una
porción de la parte 2 de su antecesor, SQL/Foundation, que trata el Information Schema y
el Definition Schema fue separado y se creó una parte exclusiva: la parte 11
SQL/Schemata in SQL:2003 (Eisenberg, Kulkarni et al. 2004).
La parte 5 de SQL:1999 SQL/Bindings ha sido eliminada en SQL:2003 y su contenido fue
movido a la parte 2 de SQL:2003, SQL/Foundation.
Algunas de las nuevas características del estándar SQL:2003 en relación con su
antecesor podemos encontrar:

Nuevos tipos de datos.
51

Mejoramiento en la invocación de rutinas SQL.

Extensiones a la declaración CREATE TABLE.

Una nueva declaración: MERGE.

Un nuevo objeto esquema.

Dos nuevas ordenaciones de columnas, columnas de identidad y columnas
generadas.
Nuevos tipos de datos.
SQL:2003 conserva todos los datos existentes en la versión anterior con la excepción de
BIT y BIT VARYING que fueron removidos del estándar debido a la falta de soporte en los
sistemas manejadores actuales. El estándar SQL:2003 introduce tres nuevos tipos de
datos: BIGINT, MULTISET y XML.
Los nuevos tipos de datos son consideraros de primera clase, ya que pueden ser usados
en todos los contextos de los ya existentes: tipos de atributos, parámetros y tipos de
retorno de funciones.
El nuevo tipo de dato BIGINT es similar al SMALLINT y al tipo INT pero implementa una
mayor precisión, la mayoría de las implementaciones utilizan actualmente valores de 64
bits pero se puede especificar otra precisión. Este tipo soporta las mismas operaciones
que los otros tipos de entero como es la suma, resta, valor absoluto, modulo, etc.
El tipo MULTISET es un tipo de colección similar al ya existente ARRAY, pero sin que
exista un orden implícito en sus elementos; es una colección de elementos sin ordenación
alguna, todos del mismo tipo y con la posibilidad de contener elementos duplicados.
El tipo del elemento puede ser cualquiera de los ya existentes soportados por SQL, por
ejemplo INTEGER MULTISET define que los elementos del MULTISET son del tipo
INTEGER. El tipo MULTISET no requiere de la especificación de un número máximo de
elementos, sin embargo si existe un número máximo.
El tipo de dato MULTISET soporta operaciones para moldear un conjunto de datos
(multiset) dentro un arreglo u otro multiset con un tipo de elemento compatible, para
remover duplicados del multiset, para regresar el número de elementos de un multiset y
para retornar el único elemento de un multiset que contiene un solo elemento.
Adicionalmente, la unión, intersección y la diferencia de dos multiset están soportadas y
contiene además tres nuevas funciones: COLLECT, FUSION, INTERSECTION.
Funciones de tabla
52
Las funciones de tabla son un elemento nuevo en SQL:2003. Una función de tabla es una
invocación SQL que retorna una tabla, la especificación indica que el tipo de retorno es
equivalente al tipo MULTISET el cual puede ser consultado (“queried”) como cualquier
tabla. Esta es una función no mandatoria dentro del estándar.
Extensiones CREATE TABLE.
Una de las declaraciones más importantes en el lenguaje de definición de datos (DDL) es
CREATE TABLE ya que permite al usuario definir el elemento de almacenamiento de sus
datos. De manera simplificada una tabla consiste de columnas con un nombre, un tipo de
dato asociado, las restricciones asociadas a la tabla sobre llaves primarias y foráneas y
los valores por defecto que tienen dichas columnas en los casos que no se especifique el
valor.
En SQL:2003 existen dos nuevas posibilidades para declarar una columna: la primera
como una columna identidad (identity) y la segunda como una columna generada, en
ambos casos el valor es generado en cada inserción; otra característica nueva es la
posibilidad de crear nuevas a tablas a partir de la estructura de las ya existentes a través
de la declaración CREATE TABLE LIKE, existe una variante de esta comando que
permite crear la nueva tabla solo con una parte de la estructura de la tabla original
mediante la declaración CREATE TABLE AS.
Declaración MERGE.
Anterior a SQL:2003 el lenguaje SQL incluía tres declaraciones para actualizar las tablas
o vistas de una base de datos: INSERT, UPDATE y DELETE, en la nueva versión se
agregó una cuarta declaración: MERGE.
Esta nueva declaración permite transferir un conjunto de tuplas o renglones de una tabla
hacia otra; normalmente este proceso se realiza en dos pasos, el primero consiste en
hacer un UPDATE de los renglones de la tabla destino, y un segundo paso consiste en
realizar un INSERT de aquellos renglones que no existen en la tabla destino, la
instrucción MERGE permite combinar estos dos pasos en uno solo haciendo más
eficiente este tipo de operaciones.
Generadores de secuencia.
Un generador de secuencia es un nuevo tipo de objeto de base de datos con un valor
numérico asociado.
Un generador de secuencia se realiza mediante la ejecución de una declaración CREATE
SEQUENCE, en esta declaración es posible definir el valor inicial, el valor mínimo,
máximo y el incremento.
El generador de secuencia contiene un valor base asociado al tiempo y un ciclo que
consiste en todos los valores posibles entre el valor mínimo y máximo. SQL:2003 incluye
53
una función que permite obtener el siguiente valor de la secuencia a través de la
instrucción NEXT VALUE FOR, el cual al ser ejecutada regresa el valor siguiente y
modifica el valor base de la función.
SQL:2003 también incluye declaraciones para modificar los generadores de secuencias
como ALTER SEQUENCE y RESTART WITH.
Columnas Identidad.
A pesar que los generadores de secuencia proveen un mecanismo para genera valores
únicos para columnas, es necesario la invocación de la función NEXT VALUE FOR cada
que se requiera acceder al siguiente valor, esto es una tarea que se tiene que realizar de
manera repetitiva lo cual no es lo más eficiente, ante esta situación SQL:2003 provee una
nueva característica que propone un mejor mecanismo para la generación de valores
únicos para la identificación de columnas, esta nueva función es IDENTITY COLUMNS.
Columnas identidad son columnas declaradas con la palabra reservada IDENTITY. Este
calificador hereda los mismos atributos de los generadores de secuencia como el valor
inicial, el incremento, el valor mínimo y máximo.
Cuando se establece este calificador de la columna ya no es necesario establecer un
valor para la columna identidad al momento de realizar un INSERT a la tabla, éste se
generara de manera automática y será insertado en la posición de dicha columna, es
importante destacar que solo puede existir una columna identidad en una tabla.
Columnas generadas.
Las columnas generadas están asociadas a una expresión escalar y su valor es
calculado en cada inserción o actualización basada en dicha expresión. Las expresiones
pueden contener valores de otras columnas dentro de la misma tabla que contiene la
columna generada y una columna generada no puede referenciar otra columna generada.
54
CUMPLIMIENTO DE LOS SMBD AL ESTÁNDAR SQL:2003
El nivel de cumplimiento que un sistema manejador de base de datos da al estándar de
SQL puede ser muy variable; esta situación es debido a que la implementación que
ejecuta cada sistema manejador es muy compleja, ya que atiende a diferentes factores
como la arquitectura del propio manejador, los aspectos de rendimiento, lineamientos u
objetivos generales que tiene cada sistema y también debido a aspectos diferenciales que
cada sistema guarda con respecto al mercado.
Existen numerosos documentos que indican el nivel de cumplimiento que dan los
sistemas manejadores al estándar, sin embargo las características que evalúan difieren
de un sistema a otro; algunas publicaciones con este tipo de información provienen
directamente del fabricante y por ende no muestran información en contraste con el resto
de los sistemas.
Como ya se mencionó anteriormente, muchas ocasiones éste cumplimiento se refiere a
satisfacer las características que establece el estándar, mas no así a que estas
características sean compatibles de un sistema manejador a otro que implementan el
estándar.
A continuación se enlistaran algunas características que establece el estándar y se
mencionará si su definición dentro del lenguaje SQL es estándar y compatible con el resto
de los sistemas manejadores en cuestión.
El estándar consta de nueve partes en las cuales están definidas todas las reglas y
características que sigue el estándar, por ende el número de características y reglas es
muy amplio. Para efecto de este trabajo, nos concentraremos en la parte de “Foundation”
donde están definidas las estructuras e instrucciones básicas del lenguaje SQL.
Dentro del aparatado “Foundation” estan definidos tres sublenguajes de SQL: el lenguaje
de definición de datos (DDL), el lenguaje de manipulación de datos (DML) y el lenguaje de
control de datos (DCL). Este trabajo se concentra en las dos partes principales: el “DDL”
y el “DML”.
Como primer lugar se mostrara un conjunto de características que serán evaluadas en
cada sistema manejador y se indicara el cumplimiento al estándar; estas características
están agrupadas en instrucciones de definición de datos y manipulación de datos. Dentro
del lenguaje de definición de datos existe una parte importante que refiere a la definición
de los tipos de datos que soportan las relaciones como atributos. Se incluirá un listado
con los tipos de datos estándar.
En la segunda parte se incluirán algunas consideraciones importantes de cada sistema
manejador en función al proceso de estandarización y nivel de cumplimiento al mismo.
Características DDL y DML
55
Las instrucciones o características evaluadas son las siguientes.











Creación de esquemas “CREATE SCHEMA”.
Creación de tablas “CRATE TABLE”
Creación de vistas “CREATE VIEW”.
Proyección “SELECT”
Selección “WHERE”
Ordenación “ORDER BY”
Primeros registros “LIMIT”.
Inserción “INSERT INTO”
Actualización “UPDATE “
Eliminación “DELETE”
Reuniones “JOIN”
ORACLE
Característica
Cumplimiento
CREATE SCHEMA
Da cumplimiento completo al estándar.
CREATE TABLE
Da cumplimiento completo al estándar.
CREATE VIEW
Da cumplimiento completo al estándar.
SELECT
Da cumplimiento completo al estándar.
WHERE
Da cumplimiento completo al estándar.
ORDER BY
Da cumplimiento completo al estándar. Los valores con marca de
nulos son ordenados antes que los valores “no nulos”. Este
comportamiento puede ser alterado con el uso del modificador
“NULLS FIRST, NULLS LAST” que indica el estándar.
LIMIT
Da cumplimiento parcial al estándar. Soporta la función
“ROW_NUMBER” del estándar y no así la instrucción “FETCH
FIRST”
INSERT INTO
Da cumplimiento completo al estándar.
UPDATE
Da cumplimiento completo al estándar.
DELETE
Da cumplimiento completo al estándar.
JOIN
Da cumplimiento completo al estándar.
Tabla 3 Características de Oracle
56
SQL SERVER
Característica
Cumplimiento
CREATE SCHEMA
Da cumplimiento completo al estándar.
CREATE TABLE
Da cumplimiento completo al estándar.
CREATE VIEW
Da cumplimiento completo al estándar.
SELECT
Da cumplimiento completo al estándar.
WHERE
Da cumplimiento completo al estándar.
ORDER BY
No da cumplimiento al estándar. Los valores con marca de nulos
son ordenados después de los valores “no nulos”. No incluye los
modificadores “NULLS FIRST, NULLS LAST” que indica el
estándar.
LIMIT
Da cumplimiento parcial al estándar. Soporta la función
“ROW_NUMBER” del estándar y no así la instrucción “FETCH
FIRST”
INSERT INTO
Da cumplimiento completo al estándar.
UPDATE
Da cumplimiento completo al estándar.
DELETE
Da cumplimiento completo al estándar.
JOIN
Da cumplimiento parcial al estándar, no soporta las reuniones
naturales y la inclusión del modificador “USING”
Tabla 4 Características de SQL Server
POSTGRESQL
Característica
Cumplimiento
CREATE SCHEMA
Da cumplimiento completo al estándar.
CREATE TABLE
Da cumplimiento completo al estándar.
CREATE VIEW
Da cumplimiento parcial al estándar. No permite la actualización
de vistas.
SELECT
Da cumplimiento completo al estándar.
57
Característica
Cumplimiento
WHERE
Da cumplimiento completo al estándar.
ORDER BY
Da cumplimiento completo al estándar. Los valores con marca de
nulos son ordenados antes que los valores “no nulos”. Este
comportamiento puede ser alterado con el uso del modificador
“NULLS FIRST, NULLS LAST” que indica el estándar.
LIMIT
Da cumplimiento completo al estándar.
INSERT INTO
Da cumplimiento completo al estándar.
UPDATE
Da cumplimiento completo al estándar.
DELETE
Da cumplimiento completo al estándar.
JOIN
Da cumplimiento completo al estándar.
Tabla 5 Características de POSTGRESQL
MYSQL
Característica
Cumplimiento
CREATE SCHEMA
Da cumplimiento completo al estándar.
CREATE TABLE
Da cumplimiento completo al estándar.
CREATE VIEW
Da cumplimiento completo al estándar.
SELECT
Da cumplimiento completo al estándar.
WHERE
Da cumplimiento completo al estándar.
ORDER BY
No da cumplimiento al estándar. Los valores con marca de nulos
son ordenados después de los valores “no nulos”. No incluye los
modificadores “NULLS FIRST, NULLS LAST” que indica el
estándar.
LIMIT
No da cumplimiento total al estándar.
INSERT INTO
Da cumplimiento completo al estándar.
UPDATE
Da cumplimiento completo al estándar.
DELETE
Da cumplimiento completo al estándar.
JOIN
Da cumplimiento parcial al estándar. No permite reuniones
58
Característica
Cumplimiento
completas “FULL JOIN”
Tabla 6 Características de MYSQL
Tabla resumen.
Característica
ORACLE
SQLSERVER
POSTGRESQL
MYSQL
CREATE
SCHEMA




CREATE TABLE




CREATE VIEW




SELECT




WHERE




ORDER BY




PARCIAL
PARCIAL


INSERT INTO




UPDATE




DELETE




JOIN

PARCIAL

PARCIAL
LIMIT
Tabla 7 Tabla Resumen de características
Tipos de datos
Los tipos de datos que soporta cada manejador son un factor importante en aspectos de
migración y compatibilidad entre diferentes sistemas manejadores. El estándar define
varios tipos de datos agrupados en cuatro partes principales: tipos numéricos, de cadena
de caracteres, de fecha y tiempo y datos binarios como cadenas grandes de caracteres.
Podemos decir que todos los tipos de datos establecidos en el estándar son soportados
por los sistemas manejadores de acuerdo a la especificación del valor de dato que
almacena. Sin embargo en algunos casos el nombre del tipo de dato difiere de un sistema
a otro y eso no permite una compatibilidad sin cambio; en otros casos el tipo es soportado
aunque los rangos y el espacio de memoria asignado son diferentes. En el apartado de
experimentación se estudiaran estos casos.
59
A continuación se muestra una tabla comparativa con los tipos de datos que soporta cada
manejador en su aspecto general.
ORACLE
SQLSERVER
POSTGRESQL
MYSQL
CHARACTER




CHARACTER
VARYING




CHARACTER
LARGE
OBJECT




BINARY
LARGE
OBJECT




NUMERIC




DECIMAL




SMALLINT




INTEGER




BIGINT




FLOAT




REAL




DOUBLE
PRECISION




BOOLEAN




DATE




TIME




TIMESTAMP




Tabla 8 Tipos de datos
Como podemos ver existen algunos tipos de datos que no son compatibles, esta
incompatibilidad es debida a que el sistema no reconoce la palabra, es decir, se trata de
un error léxico; sin embargo el manejador ofrece un tipo de dato para almacenar dicho
60
valor. Para algunos de estos casos existen ciertas alternativas que pueden definir un tipo
de datos que almacenen ese tipo de valor bajo otro tipo de dato diferente al que establece
el estándar.
Otros aspectos de cumplimiento al estándar SQL:2003
Aspectos generales sobre el cumplimiento de ORACLE al estándar SQL:2003.
El estándar de SQL ha sido uno de los más populares en el área de computo (Lee 2003).
Aunque el volumen de características y especificaciones alrededor del estándar ha
crecido y se ha vuelto más compleja y sofisticada, SQL ha evolucionado para cubrir de
manera completa las demandas de crecimiento alrededor de este lenguaje.
SQL:2003 incluye grandes mejoras en un gran número de áreas clave del estándar. En
primer lugar encontramos las características de programación orientada a objetos en el
modelo relaciones. En segundo lugar SQL:2003 incluye y revoluciona una serie de
características y funciones de OLAP. En tercer lugar encontramos que SQL:2003 ha
integrado una parte muy amplia e importante para el manejo e integración de XML con
SQL, esto en la parte 14 del estándar (XML-Related Specifications SQL/XML).
Oracle, como el primer sistema comercial que implementó SQL hace 25 años, continúa
como líder en la industria de las bases de datos en la implementación del estándar de
SQL. De hecho, muchas de las características que incluye SQL:2003 ya estaban
presentes en la versión 8i (Multisets, funciones OLAP, etc). En la versión 9i se incluyeron
funciones adicionales de OLAP, funciones de tabla (table functions), tipos de datos de
colecciones (nested collections types), datos estructurados tipo “Final”. La versión 10g
soporta nuevas características adicionales de SQL:2003, como el manejo avanzado de
“Multisets” así como muchas otras características que van más allá del estándar como el
manejo de expresiones regulares y funciones estadísticas.
Oracle es compatible o cumple con el estándar SQL:2003 en las tres nuevas categorías
clave del estándar:



Esquema Objeto-Relacional (Object-Relational).
Inteligencia de Negocios (Business Intelligence).
SQL/XML.
Características Objeto-Relacional
El incremento en aplicaciones más complejas de eCommerce y eBusiness, ha hecho que
se adopte cada vez más el esquema de programación orientado a objetos para simplificar
61
y manejar dicha complejidad. Para tal efecto se han tomado lenguajes de programación
orientados a objetos como el caso de Java o C++.
El modelo tradicional relacional estaba lejos de cubrir estas necesidades desde el punto
de vista de orientación a objetos, esto ha marcado el crecimiento de nuevas necesidades.
Desde la versión del estándar SQL:1999 se introdujeron características que seguían en
alguna medida el paradigma orientado a objetos y lo cual permita simplificar las tareas de
almacenar y recuperar estructuras complejas y estructuradas de objetos. Oracle soporta
estas nuevas características desde su versión Oracle 8/8i. SQL:2003 realizó mejoras en
esta área definiendo estas nuevas características:
Soporte para tipos de datos “Multiset”.
El nuevo tipo de datos “Multiset” es un tipo de datos que almacena colecciones
desordenadas. Desde la versión 8, estas características son soportadas e incluye
operaciones para el soporte de este tipo de datos.
Soporte Avanzado para tipos “Multiset”.
SQL:2003 define soporte avanzado para tipos de datos Multiset con operadores de
comparación (Comparison) y asignación (Set) como uniones e intersecciones (UNION,
INTERSECTION). Estas características están soportadas desde la versión 10g.
Tipos de colección agrupadas (Nested Collection Types).
SQL:2003 soporta dos tipos de colecciones, el “Array” y el “Multiset” adicionalmente al tipo
de datos “Nested Table”, Oracle soporta el tipo “Array” y “Varray” desde la versión 8. Las
colecciones agrupadas de “Array” y “Varray” son soportadas a partir de la versión 9i.
Tipos estructurados “Final”.
Un tipo de datos definido por el usuario puede ser creado con el modificador “Final” o “Not
Final” para indicar cuando un subtipo de datos puede heredar de éste. Oracle soporta
estas características desde la versión 9i.
Características de inteligencia artificial.
La proliferación de la información y el tamaño de las bases de datos siguen creciendo, las
empresas desean obtener información que se encuentra oculta es esas bases de datos.
Herramientas como Datawarehousing, OLAP, Minería de Datos se han convertido
esenciales para las organizaciones para extraer y ejecutar inteligencia de negocios que
apoyen a la toma de decisiones.
En el pasado, todas las funciones de OLAP “On-Line Analytical Processing” eran
ejecutadas fuera de la base de datos, en un servidor OLAP separado y que utilizaban
aplicaciones no basadas en estándares. Esto hizo aparente que uno de los impedimentos
que tenían las aplicaciones OLAP era el mover grandes cantidades de información desde
el servidor de base de datos hasta el servidor OLAP. Una solución simple a este problema
62
es el procesar las funciones OLAP dentro de la misma base de datos utilizando las
funciones estándar de SQL.
Para este efecto, ANSI publico en el año 2000 una adición al estándar SQL:1999 donde
definía una extensa lista de funciones OLAP las cuales ahora forman parte del estándar
SQL:2003. Oracle fue uno de los principales colaboradores en la definición de estas
funciones OLAP dentro del estándar. Estas características son soportadas desde la
verstion 9i de Oracle. El estándar incluye también una serie de funciones orientadas a
tareas de minería de datos dentro de las que podemos mencionar:
Window Functions: SQL:2003 define funciones de cálculo como ROW_NUMBER, RANK,
DENSE_RANK, PERCENT_RANK, CUME_DIS, también icluye funciones agregadas
como INVERSE DISTRIBUTION, HYPOTHETICAL SET, entre otras.
Clausulas NULL FIRST, NULL LAST en operaciones de ordenación como ORDER BY.
Esta clausula permite establecer el orden de la secuencia de las marcas de nulo (NULL).
Funciones de tabla. Una función de tabla está definida como una función que produce un
conjunto de renglones como salida. Estas funciones son soportadas desde la versión 9i y
proveen soporte para la ejecución de transformaciones implementadas en PL/SQL o Java.
Inverse Percentile Family
Una pregunta de análisis frecuente es encontrar el valor dentro de un conjunto de datos
que corresponde a un por ciento específico. Oracle incluye dos funciones para obtener
estos valores: PERCENTILE_CONT y PERCENTILE_DISC. Estas funciones pueden ser
utilizadas como ya sea como funciones de agregación o como funciones de reporte de
agregación. Cuando son usadas como funciones de agregación retornan un valor simple
por cada conjunto ordenado de datos, y cuando son usadas como funciones de reportes,
éstas repiten el valor sobre cada renglón devuelto. PERCENTILE_DISC retorna el valor
actual “discreto” el cual es el más cercano al valor porcentual especificado, mientras que
la función PERCENTILE_CONT calcula el valor porcentual “continuo” utilizando una
interpolación linear. Estas funciones utilizan una nueva clausula para especificar el orden:
WITHIN GROUP.
Hypothetical Rank y Distribution Family.
Este tipo de funciones permiten conocer la forma en se comportaría un nuevo valor si
fuese agregado a nuestro conjunto de datos existente. Estas funciones retornan la
posición (Rank) o el valor porcentil el cual sería asignado si un nuevo renglón fuera
insertado en el conjunto de datos.
Las funciones hipotéticas pueden calcular RANK, RANK_DENSE, PERCENT_RANK y
CUME_DIST.
Características de XML.
63
El volumen de datos que es representado actualmente en formato XML ha crecido
considerablemente, de aquí que ha surgido la necesidad de poder almacenar este tipo de
datos en los manejadores de base de datos. Con las nuevas características de SQL/XML
se pueden tener todos los beneficios de un sistema relacional además de los beneficios
de XML en un mismo sistema. La parte 14 del estándar SQL:2003 define la forma en que
SQL puede ser utilizado en conjunto con XML dentro de una misma base de datos. Esta
parte define detalladamente el nuevo tipo de dato: XML, los valores de un tipo XML, el
mapeo entre las construcciones SQL y las construcciones XML y las funciones para
generar XML desde datos SQL. Estas funciones están soportadas desde la versión 91
Release 2 de Oracle como parte integral de XML-DB.
XML-DB incluye además un conjunto de extensiones de SQL para realizar consultas,
modificaciones y transformación de este tipo de datos. Oracle trabaja muy cerca del
comité de estandarización para estandarizar estas extensiones.
Aspectos generales sobre el cumplimiento de SQL SERVER al estándar SQL:2003.
SQL SERVER da cumplimiento completo al primer nivel (entry-leve) del estándar SQL y
un cumplimiento parcial a niveles superiores (Turley 2005).
Inserción simultanea de registros.
El estándar permite hacer la inserción de varios registros a la vez sin la necesidad de
especificar la palabra VALUES en cada registro. SQL Server no soporta dicha función.
Columnas únicas (UNIQUE)
SQL Server sigue el estándar y permite la identificación de columnas únicas.
Llaves autogeneradas (Automatic key generation)
SQL Server soporta dicha característica pero con una diferencia sintáctica; SQL Server
adiciona el atributo IDENTITY que es aplicado a una columna y permite que su valor sea
auto-generado siguiendo una secuencia.
Eliminación de registros (TRUNCATE)
SQL Server sigue el estándar y permite eliminar todos los registros de una tabla dada. Su
ejecución es permitida con otras operaciones.
64
Listas de base de datos
El estándar no especifica una función para obtener un listado de las bases de datos
alojadas en el manejador, sin embargo, esta lista se encuentra almacenada dentro de una
tabla del propio manejador; su acceso es mediante una proyección sobre cierto atributo
de dicha tabla. SQL Server permite el listado de las bases de datos a través de la claúsula
EXEC SP_HELPDB.
Listas de esquemas
Al igual que las bases de datos, los esquemas están almacenados en una tabla del
sistema, el estándar permite obtener una lista de dichos esquemas a través de una
consulta a dicha tabla. SQL Server sigue el estándar:
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA.
Listado de tablas
La parte 11 del estándar de SQL especifica el esquema INFORMATION_SCHEMA el cual
forma parte de los catálogos de cualquier base de datos.
SQL Server sigue el estándar mediante la ejecución de esta sentencia: SELECT * FROM
INFORMATION_SCHEMA.TABLES
Versión del sistema
El estándar permite conocer la versión del sistema manejador mediante la ejecución de la
sentencia:
SELECT CHARACTER_VALUE
FROM INFORMATION_SCHEMA.SQL_IMPLEMENTATION_INFO
WHERE IMPLEMENTATION_INFO_NAME='DBMS
SQL Server no implementa IMPLEMENTATION_SCHEMA_INFO y por tanto no sigue el
estándar. SQL Server implementa una función propietaria: SELECT @@VERSION
Aspectos generales sobre el cumplimiento de POSTGRESQL al estándar SQL:2003
65
PostgreSQL hace un cumplimiento parcial al estándar SQL:2003 (ISO/IEC 9075
“Database Language SQL”). El proyecto PostgreSQL clama por cumplir el estándar con
la última versión oficial del estándar donde dicho estándar no contradiga las funciones
tradicionales o el sentido común del proyecto. El proyecto PostgreSQL no está
representado en el grupo de trabajo del ISO/IEC 9075 en la preparación de la versión
pero a pesar de esto muchas de las funciones requeridas por el estándar están
soportadas (PostgreSQL 2008).
El estándar SQL-92 definió tres conjuntos de características para el cumplimiento:
entrada, intermedio y completo. PostgreSQL cumplió solo el nivel de entrada a raíz que
los dos niveles superiores eran demasiado voluminosos y entraban en conflicto con el
comportamiento nativo del mismo.
Iniciando con SQL:1999, el estándar definió un conjunto más largo de características
individuales a diferencia de tres conjuntos como el SQL:92. Un conjunto más largo de
estas características representan la base “Core”, donde cada implementación al
cumplimiento de SQL debe satisfacer. El resto de las características son netamente
opcionales.
PostgreSQL cubre las partes 1,2,11 y 14. La parte 3 es similar a la interface ODBC, y la
parte 4 es similar al lenguaje de programación PL/pgSQL.
PostgreSQL soporta la mayoría de características más significativas del estándar
SQL:2003. Fuera de las 164 características obligadas que dictan el cumplimiento base del
estándar, PostgreSQL cumple al menos 150. Es importante notar que al momento de
esta escritura, ningún manejador de base de datos actual cumple con la base del estándar
SQL:2003 al 100% (PostgreSQL 2008).
Aspectos generales sobre el cumplimiento de MYSQL al estándar SQL:2003
MySQL cumple con configuraciones establecidas que pueden cambiar de acuerdo a las
opciones incrementando el nivel en que se apliquen.
Inserciones simultáneas.
El estándar de MySQL soporta la inserción de varias líneas de datos al mismo tiempo
haciendo uso de las clausulas INSERT INTO…. VALUES
Concatenación.
El estándar de MySQL soporta la función CONCAT para la unión de registros.
Restricciones
66
Columnas únicas (unique)
MySQL en su estándar permite la combinación de datos únicos (solamente en valores)
proporcionando un valor NOT NULL.
Generación Automática de Llave (automática key generation)
El estándar de MySQL no soporta esta característica y como alternativa asigna un
atributo condicionando el atributo a través de AUTO_INCREMENT asignado a un valor.
Asegurando la inserción con variantes como ALWAYS Y BY DEFAULT.
Eliminación de datos (trúncate table)
El uso del comando TRUNCATE en MySQL no sigue generalmente el estándar y en
alguno de los casos es el equivalente a un DELETE dependiendo del manejador de la
base de datos.
Listas de bases de datos.
MySQL a través del comando SHOW DATABASES muestra la lista de las bases de datos
almacenados en nuestro manejador.
Lista de esquemas.
El estándar de MySQL no soporta el comando SCHEMA_NAME.
Lista de tablas.
El estándar de MySQL no soporta el comando SCHEMA.TABLES, sin embargo con el uso
del comando SHOW TABLES podemos obtener la lista de las tablas que componen
nuestra base de datos.
Descripción de Tablas.
El estándar de MySQL no soporta SCHEMA.TABLE sin embargo usando el comando
TABLE_NAME podemos obtener los datos solicitados.
67
68
EXPERIMENTACIÓN
Los experimentos propuestos en este trabajo tiene como objetivo medir el nivel de
compatibilidad de instrucciones SQL en cuatro sistemas manejadores de base de datos:
ORACLE, SQLSERVER, POSTGRESQL y MYSQL.
Las instrucciones SQL que se ejecutarán están definidas en el apartado de Lenguaje de
Definición de Datos (DDL) y en la parte del Lenguaje de Manipulación de Datos (DML), la
definición de estos sublenguajes está definida en la parte dos del estándar SQL:2003
marcada como “Foundation”.
Para el caso del Lenguaje de Definición de Datos la experimentación se centra en
instrucciones de creación y eliminación de esquemas y relaciones bajo las siguientes
instrucciones SQL:
CREATE SCHEMA
DROP SCHEMA
CREATE TABLE
DROP TABLE
En la creación y definición de relaciones (tablas) se evaluó también la compatibilidad de
los tipos de datos y la definición de llaves primarias y foráneas de una relación.
Para el caso del Lenguaje de Manipulación de Datos se incluyeron las siguientes
instrucciones SQL:
SELECT
INSERT INTO
UPDATE
DELETE
WHERE
ORDER BY
Las pruebas se ejecutaron en las versiones más recientes disponibles con el fabricante al
momento de la ejecución de estas pruebas. Las versiones fueron:
Sistema
Versión
69
Sistema
Versión
ORACLE
10g
SQLSERVER
2008
POSTGRESQL
8.3
MYSQL
5.1
Tabla 9 Versiones SMBD en la experimentación
Los sistemas manejadores se instalaron bajo las siguientes plataformas de software y
hardware:
SMBD
Sistema Operativo
Hardware
ORACLE
UNIX-AIX
HP ITANIUM
SQLSERVER
Windows Server 2003 SP2
XENON 2.0 GHZ, 1GB
RAM, DISCO DURO 120
GB.
POSTGRESQL
Windows Vista Home
Edition
MYSQL
Windows Vista Home
Edition
Core 2 DUO 2.66 GHZ,
4 GB RAM, DISCO DURO
500 GB.
Core 2 DUO 2.66 GHZ,
4 GB RAM, DISCO DURO
500 GB.
Tabla 10 Plataforma de experimentación
El estándar establece una estructura lógica sobre la cual se organizan los objetos de la
base de datos; el estándar establece los siguientes tipos de objetos:
Catálogo (CATALOG).
Esquema (SCHEMA)
Tablas (TABLE).
Índices (INDEX).
Vistas (VIEW).
70
Catálogos (Catalogs)
El estándar define un catalogo como un conjunto de esquemas, descriptores y datos
dentro de un ambiente SQL (ISO/IEC 2008). El objeto catalogo presume la más alta
precedencia, sobre esta se crean el resto de los objetos, el estándar establece que la
creación de este objeto se deja abierto a la implementación del sistema manejador, no
existe una instrucción SQL del estándar para crearla. Esta objeto, solo existe en el
sistema PostgreSQL y permite guardar la estructura y metadatos de la base de datos, en
el resto de los sistemas no existe, en su lugar existe un objeto que puede representar el
objeto de mayor precedencia especificado por el estándar, este es el caso del objeto
denominado “Base de Datos” (DATABASE).
El objeto base de datos (DATABASE) es aquel donde están definidas los esquemas,
relaciones, datos, restricciones y reglas de integridad de un conjunto de datos (Melton
2003), esta descripción coincide con la propuesta por el estándar para el objeto tipo
“catalogo” (CATALOG).
El estándar no establece alguna instrucción para crear el objeto catalogo, sin embargo
todos los sistemas manejadores implementan la instrucción “CREATE DATABASE” para
crear el objeto base de datos, el cual no está definido en el estándar. Todos los sistemas
manejadores en cuestión implementan esta instrucción y su ejecución resulta en el mismo
resultado: la creación del objeto “DATABASE”. Sin embargo, el caso de ORACLE acepta
la instrucción pero requiere de varios parámetros para la ejecución de la instrucción, este
es debido a que la estructura lógica que tiene ORACLE es más grande y compleja que la
que define el estándar, el resto de los manejadores lo ejecutan de manera compatible.
Experimento 1: “CREATE DATABASE”.
1.1 ORACLE
Figura 3 CREATE DATABASE-ORACLE
71
1.2 SQLSERVER
Figura 4 CREATE DATABASE-SQLSERVER
1.3 POSTGRESQL
Figura 5 CREATE DATABASE POSTGRESQL
72
1.4 MYSQL
Figura 6 CREATE DATABASE-MYSQL
Los manejadores también implementan una instrucción para eliminar dicho objeto, este el
case de “DROP DATABASE”, al igual que la instrucción “CREATE DATABASE”, ésta es
compatible con todos los sistemas manejadores en cuestión.
Así, podemos decir que la instrucción “CREATE DATABASE” es compatible con todos los
sistemas manejadores de base de datos evaluados en este trabajo, a pesar que la
instrucción no existe en el estándar SQL:2003.
Esquemas (Schemas).
El estándar define un esquema como una colección de descriptores en estado
persistente, estos descriptores son tablas, vistas, procedimientos almacenados,
funciones, etc. La creación y eliminación de esquemas se realiza a través de la ejecución
de instrucciones SQL (Melton 2003).
Los catálogos y esquemas son elementos de organización lógica que utilizan los sistemas
manejadores para alojar todos los objetos asociados a una base de datos.
La forma de organización de estos objetos depende directamente del manejador en
cuestión aún cuando utilizan las mismas instrucciones de SQL para su creación y
mantenimiento, sin embargo, una misma instrucción puede generar una estructura lógica
diferente en cada manejadores.
La instrucción asociada en SQL:2003 para la creación de esquemas está definida en la
siguiente regla:
73
CREATE SCHEMA <schema name clause>
[ <schema character set or path> ]
[ <schema element>... ]
La instrucción “CREATE SCHEMA” es aceptada por los cuatro sistemas manejadores de
acuerdo a la especificación del estándar, sin embargo su ejecución resulta en la creación
de diferentes objetos lógicos dentro de la base de datos.
En el caso de, ORACLE, SQLSERVER y POSTGRESQL, la instrucción genera el mismo
tipo de objeto dentro de la organización de la base de datos de acuerdo a la
especificación del estándar, esto permite tener múltiples esquemas dentro de una misma
base de datos.
Para el caso de MySQL el objeto “DATABASE” y “SCHEMA” tienen el mismo significado,
ambos se crean con el mismo objeto al mismo nivel lógico, es decir, los dos crean una
base de datos en cierto directorio y con cierto espacio físico dentro del sistema.
Normalmente el uso de esquemas permite tener objetos con el mismo nombre bajo
diferentes esquemas y facilita también los aspectos de seguridad y acceso a los objetos y
datos de una base de datos.
Experimento 2: “CREATE SCHEMA”
2.1 ORACLE
ORACLE si integra el objeto esquema según el estándar, pero la sintaxis que define el
manejador difiere de la establecida por el propio estándar. Una diferencia importante es
que el nombre del esquema debe ser el mismo de un usuario ya dado de alta en el
sistema manejador ya que será éste el dueño del esquema. En cuanto al aspecto de la
estructura lógica si cumple de acuerdo al tipo de objeto que representa ya que permite
agregar múltiples esquemas sobre una misma base de datos.
74
Figura 7 CREATE SCHEMA-ORACLE
2.2 SQLSERVER
Figura 8 CREATE SCHEMA - SQLSERVER
75
2.3 POSTGRESQL
Figura 9 CREATE SCHEMA POSTGRESQL
2.4 MySQL
Figura 10 CREATE SCHEMA MYSQL
Como se mencionó anteriormente, esta instrucción es aceptada a nivel sintáctico por
todos los manejadores, sin embargo, el tipo de objeto lógica que crea en cada sistema
puede cambiar, este fue el caso de MYSQL que crea un objeto “DATABASE” y no así un
objeto “SCHEMA”.
Tablas (Tables)
El estándar establece una instrucción para la definición y creación de una tabla
persistente o temporal dentro de una base de datos. De acuerdo al estándar estas tablas
se crean sobre un esquema perteneciente a una base de datos.
El estándar establece la siguiente regla para esta instrucción:
76
<table definition> ::=
CREATE [ <table scope> ] TABLE <table name> <table contents source>
[ ON COMMIT <table commit action> ROWS ]
<table contents source> ::=
<table element list>
| <typed table clause>
| <as subquery clause>
<table scope> ::= <global or local> TEMPORARY
<global or local> ::=
GLOBAL
| LOCAL
<table commit action> ::=
PRESERVE
| DELETE
<table element list> ::=
<left paren> <table element> [ { <comma> <table element> }... ] <right paren>
<table element> ::=
<column definition>
| <table constraint definition>
| <like clause>
<typed table clause> ::=
OF <path-resolved user-defined type name> [ <subtable clause> ]
[ <typed table element list> ]
<typed table element list> ::=
<left paren> <typed table element>
[ { <comma> <typed table element> }... ] <right paren>
<typed table element> ::=
<column options>
| <table constraint definition>
| <self-referencing column specification>
<self-referencing column specification> ::=
REF IS <self-referencing column name> [ <reference generation> ]
<reference generation> ::=
SYSTEM GENERATED
| USER GENERATED
| DERIVED
<self-referencing column name> ::= <column name>
<column options> ::= <column name> WITH OPTIONS <column option list>
<column option list> ::=
[ <scope clause> ] [ <default clause> ] [ <column constraint definition>... ]
<subtable clause> ::= UNDER <supertable clause>
<supertable clause> ::= <supertable name>
<supertable name> ::= <table name>
<like clause> ::= LIKE <table name> [ <like options> ]
<like options> ::= <like option>...
<like option> ::=
<identity option>
| <column default option>
| <generation option>
<identity option> ::=
INCLUDING IDENTITY
| EXCLUDING IDENTITY
<column default option> ::=
INCLUDING DEFAULTS
| EXCLUDING DEFAULTS
<generation option> ::=
INCLUDING GENERATED
| EXCLUDING GENERATED
77
<as subquery clause> ::=
[ <left paren> <column name list> <right paren> ] AS <subquery>
<with or without data>
<with or without data> ::=
WITH NO DATA
| WITH DATA
De aquí podemos inferir la instrucción mínima:
CREATE TABLE NOMBRE_TABLA(
<column_definition>
);
Esta instrucción es compatible para todos los sistemas manejadores en cuestión, es
reconocida léxica, sintáctica y semánticamente por todos.
Experimento 3: “CREATE TABLE”
3.1 ORACLE
Figura 11 CREATE TABLE - ORACLE
78
3.2 SQLSERVER
Figura 12 CREATE TABLE-SQLSERVER
3.3 POSTGRESQL
Figura 13 CREATE TABLE-POSTGRESQL
79
3.4 MySQL
Figura 14 CREATE TABLE-MYSQL
Como se pudo observar, esta instrucción es totalmente compatible entre todos los
sistemas manejadores de base de datos que se están evaluando ya que se ejecuto sin
error y crean el mismo tipo de objeto dentro de la base de datos.
Tipos De Datos (Data Types)
En la gramática para la creación de una tabla existe un elemento denominado
<column_definition>, este elemento está representado por la definición de atributos que
tiene la tabla, así como el tipo y longitud de cada uno de ellos. Los tipos de datos son uno
de los elementos más importantes en la definición de tablas ya que es ahí donde se
encuentran varias diferencias en los elementos sintácticos y semánticos sobre la
implementación de cada sistema.
Es importante notar que la compatibilidad de los datos puede ser vista como el tipo de
dato que representa (valor) y la definición del mismo en el sistema manejador de base de
datos. Es decir, un dato puede ser compatible entre diferentes sistemas por el tipo de dato
en cuanto a su almacenamiento, aunque la definición del dato dentro del propio sistema
sea diferente. Este trabajo se refiere a la compatibilidad en cuanto a la definición de los
tipos de datos que se establece a través del lenguaje SQL
El estándar establece un tipo de dato como un conjunto de valores representables.
El estándar SQL:2003 soporta tres conjuntos de tipos de datos:



Datos predefinidos.
Tipos construidos.
Tipos definidos por el usuario.
80
Los tipos predefinidos son normalmente llamadas “inter-construidos”, los tipos definidos
por el usuario pueden ser definidos por un estándar, una implementación o por una
aplicación. Un tipo inter-construido se especifica utilizando alguno de los constructores de
tipos de datos de SQL: ARRAY, MULTISET y REF. Los tipos de datos de arreglo
(ARRAY) y multiconjunto (MULTISET) son generalmente conocidos como tipo de
colección.
El estándar define los tipos predefinidos mediante las siguientes palabras reservadas:
CHARACTER.
CHARACTER VARYING.
CHARACTER LARGE OBJECT.
BINARY LARGE OBJECT.
NUMERIC.
DECIMAL.
SMALLINT.
INTEGER.
BIGINT.
FLOAT
REAL.
DOUBLE PRECISION.
BOOLEAN.
DATE.
TIME.
TIMESTAMP.
INTERVAL.
Los tipos CHARACTER, CHARACTER VARYING y CHARACTER LARGE OBJECT son
referidos como tipos de cadenas de caracteres.
Los tipos BINARY LARGE OBJECT son referidos como cadenas binarias.
Los tipos CHARACTER LARGE OBJECT y BINARY LARGE OBJECT son referidos como
cadenas largas de objetos.
Los tipos NUMERIC, DECIMAL, SMALLINT, INTEGER y BIGINT son referidos como tipos
de números exactos.
Los tipos FLOAT, REAL y DOUBLE PRECISION son referidos como números
aproximados.
Los tipos de números exactos y aproximados son referidos de manera general como tipos
numéricos.
Los tipos TIME WITHOUT TIME ZONE y TIME WITH TIME ZONE son referidos como
tipos de tiempo.
Los tipos de datos DATE, TIME y TIMESTAMP son referidos como tipos fecha-hora.
81
Los tipos TIMESTAMP WITHOUT TIME ZONE y TIMESTAMP WITH TIME ZONE son
referidos como tipos de fecha-hora de sistema con zona horaria.
Tipos numéricos.
Todos los tipos de datos numéricos establecidos en el estándar son soportados por tres
sistemas manejadores: PostgreSQL, MySQL y SQLSERVER, sin embargo encontramos
que existe cierta diferencia ya que el número de bytes asignados y por ende el rango que
soporte difiere uno del otro. El caso de ORACLE existen dos tipos de datos que no son
soportados al menos sintácticamente.
Este cumplimiento o compatibilidad con algunos tipos de datos establecidos en el
estándar se cumple a nivel de declaración léxica y sintáctica ya que una vez que esta
declaración es procesada por el sistema manejador de base de datos éste lo convierte a
un tipo de dato interno del manejador con un rango, precisión y escala diferente , este es
el caso de ORACLE que utiliza un tipo de dato interno denominado NUMBER que permite
almacenar datos numéricos fijos y aproximados en un mismo tipo de dato.
Podemos encontrar que existe compatibilidad léxica y semántica en la implementación del
estándar SQL que hacen los sistemas manejadores en cuanto a los tipos de datos
numéricos pero no existe una compatibilidad semántica de los mismos.
Podemos decir que un valor numérico puede ser compatible en los diferentes
manejadores bajo distintos tipos de datos aunque éste no sea el óptimo en cuanto al
espacio que ocupa.
Experimento 4: “Tipos de datos numéricos”
4.1 ORACLE.
Figura 15 TIPO NUMERICO-ORACLE
82
En este caso podemos ver que ORACLE no soporta el tipo de dato “BIGINT” ya que no
reconoce la palabra reservada aunque tiene un tipo de dato que permite almacenar datos
de esta naturaleza.
4.2 SQLSERVER
Figura 16 TIPO NUMERICO-SQLSERVER
83
4.3 POSTGRESQL
Figura 17 TIPO NUMERICO-POSTGRESQL
4.4 MYSQL.
Figura 18 TIPO NUMERICO-MYSQL
Como ya se mencionó anteriormente, tres sistemas aceptan todos los tipos de datos
numéricos establecidos por el estándar ya que pudimos comprobar que pasan
correctamente el análisis léxico y sintáctico; en cuanto al análisis semántico que realizó
cada manejado éste se realizó correctamente pero cada manejador dio una interpretación
84
diferente sobre la precisión, escala y rango sobre el tipo de dato. En algunos casos, el
manejador realizó conversiones a tipos de datos nativos del propio manejador.
Esto se puede visualizar en las siguientes ejecuciones:
En el caso de SQLSERVER se puede observar que el tipo de datos doble precisión fue
convertido a un tipo de punto flotante:
Figura 19 CONVERSION TIPO NUMERICO SQLSERVER
Para el caso de POSTGRESQL, nuevamente encontramos que el tipo numérico mantuvo
su definición, pero el tipo de dato decimal fue convertido por el manejador a un tipo
numérico de manera interna. Lo mismo ocurrió con el tipo de dato flotante que fue
convertido a un tipo de doble precisión.
Figura 20 CONVERSION SQL SERVER
85
En el caso de MYSQL, se pudo observar que el tipo numérico y decimal fueron
convertidos a decimal, y el tipo real y doble fueron convertidos a su vez a doble.
Figura 21 CONVERSION TIPO NUMERICO-MYSQL
De acuerdo a las ejecuciones realizadas fue posible observar que para el tipo de datos
numérico exactos podemos utilizar el tipo de dato NUMERIC que nos ofrece una mayor
compatibilidad entre los manejadores ya que nos permite definir un tipo numérico
indicando la precisión y escala del mismo; así es posible definir los tipos numéricos
exactos, positivos y negativos así como aquellos con decimales con una precisión de
hasta 39. En cuanto a los tipos REAL, FLOAT y DOBLE PRECISION se puede ocupar
esta último indicando la precisión que requiere el valor número a almacenar. Con esta
acción se pueden definir tipos de datos que almacenen de manera precisa los valores
numéricos que requiera el esquema de datos sin perder precisión y evitando errores como
el sobrepasar los rangos máximos sobre aquellos tipos que convierte el manejador.
De lo anterior, podemos representar un valor entero de la siguiente manera:
NUMBER(10,0)
Un entero largo:
NUMBER(19,0)
O bien un valor decimal con una escala de 2:
NUMBER(12,2)
86
Experimento 5: “Definición de datos numéricos estándar”
De acuerdo a experimento anterior, se implementará el resultado para generar una
definición que cumpla con el estándar y pueda ser ejecutada e interpretada por todos los
sistemas manejadores en cuestión.
5.1 ORACLE
En este caso se puede ver que este acercamiento produce el mismo resultado y permite
definir varios tipos de datos bajo la definición de uno sólo:
Figura 22 TIPO ESTANDAR NUMERICO-ORACLE
5.2 POSTGRESQL
Aquí se puede visualizar que el efecto fue el mismo ya que todos los tipos de datos
NUMERIC conservaron su tipo como un tipo interno del manejador y respetando la
definición de la precisión y escala.
87
Figura 23 TIPO ESTANDAR NUMERICO-SQLSERVER
5.3 SQLSERVER
La definición fue ejecutada sin error y todos los datos tipo NUMERIC conservaron el tipo
original y mantuvieron la precisión y escala del mismo.
Figura 24 TIPO ESTANDAR NUMERICO-SQLSERVER
88
5.4 MYSQL
Para este manejador es posible observar que la declaración estándar NUMERIC resulta
en una conversión al tipo interno DECIMAL del manejador respetando la precisión y
escala del tipo de dato.
Figura 25 TIPO ESTANDAR NUMERICO-MYSQL
Con este acercamiento podemos decir que es posible representar cualquier valor
numérico computable exacto sobre cualquier sistema manejador de base de datos que
implemente el tipo de dato estándar NUMBER(m[,n]) ya que permite conservar el espacio
y valor máximo en base a la precisión y escala del numero sin el riesgo de tomar los
rangos de datos que internamente el sistema manejador asigna a cierto tipo de datos que
puedan llevar a errores de “stackoverflow”.
Tipo Cadena de Caracteres
El estándar SQL:2003 establece los siguientes tipos de datos para almacenar cadenas:
CHARACTER
CHARACTER VARYING
CHARACTER LARGE OBJECT,
NCHARACTER
NCHARACTER VARYING
89
Donde CHARACTER permite almacenar “n” caracteres de manera consecutiva y fija
donde n representa el número máximo de caracteres que se pueden almacenar, cuando
la cadena es menor a n, el manejador rellena con blancos a la derecha dicha cadena
hasta completar el número definido en n. Estos espacios en blanco junto con el valor de la
izquierda son almacenados en el campo de la base de datos. Al obtener estos valores de
la base de datos, el manejador elimina dichos espacios en blanco.
CHARACTER VARYING permite almacenar “n” caracteres de manera variable, es decir,
cuando la cadena es menor a n, esta es almacenada tal cual sin agregar espacios.
Los tipos NCHARACTER y NCHARACTER VARYING actúan de la misma manera que los
anteriores, la diferencia radica en el conjunto de caracteres que controla el espacio de
dicho dato. Para el caso de CHARACTER Y CHARACTER VARYING el conjunto de
caracteres es el definido por la base de datos y para el caso de NCHARACTER y
NCHARACTER VARYING está definido por la variable del sistema manejador de base de
datos que establece dicho valor.
El tipo CHARACTER LARGE OBJECT permite almacenar datos binarios sin establecer un
conjunto de caracteres.
Todos los sistemas manejadores implementan los tipos de datos “CHARACTER”,
“CHARACTER VARYING”, “NATIONAL CHARACTER” y “NATIONAL CHARACTER
VARYING” de acuerdo al estándar y son compatibles léxica, sintáctica y semánticamente.
Experimento 6: “Tipos de datos cadena de caracteres”
6.1 ORACLE.
Figura 26 TIPO CADENA-ORACLE
90
6.2 SQLSERVER.
Para este manejador, también son aceptados todos los tipos de cadena marcados en el
estándar:
Figura 27 TIPO CADENA-SQLSERVER
6.3 POSTGRESQL
En este caso podemos ver que los cuatro tipos son aceptados por el manejador.
Figura 28 TIPO CADENA-POSTGRESQL
91
6.4 MYSQL.
Este sistema acepta las cuatro definiciones establecidas por el estándar:
Figura 29 TIPO CADENA-MYSQL
De aquí podemos decir que los cuatro sistemas manejadores en cuestión son compatibles
en cuanto a la definición de datos tipo cadena. Sin embargo, el estándar establece un tipo
de dato para almacenar cadenas largas de caracteres binarios, en este caso no existe
una compatibilidad ya que cada uno implementa su tipo de dato para este fin.
El tipo CHARACTER LARGE OBJECT es implementado únicamente por PostgreSql;
MySQL, MSSQL y ORACLE implementan sus propios tipos de datos para almacenar
datos binarios.
En la siguiente ejecución podemos visualizar el error que genera MySQL al no reconocer
el tipo de dato CHARACTER LARGE OBJECT.
92
Figura 30 CHARACTER LARGE OBJECT-MYSQL
Este último tipo de dato tampoco es reconocido por el manejador SQLSERVER:
Figura 31 CHARACTER LARGE OBJECT-SQLSERVER
Y ocurre el mismo caso cuando se ejecuta en ORACLE:
93
Figura 32 CHARACTER LARGE OBJECT-ORACLE
Así, el tipo de dato CHARACTER LARGE OBJECT no es compatible en todos los
manejadores de base de datos en cuestión, ya que no es reconocido con las mismas
palabras reservadas establecidas en el estándar. Este tipo de dato permite almacenar
grandes volúmenes de caracteres binarios (BINARY) y no binarios (BLOB’s); en ambos
casos, tampoco existe una compatibilidad entre los sistemas manejadores ya que cada
uno implementan sus propios tipos de datos.
Una alternativa para guardar datos binarios es guardarlos como cadenas de caracteres y
hacer la conversión a datos binarios del lado de la aplicación. Para el caso de cadenas
grandes de caracteres, se puede utilizar el tipo de dato “VARCHAR” implementando su
valor máximo. Normalmente la necesidad de almacenar grandes cantidades de caracteres
surge de almacenar archivos directamente en la base de datos, esto es una práctica que
en algunas ocasiones no resulta la más conveniente debido a la carga de procesamiento
en tareas de recuperación y ordenación que tiene que realizar el sistema. Una alternativa
a esta cuestión es almacenar dichos archivos directamente en el sistema de archivos del
sistema operativo y guardar únicamente la ruta donde se encuentra el archivo dentro de la
base de datos, esto presupone que el almacenamiento y recuperación depende de la
aplicación y no de la base de datos y también que las rutas deben ser siempre accesibles
para la aplicación de datos.
Podemos decir que cuando el dominio de una aplicación sea el tratamiento de archivos
binarios muy grandes como fotografías, streams, música, etc. la implementación de tipos
de datos estándar puede resultar en rangos de almacenamiento insuficiente.
Tipo de datos de Fecha y Tiempo (DateTime)
El estándar SQL:2003 enuncia los siguientes descriptores de tipo de datos de fecha y
tiempo:
DATE.
TIME WITHOUT TIME ZONE.
TIMESTAMP WITHOUT TIME ZONE.
TIME WITH TIME ZONE.
TIMESTAMP WITH TIME ZONE.
94
Cada uno de estos tipos de datos está conformado por un subconjunto de los siguientes
campos.
Campo
Significado
YEAR
Año
MONTH
Mes dentro de año.
DAY
Día dentro de mes.
HOUR
Hora dentro del día.
MINUTE
Minuto dentro de la hora.
SECOND
Segundo y posiblemente la fracción de
segundo dentro de un minuto.
TIMEZONE_HOUR
Valor de hora del desplazamiento de la
zona.
TIMEZONE_MINUTE
Valor del minuto del desplazamiento de la
zona.
Tabla 11 Tipos de datos Fecha y Tiempo
Existe un orden significativo, del más significativo al menos significativo: YEAR, MONTH,
DAY, HOUR, MINUTE y SECOND.
El estándar define tres clases de tipos de datos de fecha/tiempo:
DATE
Contiene los campos primarios: YEAR, MONTH y DAY.
TIME
Contiene los campos primarios: HOUR, MINUTE y SECOND.
TIMESTAMP
Contiene los campos primarios: YEAR, MONTH, DAY, HOUR,
MINUTE y SECOND.
Los campos tipo fecha/tiempo son comparables solo si contienen los mismos campos
primarios.
Los cuatro sistemas manejadores en cuestión tiene algún tipo de dato para almacenar
fechas y tiempo, sin embargo todos exceptuando ORACLE incluyen los tres tipos de datos
establecidos en el estándar.
Experimento 7: “Tipo de datos Fecha/Tiempo”
7.1 ORACLE
En el caso de ORACLE el tipo de dato “TIME” no es reconocido por el sistema:
95
Figura 33 TIPO FECHA/TIEMPO-ORACLE
El tipo de dato “DATE” de ORACLE permite guardar toda la estructura que indica el
estándar tanto para la parte de fecha como de tiempo en el mismo tipo, es por esto, que
no incluye un tipo de dato para el tiempo exclusivamente.
7.2 SQLSERVER.
Al igual que los anteriores, también soporta los tipos de datos fecha/tiempo establecidos
en el estándar:
Figura 34 FECHA/TIEMPO-SQLSERVER
96
En el caso de SQLSERVER el tipo de dato timestamp no está documentado como un tipo
de dato del manejador, sin embargo, al ejecutar la instrucción esta fue reconocida e
interpretada como un tipo de dato que guarda fecha y hora del sistema.
7.3 POSTGRESQL
Este sistema también soporta los tres tipos de datos marcados en el estándar:
Figura 35 FECHA/TIEMPO-SQLSERVER
97
7.4 MYSQL.
MySQL soporta los tres tipos de acuerdo al estándar:
Figura 36 FECHA/TIEMPO-MYSQL
De acuerdo al resultado, no todos los tipos de datos de fecha y tiempo establecidos por el
estándar son compatibles por los sistemas manejadores en cuestión.
Una alternativa para crear un tipo de dato compatible que guarde fecha y tiempo en todos
los manejadores es utilizar el tipo “TIMESTAMP” que guarde ambos valores, y desde la
aplicación o dentro del sistema manejador extraer a través de funciones el tipo de valor de
deseado, ya sea la fecha o la parte del tiempo.
El estándar establece que los tipos de datos de fecha/tiempo pueden o no incluir la zona
horaria. Esta especificación no es compatible tampoco de acuerdo al estándar ya que
MySQL y SQLSERVER no reconocen dichos tipos de datos de acuerdo a las palabras
reservadas y gramática que utiliza para su ejecución. Estos manejadores establecen sus
propias reglas para definir estos tipos de datos:
98
MySQL
Figura 37 ZONA HORARIA-MYSQL
SQL SERVER
Figura 38 ZONA HORARIA-SQLSERVER
99
Otro aspecto importante en la implementación de instrucciones SQL compatibles es el
formato en el que se definen los campos de fecha/tiempo. SQL establece que estos
campos son declarados como cadenas de caracteres y el manejador debe hacer una
interpretación o conversión del mismo hacia un valor correcto de dichos campos. Esta
conversión a veces puede resultar ambigua por los valores que puede tomar un campo en
cierto punto del tiempo. Para este efecto los manejadores incorporan algunas variables
globales para establecer de manera precisa el tipo de interpretación que debe dar a la
entrada y salida de datos de fecha/tiempo. Algunos sistemas manejadores toman este
valor de la configuración del ambiente y plataforma donde esta ejecutándose el sistema
manejador.
Es importante notar que aunque el manejador realiza dicha interpretación, en la mayoría
de los casos estos valores son almacenados en el formato estándar ISO 8601 que
establece un formato de YYYY-MM-DD para la fecha, donde YYYY son cuatro dígitos que
representan el año, MM dos dígitos que representan el mes y DD que representa dos
dígitos para el día. Y para el caso del tiempo establece un formato de 24 horas:
HH:MM:SS.
Establecer la entrada de estos tipos de datos bajo este formato permite que la escritura de
dichas entradas sea portable entre los sistemas manejadores que implementan dicho
estándar evitando ambigüedades en la interpretación de estos formatos.
Este caso lo encontramos en MySQL donde se escribió una instrucción con un atributo de
tipo fecha bajo el formato de DDMMYYYY el cual no pudo interpretar:
Figura 39 FORMATO FECHA-MYSQL
100
El formato DDMMYYYY fue interpretado correctamente por el resto de los sistemas,
aunque internamente el valor fue almacenado en formato YYYYMMDD.
Esto lo podemos corroborar en la siguiente ejecución sobre el sistema SQLSERVER y
POSTGRESQL:
Figura 40 FORMATO FECHA-SQLSERVER
Figura 41 FORMATO FECHA-POSTGRESQL
101
En ambos casos podemos observar que internamente los sistemas realizaron una
conversión hacia el formato que tiene establecido el sistema manejador.
Tipo de datos Booleano
El estándar SQL:2003 define el tipo de datos booleano con el descriptor:
BOOLEAN
Este tipo de campo permite almacenar tres valores de verdad, basado en la lógica de tres
valores:
True (verdadero).
False(falso).
Null(desconocido).
Este último puede ser almacenado siempre y cuando el atributo no contenga una
restricción de no nulos (NOT NULL).
El tipo de de dato BOOLEAN fue aceptado en ORACLE, PostgreSQL y MySQL; para el
caso de SQLSERVER no fue reconocido ya que este tipo de dato no lo incorpora en sus
tipos de datos nativos.
Experimento 8: “Tipo de dato Booleano”
8.1 ORACLE
Figura 42 TIPO BOOLEANO-ORACLE
102
8.2 SQLSERVER
Figura 43 TIPO BOOLEANO-SQLSERVER
8.3 POSTGRESQL
Figura 44 TIPO BOOLEANO-POSTGRESQL
103
8.4 MYSQL
Figura 45 TIPO BOOLEANO-MYSQL
En ciertos casos este tipo de atributo es convertido a un entero pequeño y almacena un
valor de “1” para verdadero, “0” para false y la marca de nulo prevalece.
Esta puede ser una alternativa para almacenar un valor de verdad, sin embargo, no es
posible que dichos valores sean evaluados como valores de verdad como lo indica el
estándar. El seguir esta alternativa orillaría al programador a llevar esta lógica de
evaluación al nivel de la aplicación y no al nivel de la base de datos.
Proyección
La proyección está representada por la función “SELECT” en el lenguaje SQL, esta
instrucción forma parte del conjunto de instrucciones del sublenguaje de manipulación de
datos (DML).
Según el estándar, la instrucción SELECT está definida de la siguiente forma:
<query specification> ::=
SELECT [ <set quantifier> ] <select list> <table expression>
<select list> ::=
<asterisk>
| <select sublist> [ { <comma> <select sublist> }... ]
<select sublist> ::= <derived column> | <qualifier> <period> <asterisk>
<derived column> ::= <value expression> [ <as clause> ]
<as clause> ::= [ AS ] <column name>
104
<table expression> ::=
<from clause>
[ <where clause> ]
[ <group by clause> ]
[ <having clause> ]
<from clause> ::= FROM <table reference> [ { <comma> <table reference> }... ]
Esta instrucción esta implementada de acuerdo al estándar en los cuatro sistemas
manejadores en cuestión:
Dada la siguiente relación:
Estudiante = {IdAlumno, Nombre, Apellido, Grado}
Con los siguientes datos:
IdEstudiante Nombre
1000
1002
RENE
FERNANDO
1003
ANA
Apellido
SANCHEZ
SERRANO
SOLIS PEREZ
AYALA
HERNANDEZ
Grado
1
1
1
Se realizara una proyección sobre todos los atributos de la relación (*):
Experimento 9: “Proyección (SELECT)”
9.1 ORACLE
Figura 46 PROYECCION-ORACLE
105
9.2 SQLSERVER
Figura 47 PROYECCION-SQLSERVER
9.3 POSTGRESQL.
Figura 48 PROYECCION-POSGRESQL
106
9.4 MYSQL.
Figura 49 PROYECCION-MYSQL
La proyección (SELECT) es una operación que es compatible con todos los sistemas
manejadores en cuestión de acuerdo al estándar SQL.
Eliminación
La eliminación de renglones dentro de una tabla se hace a través de la instrucción
“DELETE” del lenguaje SQL.
De acuerdo a la especificación del estándar de SQL, la instrucción “DELETE” está
definida de la siguiente manera:
<delete statement: searched> ::=
DELETE FROM <target table> [ [ AS ] <correlation name> ]
[ WHERE <search condition> ]
Donde:
<target table> representa el nombre de la relación dentro de la base o esquema de datos.
<search condition> es la selección que se realiza sobre una relación R. La ausencia de
esta selección, elimina todas las tuplas de la relación.
Esta instrucción se encuentra implementada en los cuatro sistemas en cuestión. De
acuerdo a las pruebas realizadas todos los sistemas cumplen con el estándar y son
compatibles uno con otro.
107
Dada la siguiente relación:
Estudiante = {IdAlumno, Nombre, Apellido, Grado}
Con los siguientes datos:
IdEstudiante Nombre
1000
1002
RENE
FERNANDO
1003
ANA
Apellido
SANCHEZ
SERRANO
SOLIS PEREZ
AYALA
HERNANDEZ
Grado
1
1
1
Se ejecutará la instrucción para eliminar la tupla identificada por el número 1002.
Experimento 10: “Eliminación (DELETE)”
10.1 ORACLE
Figura 50 ELIMINACION-ORACLE
10.2 SQLSERVER
Figura 51 ELIMINACION-SQLSERVER
108
10.3 POSTGRESQL
Figura 52 ELIMINACION-POSTGRESQL
10.4 MYSQL
Figura 53 ELIMINACION-MYSQL
109
En todos los casos el resultado de la ejecución de la instrucción fue un registro eliminado
dentro de la relación, es posible decir que el operador de eliminación es compatible con
todos los sistemas manejadores en cuestión de acuerdo al estándar SQL.
Inserción
La agregación de nuevas tuplas a una relación está definida por la instrucción “INSERT”
de SQL.
Según el estándar esta instrucción sigue la siguiente definición:
<insert statement> ::=
INSERT INTO <insertion target> <insert columns and source>
<insertion target> ::= <table name>
<insert columns and source> ::=
<from subquery>
| <from constructor>
| <from default>
<from subquery> ::=
[ <left paren> <insert column list> <right paren> ]
[ <override clause> ]
<query expression>
<from constructor> ::=
[ <left paren> <insert column list> <right paren> ]
[ <override clause> ]
<contextually typed table value constructor>
<override clause> ::=
OVERRIDING USER VALUE
| OVERRIDING SYSTEM VALUE
<from default> ::= DEFAULT VALUES
<insert column list> ::= <column name list>
Donde:
<table name> es el nombre de la relación donde se añadirá la nueva tupla.
<insert columns and source> es la lista de los atributos y la lista de los valores a cada
atributo. Estos valores pueden provenir de una sub-consulta, valores por default o valores
asignados.
Continuando con la relación Estudiante, se ejecutará la instrucción “INSERT” de acuerdo
al estándar para agregar una nueva tupla a la relación.
110
Experimento 11. “Inserción (INSERT INTO)”
11.1 ORACLE
Figura 54 INSERCION-ORACLE
11.2 SQLSERVER
Figura 55 INSERCION-SQLSERVER
111
11.3 POSTGRESQL
Figura 56 INSERCION-POSTGRESQL
11.4 MYSQL
Figura 57 INSERCION-MYSQL
De acuerdo a los resultados observados es posible afirmar que esta instrucción es
compatible entre todos los sistemas manejadores en cuestión de acuerdo al estándar
SQL.
112
Actualización.
La instrucción de SQL
“UPDATE”.
que actualiza los valores de los atributos de una tupla es
Según el estándar esta instrucción sigue la siguiente definición:
<update statement: searched> ::=
UPDATE <target table> [ [ AS ] <correlation name> ]
SET <set clause list>
[ WHERE <search condition> ]
De acuerdo al estándar y siguiendo con la relación Estudiante, se ejecutara la instrucción
“UPDATE” en los sistemas manejadores.
Experimento 12: “Actualización (UPDATE)”
12.1 ORACLE
Figura 58 ACTUALIZACION-ORACLE
12.2 SQLSERVER:
Figura 59 ACTUALIZACION-SQLSERVER
113
12.3 POSTGRESQL
Figura 60 ACTUALIZACION-POSTGRESQL
12.4 MYSQL
Figura 61 ACTUALIZACION-MYSQL
Al igual que las instrucciones anteriores, la actualización es compatible con todos los
sistemas en evaluación de acuerdo al estándar de SQL.
114
Ordenación
El orden de las tuplas de una relación no es trascendente según el modelo relacional
establecido por Codd, sin embargo la implementación de SQL introduce una instrucción
que permite ordenar una relación en base a una expresión bajo la siguiente forma:
<sort specification list> ::=
<sort specification> [ { <comma> <sort specification> }... ]
<sort specification> ::=
<sort key> [ <ordering specification> ] [ <null ordering> ]
<sort key> ::= <value expression>
<ordering specification> ::=
ASC
| DESC
<null ordering> ::=
NULLS FIRST
| NULLS LAST
SQL realiza la ordenación en base al tipo de dato evaluado en la lista de atributos. Es
decir, evalúa tipos numéricos, carácter, fechas, horas, etc. La ordenación por defecto es
en forma ascendente, la cual puede ser modificada por el modificador “DESC” que hace
que la ordenación sea de forma descendente. Esta última especificación la cumplen de
manera completa todos los manejadores de base de datos sobre tipos nativos del
estándar.
Cuando el campo o atributo evaluado para la ordenación contiene marcas de nulos o
ausencia de valores, la operación por defecto que establece el estándar es colocar dichas
tuplas al último de la relación. Solo los manejadores ORACLE y POSTGRESQL cumplen
con el estándar. Esto se puede observar ver en las siguientes ejecuciones:
Experimento 13: “Ordenación”
13.1 ORACLE
Este manejador si hace la ordenación de acuerdo al estándar, pone los nulos al final de la
ordenación:
115
Figura 62 ORDENACION-ORACLE
13.2 SQLSERVER:
En este manejador también coloca los nulos al principio:
Figura 63 ORDENACION-SQLSERVER
116
13.3 POSTGRESQL
Este sistema manejador si cumple con lo establecido con el estándar, coloca los nulos al
final:
Figura 64 ORDENACION-POSTGRESQL
117
13.4 MYSQL
En este manejador, los atributos con ausencia de valor son ordenados al principio,
contrario a lo que establece el estándar:
Figura 65 ORDENACION-MYSQL
Como se pudo observar MySQL Y SQLSERVER ordenan en primera instancia las tuplas
que contiene marca de nulos en los atributos evaluados por la ordenación. A pesar que el
estándar establece una especificación para la ordenación de nulos (NULLS FIRSTS,
NULLS LAST), estos manejadores no reconocen dicha especificación.
118
CONCLUSIONES
El modelo relacional presentado por Codd ha revolucionado el mercado de las bases de
datos; después de más de 30 años sigue vigente entre los principales sistemas
manejadores de base de datos. A lo largo de este tiempo ha sido implementado por casi
todos los sistemas de base de datos existente en el mercado. Paralelamente al
surgimiento e implementación del modelo relacional ha existido un lenguaje estructurado
para definir y manipular los datos dentro de los sistemas relacionales de base de datos,
este ha sido el caso de SQL. Este lenguaje al igual que el modelo relacional ha sido
implementado por casi todos los sistemas relacionales que existen en el mercado, su
propagación y aceptación ha crecido al mismo ritmo que los sistemas relacionales. En
algunos casos, la implementación de este lenguaje dentro de los sistemas manejadores
ha permitido la aceptación y crecimiento de dichos sistemas.
El lenguaje SQL fue propuesto como un lenguaje basado en el algebra relacional y con un
gran apego a las operaciones establecidas en el propio modelo, esto le ha permito una
gran aceptación entre los usuarios de base de datos, esto también debido a la facilidad de
uso que presenta el lenguaje. SQL es un lenguaje declarativo, esto permite ocultar al
usuario las tareas requeridas para obtener cierto resultado deseado.
La aceptación que ha tenido SQL dentro los sistemas manejadores de base de datos lo
ha convertido en el lenguaje “de facto” de los sistemas de base de datos.
Al convertirse en un lenguaje aceptado por casi todos los sistemas manejadores, han
surgido al mismo tiempo tantas versiones como implementaciones del mismo. Ante esta
situación surgió la necesidad de establecer un lenguaje que pudiese ser considerado
estándar a lo largo de los sistemas que lo implementan.
Esta tarea ha sido un proceso largo, y ha sido llevado a cabo por algunas organizaciones
de estándares, como es el caso de ISO y ANSI. Este proceso de estandarización ha
pasado por varios estados y momentos dentro del mercado de las base de datos. En
primera instancia, el estándar pretendía incluir las características y funcionalidad que cada
manejador ofrecía, y de estas características construir un estándar. Esta situación no
aseguraba la compatibilidad del lenguaje entre los sistemas que lo implementaban tan
solo representaba un compendio de características similares no necesariamente
compatibles.
119
Otro momento en el proceso de estandarización ha sido cuando el equipo y
organizaciones encargadas de desarrollar dicho estándar establecen una plataforma que
incluye definiciones, reglas, aspectos de implementación y cumplimiento del “como” es
implementado el lenguaje SQL dentro de los manejadores; en este momento los
desarrolladores de sistemas relacionales de base de datos tomaron el estándar y
pretendieron dar cumplimiento al mismo en sus implementación, esta tarea acerca más la
posibilidad de establecer un lenguaje compatible entre los manejadores, sin embargo,
cada uno siguió marcando diferencias en la implementación. En la mayoría de los casos,
estas diferencias no son provocadas por condiciones técnicas de la implementación, sino
más bien por aspectos de diferenciación de sus productos en el mercado.
En la última etapa que ha tenido el estándar hemos observado que nuevamente son
algunos sistemas manejadores de base de datos los que han influido fuertemente en sus
definición y desarrollo, esto lo podemos ver en que la versión 2003 del estándar esta
incluyendo dos partes nuevas: la primera relacionada a los tipos de datos de conjunto
(SETS) y lo relacionado al uso y manipulación de datos en formato XML. A la aparición de
este estándar, estos temas ya estaban previamente implementados por algunos
manejadores, como es el caso de ORACLE, y es notorio ver que el estándar sigue en
gran medida la implementación que ya han hecho estos sistemas manejadores.
Hoy en día, el interés de la mayoría de los sistemas manejadores no se centra en darle un
cumplimiento al estándar de SQL, más bien podemos decir que el estándar sirve como
una guía para la implementación que cada sistema hace del lenguaje, y como marco
técnico para desarrollar aspectos propios de cada manejador como el caso funciones y
tipos de datos.
El estándar establece la mayoría de los aspectos que se requieren para su
implementación, si el sistema manejador siguiera la especificación del estándar entonces
el resultado sería una implementación estándar y compatible con cualquier otro sistema
que siga dicho estándar, sin embargo, el nivel de cumplimiento que cada sistema le da al
estándar no depende de los aspectos técnicos, más bien cada sistema trata de desarrollar
productos con diferenciales que les permitan penetrar nichos mercado. En algunas
ocasiones estos diferenciales provienen desde propia filosofía que plantea cada
manejador y por ende el lenguaje que implementa sigue en gran medida estos objetivos
más que el de generar productos estándar que puedan ser compatibles.
120
La compatibilidad que dicen tener los sistemas manejadores con el estándar se centra en
características funcionales y de operación y no en la forma de implantación que debe
soportar dichas características. Por ejemplo, podemos encontrar que el estándar
establece un cierto de tipo de dato, en la documentación podemos ver que todos los
sistemas soportan dicho tipo de dato, pero la definición que hace cada sistema para este
tipo de dato es diferente y en consecuencia no es compatible dicha definición.
De las dos partes o sublenguajes que cubre este trabajo como son el lenguaje de
definición de datos (DDL) y el lenguaje de manipulación de datos (DML) encontramos que
la mayor parte de la incompatibilidad se encuentra en el apartado de la definición de
datos. Esto es debido, como ya se mencionó anteriormente, a los aspectos diferenciales
que plantea cada manejador y es aquí donde son más notorios ya que la definición de los
esquemas de datos está totalmente ligada a aspectos de estructura lógica y física que
ofrece cada sistema. Estas estructuras son aspectos importantes a considerar en la
elección y utilización de un sistema manejador ya que representan las características de
desempeño, distribución, utilización, replicación, consistencia, entre otros, que hacen a los
sistemas manejadores más apropiados para cierto tipo de aplicación y plataformas de
despliegue. Podemos decir que estas estructuras de algunos sistemas manejadores son
mucho más complejas que en otros, dado que dan un nivel de granularidad más alto y
complejo.
En la parte del lenguaje de manipulación podemos ver si existe un alto nivel de
compatibilidad entre los sistemas manejadores de acuerdo al estándar. Esto hace posible
definir instrucciones SQL que pueden ser ejecutadas en los sistemas manejadores sin
realizar cambio alguno en su escritura.
Algunas de las diferencias que encontramos están relacionadas directamente a cierto de
tipo de aplicaciones que utilizan este tipo de características, por ejemplo en cuanto a los
tipos de datos pudimos ver que aplicaciones que utilizan almacenamiento de grandes
archivos binarios o de caracteres como son archivos de imágenes, texto, secuencias,
entre otros, son difícilmente compatibles, por la definición y forma de almacenamiento que
tiene cada sistema. De aquí podemos decir que este tipo de aplicaciones no son
compatibles desde el origen y requieren una definición del esquema de datos
directamente en el sistema manejador.
121
Existen otro tipo de diferencias que no definen del todo un tipo o rubro de aplicación que
marque una incompatibilidad, este tipo de diferencias en la mayoría de los casos tiene al
menos una alternativa para crear instrucciones SQL compatibles que ofrezcan la misma
funcionalidad, en algunos casos requiere de de realizar pruebas de compatibilidad en
sentido contrario al estándar, es decir, existen ciertas definiciones, y sobre todo en los
tipos de datos, en los que el sistema manejador realizar conversiones internas aunque en
la definición de más alto nivel se indique otra especificación, al comparar estas
conversiones podemos ver que el resultado es un tipo de dato interno del manejador que
a su vez es compatible con el estándar y permite almacenar el mismo tipo de dato en
todos los manejadores. En otros casos se tiene que llevar la funcionalidad hacia la
aplicación para mantener la compatibilidad, esto es un tema de discusión que resalta el
objetivo de los sistemas manejadores de base de datos, ya que en algunos casos se lleva
gran parte de la lógica de negocio o aplicación hacia la base de dato, por ejemplo,
grandes procedimientos almacenados, desarrollo de funciones de usuario, control de
atributos auto-incrementables, etc. en la mayoría de estos casos estas funciones pueden
ser ejecutadas del lado de la aplicación y se deja al sistema manejador las tareas de
definición, almacenamiento, recuperación e integridad de datos, basadas en la definición
forma un sistema manejador de base de datos.
De acuerdo a todo lo anterior, podemos decir que si es posible establecer un esquema de
datos basado en el lenguaje SQL bajo el estándar SQL:2003 que pueda ser compatible
entre los sistemas que lo implementan. Un esquema de datos compatible bajo este
estándar permite una funcionalidad básica, refiriéndonos al término básico como un
esquema en donde dicho esquema:

Se defina a partir del objeto de base de datos denominado esquema (SCHEME).

No incluya la definición de campos para almacenar grandes cantidades de
archivos binarios o cadena de caracteres.

El cálculo de valores auto-incrementables se lleve del lado de la aplicación.

La ordenación de tuplas con ausencia de valores se lleve del lado de la aplicación.

Los campos booleanos se conviertan a un entero corto (0,1).

Se utilice el estándar para la definición de fechas y tiempos.
122
REFERENCIAS
AB, M. (2005). "MySQL Performance Benchmarks." 2009, from
http://www.greatlinux.com/userfiles/mysql-performance-whitepaper.pdf.
Arvin, T. (2008). "Comparison of different SQL implementations." Retrieved 10/12/2008, 2008,
from http://troels.arvin.dk/db/rdbms/.
AstroGrid. (2009). "DBMS Evaluations." I, from
http://wiki.astrogrid.org/bin/view/Astrogrid/DbmsEvaluations.
Baroni, A. L., C. Calero, et al. (2005). "A FORMAL DEFINITION FOR OBJECT-RELATIONAL DATABASE
METRICS."
Baroni, A. L., C. Calero, et al. (2006). "The Theory of Active Databases vs. The SQL Standard."
Bauer, C. and G. King (2007). Java Persistence with Hibernate, Manning.
Calero, C., F. Ruiz, et al. (2005). "An Ontological Approach to Describe the SQL:2003 ObjectRelational Features."
Catell, R. G. G. and D. K. Barry (2000
). The Object Database Standard: ODMG 2.0.
Chamberlin. (2005). "Query Processing." Retrieved 27/05/2008, 2008, from
http://cimic.rutgers.edu/~sigmod05/SIGMODprogram.htm#is1.
Chamberlin, D. D., et al. (1974). SEQUEL: A Structured English Query Language. Proceedings of the
1974 ACM SIGIDET Workshop on Data Description, Access and Control, ACM.
Chapple, M. (2007) SQL Fundamentals. About.com Volume, DOI:
CODD, E. (1990). The relational model for database management: version 2, Addison-Wesley.
Codd, E. F. (1970). "A Relational Model of Data for Large Shared Data Banks." Communications of
the ACM 13: 377-387.
Codd, E. F. (1990). The relational model for database management : version 2, ADDISON-WESLEY.
Eisenberg, A., K. Kulkarni, et al. (2004). "SQL:2003 Has Been Published." SIGMOD Record 33(1).
Española, R. A. (2001). Real Academia Española. DICCIONARIO DE LA LENGUA ESPAÑOLA.
Gulutzan, P. and T. Pelzer (2003). SQL Perfomance Tuning, Addison-Wesley.
Hector, G.-M. (2009). Database Systems The Complete Book, Pearson Prentice Hall.
IBM (2002). SQL Reference for Cross-Platform Development
123
IBM (2006) Structured Query Language (SQL). Volume, DOI:
ISO/IEC. (2008). "ISO/IEC 9075-1:2003." Retrieved 10/11/2008, 2008, from
http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=34132.
Jones, A. S., Ryan K.; Plew, Ronald R.; Garrett, Robert F.; Kriegel, Alex (2005). SQL FUNCTIONS,
Hungry Minds Inc,U.S.
KALIAPPAN, P. S. and U. WLOKA (2007). "Investigations to the Conformance about Oracle, DB2, MS
SQL Server, Sybase with respect to SQL:2003 Standard." Fachthema 23/2007: 38-44.
Kimpo, P., A. Lucero, et al. (2004) An Introduction to the Oracle, MySQL, MS SQL SERVER and
PostgreSQL Database Managemente Systems. Volume, DOI:
Kriegel, A. and B. M. Trukhov (2008). SQL BIBLE Second Edition, Wiley.
Lee, G. (2003) SQL 2003 Standard Support in Oracle Database 10g. Volume, DOI:
Melton, J. (2003). Information technology — Database languages — SQL — Part 1:
Framework(SQL/Framework). ISO/IEC.
Melton, J. (2003). Information technology — Database languages — SQL — Part 2: Foundation
(SQL/Foundation). ISO/IEC.
Murali, T. M. (2009, ENERO, 2010). "SQL and Relational Algebra." from
http://courses.cs.vt.edu/~cs4604/Fall09/lectures/lecture-03-intro-sql-relational-algebra.pdf.
Paul, B. (1999). Implementing the spirit of SQL-99. International Conference on Management of
Data, ACM.
Pokorný, J. (2005). "Database architectures: current trends and their relationships to
environmental data management."
Pokrajac, D., H. Patel, et al. (2005). "INHERITANCE CONSTRAINTS IMPLEMENTATION IN
POSTGRESQL."
PostgreSQL. (2008). "SQL Conformance." Retrieved 10/11/2008, 2008, from
http://www.postgresql.org/docs/8.3/static/features.html.
Rabuzin, K., M. Malkovic, et al. (2007). "The Theory of Active Databases vs. The SQL Standard."
SELTZER, M. I. (2005). "Beyond Relational Databases."
Silberschatz, A., H. Korth, et al. (2006). Fundamentos de bases de datos.
Software, B. (2009). "SQL Tips." from http://www.bristle.com/Tips/SQL.htm.
124
Stephens, R. K. and R. R. Plew (2005). Sams Teach Yourself SQL in 21 days, Sams.
Stonebraker, M. and U. Çetintemel (2006). "“One Size Fits All”: An Idea Whose Time Has Come and
Gone."
T¨urker, C. and M. Gertz (2001). "Semantic integrity support in SQL:1999 and commercial (object)relational database management systems." The VLDB Journal.
Tanaka, M. (2005). "RDBMS conformance to standard SQL." 5.
Tanasi, A. (2008). DataType Comparison.
Turley, P. (2005). Beginning Transact-SQL with SQL Server 2000 and 2005.
Ullman, J. D. and J. Widowm (1999). Introducción a los sistemas de Bases de Datos, Prentice Hall,
México.
Zavala, E. R. (2009). OPTIMIZACION DE RECURSOS DE BASE DE DATOS PARA OBTENER SISTEMAS
DE INFORMACION DE ALTO DESEMPEÑO. SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN.
MEXICO, D.F., INSTITUTO POLITÉCNICO NACIONAL. Maestro en Ciencias.
125