Base de Datos

178
Anl. Mauricio Arévalo M. - Pág. 1 - INDICE INDICE ____________________________________________________________1 INTRODUCCIÓN ____________________________________________________4 CAPITULO I: LAS BASES DE DATOS ___________________________________6 1.1. Historia ______________________________________________________6 1.2. Objetivos de los Sistemas de Gestión de Bases de Datos _______________7 1.3. Ventajas y Desventajas de los Sistemas de Bases de Datos _____________9 1.3.1. Ventajas _________________________________________________10 1.3.2. Desventajas ______________________________________________11 1.4. Generalidades y Características de las Bases de Datos________________11 1.4.1. Abstracción de Datos _______________________________________12 1.4.2. Modelos de Datos__________________________________________14 1.4.3. Integridad en la base de datos ________________________________16 1.4.4. Normalización de la base de datos_____________________________17 1.5. Los Sistemas de Gestión de Bases de Datos (SGBD) _________________19 1.5.1. Estructura del Sistema de Gestión de Base de Datos ____________21 1.6. Lenguaje de Definición de datos (DDL)_____________________________22 1.7. Lenguaje de Manipulación de Datos (DML) _________________________23 CAPITULO II: LENGUAJE ESTRUCTURADO DE CONSULTAS (SQL) ________24 2.1. Historia ______________________________________________________24 2.2. Características y Estructura ______________________________________25 2.2.1. Comandos _____________________________________________29 2.2.2. Cláusulas ________________________________________________29 2.2.3. Operadores lógicos ________________________________________30 2.2.4. Operadores de Comparación _________________________________30 2.2.5. Funciones de Agregado _____________________________________31 CAPITULO III: LICENCIAMIENTO DE SOFTWARE________________________32 3.1. Licencias de Software __________________________________________32 3.2. Software Libre ________________________________________________33 3.2.1. Tipos de Licencias de Software Libre___________________________34 3.3. Software Propietario____________________________________________36 3.3.1. Tipos de Licencias de Software Propietario ______________________37 CAPITULO IV: MY SQL______________________________________________39 4.1. Historia y Antecedentes _________________________________________39 4.2. Características y Funcionalidad del Servidor MySQL___________________40 4.3. Estructura del Servidor MySQL ___________________________________56

Transcript of Base de Datos

Anl. Mauricio Arévalo M.

- Pág. 1 -

INDICE

INDICE ____________________________________________________________1 INTRODUCCIÓN ____________________________________________________4 CAPITULO I: LAS BASES DE DATOS___________________________________6

1.1. Historia ______________________________________________________6 1.2. Objetivos de los Sistemas de Gestión de Bases de Datos _______________7 1.3. Ventajas y Desventajas de los Sistemas de Bases de Datos _____________9

1.3.1. Ventajas _________________________________________________10 1.3.2. Desventajas ______________________________________________11

1.4. Generalidades y Características de las Bases de Datos________________11 1.4.1. Abstracción de Datos _______________________________________12 1.4.2. Modelos de Datos__________________________________________14 1.4.3. Integridad en la base de datos ________________________________16 1.4.4. Normalización de la base de datos_____________________________17

1.5. Los Sistemas de Gestión de Bases de Datos (SGBD) _________________19 1.5.1. Estructura del Sistema de Gestión de Base de Datos ____________21

1.6. Lenguaje de Definición de datos (DDL)_____________________________22 1.7. Lenguaje de Manipulación de Datos (DML) _________________________23

CAPITULO II: LENGUAJE ESTRUCTURADO DE CONSULTAS (SQL) ________24

2.1. Historia ______________________________________________________24 2.2. Características y Estructura ______________________________________25

2.2.1. Comandos _____________________________________________29 2.2.2. Cláusulas ________________________________________________29 2.2.3. Operadores lógicos ________________________________________30 2.2.4. Operadores de Comparación _________________________________30 2.2.5. Funciones de Agregado _____________________________________31

CAPITULO III: LICENCIAMIENTO DE SOFTWARE________________________32

3.1. Licencias de Software __________________________________________32 3.2. Software Libre ________________________________________________33

3.2.1. Tipos de Licencias de Software Libre___________________________34 3.3. Software Propietario____________________________________________36

3.3.1. Tipos de Licencias de Software Propietario ______________________37 CAPITULO IV: MY SQL______________________________________________39

4.1. Historia y Antecedentes _________________________________________39 4.2. Características y Funcionalidad del Servidor MySQL___________________40 4.3. Estructura del Servidor MySQL ___________________________________56

Anl. Mauricio Arévalo M.

- Pág. 2 -

4.3.1. Tipos de Tablas _________________________________________58 4.3.2. Tipos de Datos de MySQL _________________________________60

4.4. Ventajas y Desventajas de MySQL ________________________________61 4.4.1. Ventajas _______________________________________________61 4.4.2. Desventajas ______________________________________________63

4.5. Gestión de Bases de Datos MySQL________________________________63 4.5.1. Cliente mysql _____________________________________________66 4.5.2. Mysqladmin ______________________________________________70 4.5.3. Myisampack ______________________________________________71 4.5.4. Mysqlcheck y Myisamchk ____________________________________72 4.5.5. Mysqlimport ______________________________________________73 4.5.6. Mysqldump y Mysqlhotcopy __________________________________73 4.5.7. Perror ___________________________________________________74 4.5.8. MySQL Administrator _______________________________________75 4.5.12. MySQL Front _____________________________________________79 4.5.13. PhpMyAdmin _____________________________________________81 4.5.14. MySQL Developer Studio ____________________________________83 4.5.15. DBDesigner ______________________________________________84

4.6. Instalación y Configuración de MySQL______________________________84 4.6.1. Instalación sobre Windows___________________________________85 4.6.2. Instalación sobre Linux______________________________________92

CAPITULO V: PostgreSQL___________________________________________95

5.1. Historia y Antecedentes _________________________________________95 5.2. Características y Funcionalidad de PostgreSQL ______________________97 5.3. Estructura del servidor PostgreSQL _______________________________110

5.3.1. Tipos de Tablas ________________________________________112 5.3.2. Tipos de Datos _________________________________________113

5.4. Ventajas y Desventajas de PostgreSQL____________________________114 5.4.1. Ventajas ______________________________________________114 5.4.2. Desventajas ___________________________________________116

5.5. Gestión de Bases de Datos PostgreSQL ___________________________117 5.5.1. psql____________________________________________________117 5.5.2. pg_dump y pg_dumpall ____________________________________120 5.5.3. pg_restore ______________________________________________122 5.5.4. createdb y dropdb_________________________________________123 5.5.5. Postmaster y pg_ctl _______________________________________124 5.5.6. PgAdmin________________________________________________125 5.5.7. PhpPgAdmin ____________________________________________127 5.5.8. EMS SQL Manager para PostgreSQL _________________________129

5.6. Instalación de PostgreSQL______________________________________131 5.6.1. Instalación sobre Windows__________________________________132 5.6.2. Instalación sobre Linux_____________________________________137

5.7. Configuración de PostgreSQL ___________________________________142 5.7.1. Archivo postgresql.conf ____________________________________143 5.7.2. Archivo pg_hba.conf_______________________________________144 5.7.3. Archivo pg_ident.conf______________________________________147 5.7.4. Finalización de la Configuración______________________________148

Anl. Mauricio Arévalo M.

- Pág. 3 -

CAPITULO VI: Otros Sistemas Gestores de Bases de Datos______________151 6.1. Oracle ___________________________________________________151 6.2. Microsoft SQL Server________________________________________153 6.3. SQL Lite__________________________________________________154 6.4. HSQLDB _________________________________________________155 6.5. Firebird___________________________________________________155 6.6. Informix __________________________________________________156 6.7. Comparaciones ____________________________________________157

CONCLUSIONES _________________________________________________160 RECOMENDACIONES _____________________________________________162 ANEXOS ________________________________________________________163 ANEXO A: MODOS DE MySQL ______________________________________163 ANEXO B: TIPOS DE DATOS EN POSTGRESQL________________________166 ANEXO C: ALTERNATIVAS PARA BUSINESS INTELLIGENCE (BI) _________167 ANEXO D: CONEXIONES PARA MySQL y PostgreSQL ___________________168 GLOSARIO ______________________________________________________ 172 BIBLIOGRAFIA___________________________________________________ 177

Anl. Mauricio Arévalo M.

- Pág. 4 -

INTRODUCCIÓN

Desde el punto de vista de que el bien más preciado para una empresa u organización

es su información, los medios mediante los cuales se guarda y se manipula la misma deben

ser en lo posible los más seguros y confiables para asegurar la integridad y veracidad de

dicha información. La importancia de la información en la mayoría de organizaciones, y por

tanto el valor de la base de datos, ha llevado al desarrollo de una gran cantidad de conceptos y

técnicas para la gestión eficiente de los datos.

El objetivo primordial de un Sistema de Gestión de Bases de Datos (SGBD o DBMS)

es proporcionar un entorno que sea a la vez conveniente y eficiente para manipular la

información o datos contenidos en las bases de datos. El mercado de sistemas manejadores de

bases de datos es bastante grande y ofrece diversas alternativas a la hora de elegir un software

en el cual confiar.

Para un profesional informático, el tomar una decisión con respecto a la herramienta

de gestión de bases de datos por cual inclinarse, cual es la óptima, cual nos ofrece mayores

garantías en un desarrollo de software específico y que detalles de implementación se

deberían tener en cuenta para asegurar el correcto desempeño de un sistema informático de

calidad, se convierte en una gran preocupación y responsabilidad en el diseño y desarrollo

de dicho sistema informático.

Entonces, es de vital importancia y prioridad el conocimiento de las características,

ventajas, desventajas, las herramientas de administración que dispone un determinado sistema

de gestión de bases de datos, además de las características de los sistemas informáticos que se

van a desarrollar y los requerimientos de los mismos; de modo que las características de estas

herramientas de gestión de bases de datos se ajusten a los requerimientos de nuestros sistemas

informáticos.

Anl. Mauricio Arévalo M.

- Pág. 5 -

En la presente monografía, inicialmente se analiza de una manera generalizada los

objetivos y naturaleza de los sistemas gestores de bases de datos; explicando su historia y

como se ha desarrollado el concepto de sistema de base de datos, qué es lo que hace un

sistema de gestión de bases de datos, sus componentes y características principales.

Se realiza luego un estudio general a cerca del lenguaje SQL (Lenguaje Estructurado

de Consultas), sus antecedentes, características, normas actuales, tipos de datos y sus

principales comandos de los que hacen uso los manejadores de las bases de datos que se dan a

conocer en la presente investigación. También son objeto de estudio los distintos tipos de

licenciamientos de software que existen y las licencias de software libre como GPL (Licencia

Pública General).

Se ponen en conocimiento las características, componentes y estructura, herramientas,

uso, ventajas y desventajas de dos de los manejadores de bases de datos con licenciamiento

libre más usados que actualmente existen en el medio y que se pueden ofrecer como bases de

datos para Sistemas Web o en sistemas empresariales con las respectivas versiones para

distintos sistemas operativos (Windows, MAC o Linux). Las bases de datos de software libre

que se analizan detalladamente en la presente monografía; por su uso popular entre su tipo y

sus muy buenas características técnicas son MySQL y PostgreSQL.

Además, para tener otros parámetros de evaluación a la hora de elegir el gestor de

bases de datos que mejor se acomode a nuestros requerimientos, en el último capítulo se dan

a conocer conceptos básicos sobre otros gestores de bases de datos de software libre como

Firebird, HSQLDB y SQLite y otros sistemas gestores de bases de datos que están bajo

licenciamiento propietario y comercial como Oracle, Informix y Microsoft SQL Server.

De esta manera, pretendo contribuir logrando que la presente investigación sirva como

un instrumento de información y orientación para estudiantes y profesionales vinculados

con el área de sistemas y desarrollo de software dando a conocer las características principales

de los dos productos de software libre más utilizados en el área de bases de datos a un costo

gratuito de licenciamiento, con libertad de modificación, con un potente desempeño y muy

buenas herramientas administrativas.

Anl. Mauricio Arévalo M.

- Pág. 6 -

CAPITULO I

LAS BASES DE DATOS

1.1. Historia

Antes de las bases de datos que hoy conocemos, se utilizaban ficheros secuenciales

como almacenes de datos. Estos daban un acceso muy rápido pero sólo de forma secuencial,

más tarde aparecieron los ficheros indexados, donde el acceso ya podía ser aleatorio; el

sistema de ficheros era el sistema más común de almacenamiento de datos.

Pero los programas y datos cada vez eran más complejos y grandes, por tal motivo se

requería de un almacenamiento que garantizara un cierto número de condiciones y que

permitiera operaciones complejas sin que se violaran estas restricciones. Además cada

usuario que accediera a los datos debía tener su trabajo protegido de las operaciones que

hicieran el resto de usuarios, respondiendo a estas necesidades, surgieron las bases de datos

jerárquicas, donde los datos se situaban siguiendo una jerarquía.

A mitad de los sesenta, se desarrolló el proyecto IDS (Integrated Data Store), de

General Electric. IDS era un nuevo tipo de sistema de bases de datos conocido como bases de

datos en red, y en parte se desarrolló para satisfacer la necesidad de representar relaciones

entre datos más complejas que las que se podían modelar con los sistemas jerárquicos. Los

sistemas jerárquico y de red constituyen la primera generación de los SGBD (Sistemas de

Gestión de Base de Datos).

Anl. Mauricio Arévalo M.

- Pág. 7 -

En 1970, en los laboratorios de investigación de IBM, se escribió un artículo

presentando el modelo de bases de datos relacionales. En este artículo, presentaba también

los inconvenientes de los sistemas previos (el jerárquico y el de red), y entonces se

comenzaron a desarrollar muchos sistemas relacionales, apareciendo los primeros a finales de

los setenta y principios de los ochenta. Esto condujo al desarrollo de un lenguaje de consultas

estructurado denominado SQL, que se ha convertido en el lenguaje estándar de los sistemas

relacionales.

El modelo de bases de datos relacionales se utiliza para describir la estructura de una

base de datos, las relaciones entre los datos, las restricciones, la semántica, etc., y es el que ha

marcado la línea de investigación por muchos años hasta la actualidad, existiendo cientos de

SGBDs relacionales. Los SGBDs relacionales constituyen la segunda generación de los

Sistemas de Gestión de Bases de Datos.

En 1976, se presentó el modelo entidad-relación; además, en los últimos años han

surgido dos nuevos modelos: el modelo de datos orientado a objetos y el modelo relacional

extendido. Sin embargo, a diferencia de los modelos que los preceden, la composición de

estos últimos modelos no está del todo clara. Esta evolución representa la tercera

generación de los sistemas gestores de bases de datos.

1.2. Objetivos de los Sistemas de Gestión de Bases de Datos

En el caso de los primeros sistemas típicos de procesamiento de archivos apoyados por

un sistema operativo convencional, los registros de diversas transacciones permanecían

almacenados en varios archivos y se escribían un número de diferentes programas de

aplicación para extraer, eliminar, actualizar y añadir registros a los archivos apropiados.

Estos tipos de sistemas tenían varias desventajas o problemas importantes entre los

cuales tenemos la redundancia e inconsistencia de datos, la dificultad para tener acceso a los

datos, el aislamiento de los mismos, las anomalías en los datos cuando se presentaban accesos

concurrentes y la seguridad e integridad de la información.

Anl. Mauricio Arévalo M.

- Pág. 8 -

Debido a estas dificultades, entre otras, se ha fomentado el desarrollo de los Sistemas

Gestores de Bases de Datos, los cuales proporcionan un interfaz eficiente entre aplicaciones y

el sistema operativo, consiguiendo, entre otras cosas, que el acceso a los datos se realice de

una forma más eficiente, más fácil de implementar y sobre todo, más segura.

El objetivo principal de un Sistema de Gestión de Bases de Datos es proporcionar un

entorno y las herramientas necesarias, convenientes y eficientes para manipular la

información o datos contenidos en las bases de datos, de una manera rápida, fácil y segura.

Los Sistemas de Gestión de Bases de Datos (SGBD) tratan de cumplir los siguientes

objetivos específicos:

• Abstracción de la información: Los SGBD ahorran a los usuarios detalles acerca del

almacenamiento y mantenimiento físico de los datos. Para lograr este objetivo, se

definen varios niveles de abstracción (físico, conceptual y de visión).

• Independencia: La independencia de los datos consiste en la capacidad de modificar

el esquema (físico o lógico) de una base de datos sin tener que realizar cambios en las

aplicaciones que se sirven de ella.

• Redundancia mínima: Un buen diseño de una base de datos logrará evitar la

aparición de información repetida o redundante. Lo ideal es lograr una redundancia

nula; no obstante, en algunos casos la complejidad de los cálculos hace necesaria la

aparición de ciertas redundancias.

• Consistencia: En aquellos casos en los que no se ha logrado una redundancia nula, es

necesario vigilar que aquella información que aparece repetida se actualice de forma

coherente, es decir, que todos los datos relacionados se actualicen de forma simultánea y

no aparezcan inconsistencias de dichos datos entre distintas tablas o archivos.

• Seguridad: La información almacenada en una base de datos llega a tener un gran

valor para cualquier organización. Los SGBD deben garantizar que esta información se

encuentre asegurada frente a usuarios malintencionados que intenten leer la información

Anl. Mauricio Arévalo M.

- Pág. 9 -

privilegiada y no autorizada a ellos o simplemente ante las distracciones de algún

usuario que puede estar autorizado, y por ello, los SGBD disponen de un sistema de

distintas clases de permisos a usuarios o grupos de usuarios.

• Integridad: Se trata de adoptar las medidas necesarias para garantizar la validez y

consistencia de los datos almacenados. Es decir, se trata de proteger los datos ante

fallos de hardware, datos introducidos por usuarios descuidados, o cualquier otra

circunstancia capaz de corromper la información almacenada.

• Respaldo y recuperación: Los SGBD deben proporcionar una forma eficiente de

realizar copias de seguridad de la información almacenada en ellos, y de restaurar a

partir de dichas copias los datos que se hayan podido perder o dañar.

• Control de la concurrencia: En la mayoría de entornos, lo más habitual es que sean

muchas las personas que acceden a una base de datos y es también frecuente que dichos

accesos se realicen de forma simultánea. Así pues, un SGBD debe ser capaz de

controlar este acceso concurrente a la información, que podría derivar en inconsistencias

en los datos.

• Tiempo de respuesta: Siempre se trata de minimizar el tiempo en que el SGBD tarda

en darnos la información solicitada y en almacenar o actualizar los cambios realizados

en los datos.

1.3. Ventajas y Desventajas de los Sistemas de Bases de Datos

Los sistemas de bases de datos presentan numerosas ventajas, y de la misma manera

traen ciertas desventajas o inconvenientes. A continuación menciono las más importantes:

Anl. Mauricio Arévalo M.

- Pág. 10 -

1.3.1. Ventajas

• Disponibilidad: Cuando se aplica la metodología de bases de datos, cada usuario ya no

es propietario de los datos, puesto que éstos se comparten entre el todo el conjunto de

aplicaciones, existiendo una mejor disponibilidad de los datos para todos los que tienen

necesidad de ellos.

• Facilidad de uso: Existen diferentes maneras de extraer la información almacenada en

una base de datos, por ejemplo, un programador lo puede realizar por medio de

instrucciones SQL, los usuarios lo pueden realizar por medio de las aplicaciones o

herramientas disponibles, obteniendo velocidad y precisión.

• Coherencia de los resultados: En todas las aplicaciones que hacen uso de las bases de

datos se utilizan los mismos datos, por lo que los resultados de todos ellos son

coherentes y perfectamente comparables.

• Confidencialidad y seguridad en el manejo de los datos: Toda la información puede

estar centralizada en un solo punto y debidamente clasificada pudiendo acceder a ella

con seguridad dependiendo del perfil con que se ingresa al sistema.

• Mantenimiento de estándares: Gracias a la integración es más fácil respetar los

estándares necesarios, tanto los establecidos a nivel de la empresa u organización como

los nacionales e internacionales.

• Aumento de la concurrencia: La mayoría de los SGBD gestionan el acceso

concurrente a la base de datos por parte de los usuarios y garantizan que no ocurran

problemas de inconsistencias en los datos.

• Mejora en las copias de seguridad y de recuperación ante fallos: Los SGBD nos dan

la posibilidad de hacer copias de seguridad o “Backups” de las bases de datos por si se

produce algún fallo o anomalía, utilizando estas copias de seguridad para restaurar los

datos.

Anl. Mauricio Arévalo M.

- Pág. 11 -

1.3.2. Desventajas

• Complejidad: Los SGBD son conjuntos de programas complejos con una gran

funcionalidad. Es preciso comprender muy bien esta funcionalidad para poder sacar un

buen provecho de ellos.

• Tamaño: Los SGBD son programas complejos y muy extensos que requieren una gran

cantidad de espacio en disco y de memoria para trabajar de forma eficiente.

• Coste económico del SGBD: El coste de un SGBD con licencia comercial, varía

dependiendo del entorno y de la funcionalidad que ofrece, lo cual se puede reducir con

el uso de Sistemas de Gestión de Bases de Datos con licenciamiento libre que ofrezcan

características similares. En algunas ocasiones, también es alto el coste de convertir y

migrar una aplicación con un nuevo sistema de gestión de bases de datos.

• Vulnerabilidad ante fallos: El hecho de que todo se centralice en el SGBD hace que el

sistema sea más vulnerable ante los fallos que puedan producirse, por lo que se debe

tener un proceso seguro para realizar copias de respaldo de la base de datos y un

correcto plan de contingencia, en caso de producirse cualquier fallo o anomalía.

1.4. Generalidades y Características de las Bases de Datos

Para diferenciar entre lo que es una Base de Datos y un Sistema de Gestión de Base de

Datos tenemos los siguientes conceptos:

Un Atributo o campo es cualquier elemento de información susceptible de tomar

valores; mientras que un Dominio comprende un rango de valores de donde toma sus datos

un atributo.

Una Base de Datos es una colección o depósito de datos integrados con redundancia

controlada y con una estructura que refleja las interrelaciones y restricciones existentes en el

Anl. Mauricio Arévalo M.

- Pág. 12 -

mundo real. Los procedimientos de actualización y recuperación de los datos deberían ser

capaces de conservar la integridad del conjunto de los mismos.

Un Sistema de Gestión de Bases de Datos (SGBD o DBMS), es el conjunto de

programas que se encargan de manejar la creación, administración, las seguridades y accesos

a las bases de datos que forman parte del SGBD. La principal función de un SGBD debe ser

la de proporcionar a los usuarios la capacidad de almacenar datos en la base de datos, acceder

a ellos y actualizarlos o modificarlos de forma correcta, sin violar las restricciones

establecidas.

Un SGBD se compone de un lenguaje de definición de datos (DDL) y de un lenguaje

de manipulación de datos (DML), en este último se incluye un lenguaje de consulta de datos.

La funcionalidad de las bases de datos ha ido aumentando de forma considerable, ya

que gran parte de la semántica de los datos que se encontraba dispersa en distintos programas

o aplicaciones se ha ido migrando hacia el servidor de datos. Surgen así las bases de datos

activas, deductivas, orientadas a objetos, multimedia, temporales, los almacenes de datos

(datawarehouse1) y la minería de datos (datamining2).

1.4.1. Abstracción de Datos

Un objetivo importante de una base de datos es proporcionar a los usuarios una visión

abstracta de los datos, es decir, la capacidad del sistema de esconder ciertos detalles de cómo

se almacenan y se mantienen los datos.

Así se han creado los niveles de abstracción indicados a continuación para simplificar la

interacción de los usuarios comunes o avanzados con el sistema:

1 Data Warehouse (DW) es un almacén o repositorio de datos categorizados, que concentra un gran volumen de información de interés para toda una organización. Genera aplicaciones que ayudan en la toma de decisiones. 2 Data mining o minería de datos a la solución de “Business Intelligence” (Inteligencia de Negocios) que consiste en un conjunto de técnicas avanzadas para la extracción de información predecible escondida en grandes bases de datos.

Anl. Mauricio Arévalo M.

- Pág. 13 -

• Nivel físico: Es la representación del nivel más bajo de abstracción, en éste se describe

en detalle la forma de como se almacenan los datos en los dispositivos de

almacenamiento (por ejemplo, mediante punteros o índices para el acceso aleatorio a los

datos).

• Nivel conceptual: Es el siguiente nivel más alto de abstracción, describe que datos son

almacenados realmente en la base de datos y las relaciones que existen entre los

mismos, aquí se describe la base de datos completa en términos de su estructura de

diseño. Este nivel lo utilizan los administradores de bases de datos, quienes deben

decidir qué información se va a guardar en la base de datos.

• Nivel de visión: Es el nivel más alto de abstracción, muestra solo lo que el usuario final

puede visualizar del sistema terminado ya que no necesita toda la información contenida

en la base de datos. Este nivel describe sólo una parte de la base de datos al usuario

acreditado para verla y se puede proporcionar muchas visiones en este nivel para la

misma base de datos.

La interrelación entre estos tres niveles de abstracción se ilustra en la siguiente figura:

Figura 1.1: Niveles de Abstracción de Datos

Anl. Mauricio Arévalo M.

- Pág. 14 -

1.4.2. Modelos de Datos

Un modelo no es más que una representación de la realidad que contiene las

características generales de algo que se va a realizar. En base de datos, esta representación se

la elabora de forma gráfica.

Un Modelo de Datos es una colección de herramientas conceptuales para describir los

datos, las relaciones que asocian a los mismos, su semántica y las restricciones para conservar

su consistencia. Los modelos de datos se pueden dividir en tres grupos:

• Modelos lógicos basados en objetos: Se usan para describir datos en los niveles

conceptual y de visión, es decir, con este modelo representamos los datos de tal forma

como nosotros los captamos en el mundo real, tienen una capacidad de estructuración

bastante flexible y permiten especificar restricciones de datos explícitamente. Existen

diferentes modelos de este tipo, como el modelo orientado a objetos, el modelo binario,

semántico, infológico; sin embargo el más utilizado por su sencillez y eficiencia es el

modelo Entidad-Relación, el cual representa a la realidad a través de una colección de

objetos básicos denominados entidades, y las relaciones entre estos objetos. Estas

relaciones cumplen con una restricción de la base de datos conocida como “cardinalidad

de asignación”, que nos representa el número de entidades a las que se puede asociar

otra entidad mediante un conjunto de relaciones; las mismas que pueden ser: uno a uno,

uno a muchos y muchos a muchos.

Figura 1.2: Modelo E-R (entidad Empleado relacionada con entidad Artículo con relación venta)

• Modelos lógicos basados en registros: Se utilizan para describir datos en los niveles

conceptual y físico. Estos modelos utilizan registros e instancias para representar la

realidad, así como las relaciones que existen entre estos registros. A diferencia de los

Anl. Mauricio Arévalo M.

- Pág. 15 -

modelos de datos basados en objetos, se usan para especificar la estructura lógica global

de la base de datos y para proporcionar una descripción a un nivel más alto de la

implementación. La base de datos está estructurada en registros agrupados de varios

tipos, y cada tipo de registros define un número fijo de campos o atributos. Los tres

modelos lógicos más importantes son:

� Modelo de red Este modelo representa los datos mediante colecciones de

registros y sus relaciones se representan por medio de ligas o enlaces, los cuales

pueden verse como punteros. Los registros se organizan en un conjunto de

gráficas arbitrarias, como se puede observar en la siguiente figura:

Figura 1.3: Modelo de red (con registros de dos entidades enlazadas arbitrariamente)

� Modelo jerárquico: Es similar al modelo de red en cuanto a que los datos y sus

relaciones se representan por medio de registros y sus enlaces o ligas. La

diferencia radica en que están organizados por conjuntos o colecciones de árboles

en lugar de gráficas arbitrarias como se muestra a continuación:

Figura 1.4: Modelo jerárquico (con registros de dos entidades enlazadas en estructura de árbol)

� Modelo Relacional: En este modelo se representan los datos y las relaciones entre

estos, a través de una colección de tablas en las cuales los renglones o tuplas

equivalen a los cada uno de los registros que contendrá la base de datos y las

columnas corresponden a las características (atributos) de cada registro.

Anl. Mauricio Arévalo M.

- Pág. 16 -

Figura 1.5: Modelo jerárquico (con registros de dos entidades enlazadas en estructura de árbol)

• Modelos físicos de datos: Se usan para describir a los datos en el nivel más bajo,

aunque existen muy pocos modelos de este tipo, básicamente capturan aspectos de la

implementación de los sistemas de base de datos.

1.4.3. Integridad en la base de datos

En un momento dado, los valores de los datos en una base de datos son una

representación de un fragmento de la realidad.

Las reglas de integridad son normas que ayudan a mantener la semántica y la

consistencia en los datos. Es decir, si tenemos una tabla con los atributos de personas y entre

ellos el peso o la edad, estos no pueden ser negativos porque en el mundo real esto no es

posible. Si añadimos una restricción de este tipo a una base de datos, estamos incluyéndole

una regla de integridad. Así, las bases de datos relacionales tienen reglas generales de

integridad que se clasifican en:

• Integridad específica: Donde depende de la semántica de los datos y su dominio para

que se cumpla este tipo de integridad. Por ejemplo, en un atributo o campo “edad”, para

que un valor sea válido o admitido debe ser mayor que 0 y menor que 100

(0≤edad≤100).

Anl. Mauricio Arévalo M.

- Pág. 17 -

• Integridad genérica: Donde depende del papel que juegue un atributo en el diseño de la

tabla, es decir, si forma parte de la llave primaria, única o foránea. Dentro de este tipo

de integridad, existe la integridad de entidades y la integridad referencial.

La integridad de las entidades verifica que ningún componente de la llave primaria de

una relación puede aceptar valores nulos ni valores que dupliquen la llave primaria en otro

registro de la entidad. Esta regla de integridad se aplica en procesos de inserción y

actualización de los datos.

La integridad referencial es una propiedad de las bases de datos relacionales y gracias

a ella se garantiza que una entidad siempre se relacione con otras entidades válidas, es decir,

que existan en la base de datos. La idea es que tengamos una concordancia entre los datos de

dos entidades mediante sus relaciones. Este proceso se aplica en procesos de inserción,

actualización y eliminación de los datos.

En el modelo de bases de datos relacionales, para representar las relaciones entre las

entidades (tablas), debemos saber que una Clave candidata o única es un atributo o conjunto

de atributos que identifican unívocamente a una tupla o registro, es decir, no hay dos tuplas

con dos claves candidatas iguales. En una relación puede haber más de una clave candidata,

por lo que una de las claves candidatas se debe adoptar como clave primaria.

Una clave primaria es un atributo o conjunto de atributos que los definimos como

atributo principal de entre las claves candidatas, de tal manera que se pueda identificar de

forma única a una entidad, mientras que una clave foránea es un atributo (también puede ser

compuesto) de una entidad cuyos valores deben de concordar con los de una llave primaria de

alguna otra entidad relacionada.

1.4.4. Normalización de la base de datos

La normalización de una base de datos puede considerarse como un proceso durante el

cual los esquemas de relación insatisfactorios se descomponen repartiendo sus atributos entre

esquemas de relación más pequeños que poseen las propiedades deseables.

Anl. Mauricio Arévalo M.

- Pág. 18 -

Un objetivo del proceso de normalización es garantizar que no ocurran las anomalías

en la actualización, ayudando también a la eliminación de información redundante en las

tuplas o registros. A continuación se presentan brevemente las tres primeras formas normales,

para ello seguiré el ejemplo con la siguiente Entidad “R”, que tiene los datos de la compra de

un cliente, la misma que se la irá pasando de una forma normal a otra:

R (Código_cliente, Nombre_cliente, Direccion_cliente, Número_factura, Fecha, Valor)

• Primera Forma Normal: Una relación se encuentra en primera forma normal cuando

no hay grupos repetidos entre sus atributos. Esta condición es una restricción inherente

al modelo relacional, y por tanto, el ejemplo dado está al menos en primera forma

normal (1FN).

• Segunda Forma Normal: Una relación se encuentra en segunda forma normal (2FN)

cuando está en 1FN y además todos los atributos que no forman parte de una clave

candidata dan información sobre la clave principal. El ejemplo en 2FN quedaría de la

siguiente forma:

R1 (Código_cliente, Nombre_ cliente, Direccion_ cliente)

R2 (Número_Factura, Código_ cliente, Fecha, Valor)

• Tercera Forma Normal: Una relación se encuentra en tercera forma normal (3FN)

cuando está en 2FN y además los atributos que no forman parte de una clave candidata

dan información sobre la clave principal completa y sólo sobre la clave principal. El

ejemplo anterior en 3FN quedaría así:

R1 (Código_cliente, Nombre_ cliente, Direccion_ cliente)

R2 (Numero_Factura, Codigo_cliente)

R3 (Numero_Factura, Fecha, Valor)

Anl. Mauricio Arévalo M.

- Pág. 19 -

1.5. Los Sistemas de Gestión de Bases de Datos (SGBD)

La base de datos es una colección de archivos interrelacionados almacenados en

conjunto sin redundancia y un Sistema de Gestión de Bases de Datos (SGBD o DBMS) se lo

describe como un conjunto de numerosas rutinas de software interrelacionadas, cada una de

las cuales es responsable de una determinada tarea. Las funciones principales de un Sistema

de Gestión de Bases de Datos son:

• Proporcionar a los usuarios la capacidad de almacenar datos en la base de datos, acceder

a ellos y actualizarlos. Esta es la función fundamental de un SGBD.

• Establecer y mantener las trayectorias de acceso a la base de datos de tal forma que los

datos puedan ser accedidos rápidamente.

• Registrar el uso de las base de datos, es decir mantener registros de accesos, usuarios,

tipos de transacciones realizadas en la base de datos.

• Interactuar con el manejador de archivos, lo cual se lo realiza mediante la traducción de

las distintas sentencias DML a comandos del sistema de archivos de bajo nivel; ya que

los datos se almacenan en el disco usando el sistema de archivos que normalmente es

proporcionado por un sistema operativo convencional. Así el Manejador de bases de

datos es el responsable del verdadero almacenamiento, recuperación y actualización de

los datos en la base de datos.

• Respaldar y recuperar información, ya que un SGBD debe contar con mecanismos o

rutinas adecuadas que permitan la recuperación fácilmente de los datos en caso de

ocurrir fallas en el sistema de base de datos.

• Tener control de concurrencia, que consiste en controlar la interacción de los usuarios

cuando actualizan la base de datos concurrentemente o al mismo tiempo, evitando

afectar la consistencia de los datos.

Anl. Mauricio Arévalo M.

- Pág. 20 -

• Mantener la seguridad, la cual consiste en contar con mecanismos que permitan el

control de la información de la base de datos, evitando que los datos se vean

perjudicados por cambios no autorizados o imprevistos por usuarios no autorizados;

algunos SGBD disponen de un sistema de permisos a usuarios y grupos de usuarios.

• Mantener la integridad de los datos, adoptando las medidas necesarias para garantizar la

validez y consistencia de los datos almacenados. Para ello, los datos que se almacenan

en la base de datos deben satisfacer ciertos tipos de restricciones de integridad.

• Un SGBD debe proporcionar un catálogo en el que se almacena información que

describe los datos de una base de datos (meta datos). A este catálogo se denomina

diccionario de datos.

• Un SGBD debería proporcionar un mecanismo que controle y garantice que todas las

transacciones3 se realicen si no existen errores, o que no se realice ninguna.

• Un SGBD debe ser capaz de integrarse con algún software (protocolos) de

comunicación. Muchos usuarios acceden a la base de datos desde terminales y ellos se

encuentran conectados a la máquina sobre la que funciona el SGBD mediante una red

local o de área extensa. En cualquiera de los casos, el SGBD recibe peticiones en forma

de mensajes y responde de modo similar.

Figura 1.6: Interacción del Usuario con la Base de datos a través del DBMS

3 Una Transacción es un conjunto de acciones tales como inserciones, eliminaciones y actualizaciones que cambian el contenido de una base de datos.

Anl. Mauricio Arévalo M.

- Pág. 21 -

1.5.1. Estructura del Sistema de Gestión de Base de Datos

Un sistema de base de datos se encuentra dividido en módulos, cada uno de los cuales

controla una parte de la responsabilidad total de sistema. En la mayoría de los casos, el

sistema operativo proporciona únicamente los servicios más básicos y el sistema de gestión de

bases de datos debe partir de estos servicios y controlar además el manejo correcto de los

datos. Así el diseño de un sistema de gestión de bases de datos incluye la interfaz entre el

sistema de base de datos y el sistema operativo.

Los componentes más importantes de un Sistema de Gestión de Bases de Datos o

SGBD, son:

• Gestor de archivos: Gestiona la asignación de espacio en la memoria del disco y de las

estructuras de datos usadas para representar información.

• Manejador de base de datos: Sirve de interfaz entre los datos y los programas de

aplicación.

• Procesador de consultas: Traduce las proposiciones en lenguajes de consulta a

instrucciones de bajo nivel comprensibles por el gestor de la base de Datos.

• Compilador de DDL: Convierte las proposiciones o sentencias DDL (Lenguaje de

Definición de Datos) en un conjunto de tablas que contienen metadatos4, estas se

almacenan en el diccionario de datos.

• Archivo de datos: En él se encuentran almacenados físicamente los datos de una base

de datos.

• Indices: Que permiten un rápido acceso a registros de datos que contienen valores

específicos.

4 Metadatos son “datos” o información acerca de la estructura de los datos que forman una tabla o entidad.

Anl. Mauricio Arévalo M.

- Pág. 22 -

En la figura 1.7 se representan los principales componentes de un SGBD y la relación

que existe entre ellos:

Figura 1.7: Estructura de un Sistema de Gestión de Bases de Datos

1.6. Lenguaje de Definición de datos (DDL)

Una vez finalizado el diseño de una base de datos y escogido un SGBD para su

implementación, el primer paso consiste en especificar el esquema conceptual y el esquema

interno o físico de la base de datos. Para ello, el administrador de la base de datos o los

diseñadores utilizan el lenguaje de definición de datos (DDL), el resultado de su

Anl. Mauricio Arévalo M.

- Pág. 23 -

compilación es un conjunto de tablas. Además el SGBD posee un compilador de DDL que

procesa las sentencias del lenguaje para identificar las descripciones de los distintos

elementos y almacenar su descripción en el diccionario de datos.

1.7. Lenguaje de Manipulación de Datos (DML)

“Una vez creados los esquemas de la base de datos, los usuarios necesitan un lenguaje

que les permita manipular los datos de la base de datos: realizar consultas, inserciones,

eliminaciones y modificaciones”5. Este lenguaje es el que se denomina lenguaje de manejo

o manipulación de datos (DML).

Existen dos tipos de lenguajes de manejo de datos: los procedurales y los no

procedurales; con un DML procedural el usuario especifica qué datos se necesitan y cómo

hay que obtenerlos. Las bases de datos jerárquicas y de red utilizan un DML procedural y sus

sentencias deben estar embebidas o contenidas en un lenguaje de alto nivel, ya que se

necesitan sus estructuras (bucles, condicionales, etc.) para obtener y procesar cada registro

individual. A este lenguaje de alto nivel se le denomina lenguaje anfitrión.

Un DML no procedural se puede utilizar de manera independiente para especificar

operaciones complejas sobre la base de datos de forma concisa. El usuario o programador

especifica qué datos quiere obtener sin decir cómo se debe acceder a ellos, siendo el SGBD

quien traduce las sentencias del DML en uno o varios procedimientos que manipulan los

conjuntos de registros necesarios, haciendo más fácil el trabajo del usuario.

A los DML no procedurales también se los denomina declarativos y las bases de datos

relacionales utilizan un DML no procedural, como SQL (Structured Query Language) o QBE

(Query By Example). La parte de los DML no procedurales que se dedica a la obtención o

recuperación de datos es la que se conoce como lenguaje de consultas de datos.

5 Tomado de http://es.tldp.org/Tutoriales/NOTAS-CURSO-BBDD/notas-curso-BD/node3.html

Anl. Mauricio Arévalo M.

- Pág. 24 -

CAPITULO II

LENGUAJE ESTRUCTURADO DE CONSULTAS (SQL)

2.1. Historia

El Lenguaje de Consultas Estructurado o SQL (Structured Query Languaje) empieza

en 1974, por parte de Donald Chamberlin y de otras personas que trabajaban en los

laboratorios de investigación de IBM, como un lenguaje para la especificación de las

características de bases de datos que adoptaban el modelo relacional. Inicialmente este

lenguaje se llamaba SEQUEL (Structured English Query Language) y se implementó en un

prototipo llamado SEQUEL-XRM entre 1974 y 1975.

Las experimentaciones con ese prototipo condujeron, entre 1976 y 1977 a una revisión

del lenguaje (SEQUEL/2), que a partir de ese momento cambió de nombre por motivos

legales, convirtiéndose en SQL. El prototipo del sistema de base de datos relacional, basado

en este lenguaje, se adoptó y se utilizó internamente en 1981 en la empresa IBM con su

producto DB2. Gracias al éxito de este sistema, otras compañías como Oracle y Sybase

empezaron a desarrollar sus productos relacionales basados en SQL en la década de los

ochenta.

En 1986, el ANSI (American National Standards Institute) adoptó SQL como estándar

para los lenguajes relacionales y en 1987 se transformó en estándar ISO (International

Anl. Mauricio Arévalo M.

- Pág. 25 -

Standarization Organization); esta versión del estándar tuvo el nombre de SQL/86. En los

años siguientes, este estándar ha sufrido diversas revisiones y mejoras que han conducido

primero a la versión SQL/89 y posteriormente, a la versión SQL/92 que es utilizado en

algunos SGBDs hasta la actualidad.

Hasta 1999 se siguió un proceso de revisión y mejora del lenguaje por parte de los

comités ANSI e ISO, que terminó en la definición de lo que en este momento se conoce como

SQL3. Sin embargo SQL3 está caracterizado como “SQL orientado a objetos” y es la base de

algunos sistemas de manejo de bases de datos orientadas a objetos (como ORACLE,

Informix’Universal Server, IBM’s DB Universal Database y Cloudscape, entre muchos

otros).

SQL es realmente un esfuerzo de colaboración internacional, que cumple las normas de

organismos de estandarización como ANSI e ISO. Desde el punto de vista práctico, el hecho

de tener un estándar definido por un lenguaje para bases de datos relacionales abre

potencialmente el camino a la intercomunicación y compatibilidad entre todos los productos

que se basan en él. Lamentablemente, muchos proveedores de sistemas de gestión de Bases

de Datos adoptan e implementan en la propia base de datos sólo el corazón del lenguaje SQL,

extendiéndolo de manera individual según la propia visión que cada proveedor tenga del

mundo de las bases de datos.

2.2. Características y Estructura

SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en

una base de datos informática.

SQL engloba totalmente los lenguajes DDL (Lenguaje de Definición de Datos) y

DML (Lenguaje de Manipulación de Datos). Es un lenguaje de base de datos normalizado y

eficiente, utilizado por los diferentes gestores de bases de datos para realizar determinadas

operaciones sobre los datos o sobre la estructura de los mismos.

Anl. Mauricio Arévalo M.

- Pág. 26 -

SQL es un lenguaje de consulta de datos de cuarta generación. Lo que cabe destacar es

que mientras un lenguaje de tercera generación (3GL) como COBOL requiere cientos de

líneas de código, un lenguaje de cuarta generación o 4GL necesita diez o veinte líneas para

realizar la misma operación. Un 3GL es procedural, mientras que un 4GL es un lenguaje no

procedural ya que el usuario define qué se debe hacer y no cómo debe hacerse.

Los lenguajes normalizados de bases de datos SQL (Structured Query Lenguaje) y QBE

(Query by Example) son ejemplos de 4GL.

La versión SQL3 dada a conocer en 1999, se caracteriza porque fue desarrollado

principalmente para manejar objetos. Algunas de las características que están dentro de esta

categoría fueron definidas en el estándar SQL publicado en 1996, específicamente para

llamadas a funciones y procedimientos desde SQL.

Entre las características más importantes de SQL3 cabe destacar que tiene cuatro nuevos

tipos de datos; el primero de estos tipos es LARGE OBJECT (objeto grande) o LOB y las

variantes de este tipo son Character Large Object (CLOB) y Binary Large Object(BLOB).

Otro tipo de dato nuevo es el BOLEAN, que permite a SQL registrar valores lógicos de

falso o verdadero. Además se incorporan dos nuevos tipos compuestos: ARRAY y ROW.

El tipo ARRAY permite almacenar una colección de valores directamente en una

columna de una tabla, por ejemplo: Dias VARCHAR(10) ARRAY(7). El tipo ROW en SQL3

permite el almacenamiento estructurado de datos en columnas únicas de la base de datos,

por ejemplo:

CREATE TABLE empleado( emp_id INTEGER, nombre ROW( nombreVARCHAR(30), apellido VARCHAR(30)), direccion ROW(calle VARCHAR(50), ciudad VARCHAR(30), provincia CHAR(20)), salario REAL);

y para consultar el apellido de un empleado, se debería acceder así:

SELECT E.nombre.apellido FROM empleado E;

Anl. Mauricio Arévalo M.

- Pág. 27 -

Desde la primera versión del SQL estándar, las cadenas de caracteres están limitadas a

simples comparaciones (como =, > ó <>), luego se fueron sumando las capacidades de

comparación como el predicado LIKE y del predicado DISTINCT.

SQL reconoce la noción de base de datos activa. Esto es facilitado por los conocidos

triggers (disparadores). Un trigger tiene una funcionalidad que permite a los diseñadores de

bases de datos realizar operaciones seguras siempre que una aplicación realice determinadas

operaciones en tablas particulares.

Las nuevas facilidades de seguridad en SQL tienen un papel muy importante. Los

privilegios pueden ser otorgados según un rol y este a su vez puede otorgar privilegios

individuales para otros roles. Esta estructura anidada mejora el manejo de la seguridad en el

ambiente de una base de datos.

En su estructura, SQL posee 13 tipos de datos primarios y de varios sinónimos válidos

reconocidos por dichos tipos de datos. En la siguiente tabla se muestran los tipos de datos

primarios soportados por SQL:

Tabla 2.1: Tipos de datos SQL

Anl. Mauricio Arévalo M.

- Pág. 28 -

La siguiente tabla muestra los sinónimos de los tipos de datos definidos anteriormente:

Tabla 2.2: Sinónimos de tipos de datos SQL

El lenguaje SQL básicamente está compuesto por comandos, cláusulas, operadores y

funciones de agregado. Estos elementos se combinan en las instrucciones para crear,

actualizar y manipular la estructura e información almacenada en las bases de datos.

Anl. Mauricio Arévalo M.

- Pág. 29 -

2.2.1. Comandos

Existen dos tipos de comandos SQL:

• Los comandos DDL (Lenguaje de Definición de Datos) que permiten crear, modificar,

eliminar bases de datos, tablas, campos, índices, vistas y todos los objetos que contiene

una base de datos. Entre los comandos DDL tenemos:

Tabla 2.3: Comandos DDL

• Los comandos DML (Lenguaje de Manipulación de Datos) que permiten generar

consultas para ordenar, filtrar y extraer datos de la base de datos, así como insertar,

actualizar o eliminar información de la base de datos. Entre este tipo de comandos

tenemos:

Tabla 2.4: Comandos DML

2.2.2. Cláusulas

Son condiciones de modificación utilizadas para definir los datos, entre ellas tenemos:

Anl. Mauricio Arévalo M.

- Pág. 30 -

Tabla 2.5: Cláusulas SQL

2.2.3. Operadores lógicos

Tabla 2.6: Operadores Lógicos SQL

2.2.4. Operadores de Comparación

Tabla 2.7: Operadores de Comparación

Anl. Mauricio Arévalo M.

- Pág. 31 -

2.2.5. Funciones de Agregado

Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de

registros para devolver un único valor que se aplica a todo un grupo de registros.

Tabla 2.8: Funciones de Agregado

Anl. Mauricio Arévalo M.

- Pág. 32 -

CAPITULO III

LICENCIAMIENTO DE SOFTWARE

3.1. Licencias de Software

El derecho de autor o propiedad intelectual es un conjunto de normas y principios que

regulan los derechos morales y patrimoniales que la ley concede a los autores por el solo

hecho de la creación de una obra. La ley protege los derechos de los autores sobre todas las

obras del ingenio de carácter creador, ya sean de índole literaria, científica o artística,

cualesquiera sea su género, forma de expresión, mérito o destino. Entre todas estas obras del

ingenio, se consideran también los programas de computación, así como su documentación

técnica y manuales de uso.

La licencia de software es una especie de contrato, en donde se especifican todas las

normas y cláusulas que rigen el uso de un determinado programa informático, principalmente

se estipulan los alcances de uso, instalación, reproducción y la copia de estos productos. En el

momento en que se decide descargar, instalar, copiar o utilizar un determinado software,

implica que se aceptan todas las condiciones que se estipulan en el licenciamiento de dicho

software.

Licenciar un Software es el procedimiento de conceder a otra persona o entidad el

derecho legal de usar un software con fines industriales, comerciales o personales de acuerdo

Anl. Mauricio Arévalo M.

- Pág. 33 -

a las cláusulas que detalla la licencia. Esta licencia se presenta como un documento

electrónico, en papel original o como un número de serie autorizado por el autor.

Se debe tener claro el concepto de que el software libre no quiere decir que no sea

comercial. El software comercial es software, libre o no, que es comercializado, es decir que

las compañías que lo producen cobran dinero por el producto, por su distribución o por su

soporte.

3.2. Software Libre

El Software Libre es un asunto de libertad, no de precio. Es conveniente no confundir el

software libre con el software gratuito, ya que este no cuesta nada pero no por esto se

convierte en software libre debido a que este tipo de software no es una cuestión de precio,

sino de libertad otorgada a los usuarios del software.

Para tener una mejor claridad de este concepto se debe pensar en libre, como en

libertad de expresión y no en algo que solamente es gratis, se refiere a la libertad de los

usuarios para ejecutar, copiar, distribuir, estudiar, cambiar y mejorar el software. En otras

palabras, se refiere a cuatro libertades principales que se les otorga a los usuarios de este tipo

de software:

• Libertad de usar o ejecutar el programa, con cualquier propósito.

• Libertad de estudiar cómo funciona el programa, y adaptarlo a las necesidades

propias, por lo que el acceso al código fuente es una condición previa para dar esta

libertad.

• Libertad de distribuir copias, con lo que se puede ayudar a otros usuarios interesados.

• Libertad de mejorar el programa original y hacer públicas las mejoras a los demás, de

modo que todos se beneficien.

El Software libre, no significa realmente que no es comercial; un programa libre puede

estar disponible para uso comercial, desarrollo comercial y distribución comercial.

Anl. Mauricio Arévalo M.

- Pág. 34 -

Los términos de Software Libre (Free Software) y recientemente de Software de fuentes

abiertas (Open Source Software), se refieren al modelo de desarrollo y de distribución del

software desarrollado cooperativamente. En vez de que el código del sistema o de cada uno

de los programas sea un secreto celosamente guardado por la empresa que lo produce, éste es

puesto a disposición del público, para que lo puedan modificar, mejorar o corregir.

Entre algunas de las más importantes aplicaciones producidas por los equipos de

desarrollo de Software Libre están:

• El sistema operativo Linux y sus diferentes versiones

• El servidor de Web Apache

• Los manejadores de bases de datos objeto-relacional como PostgreSQL y MySQL

• El navegador Mozilla

• Servidores de correo como Sendmail y Squirrel Mail

• Programas de cliente de correo electrónico como Sylpheed, GnuPG, Aspell

• El servidor de nombres de Dominio Bind

• El servidor proxy Squid

• Las suites de aplicaciones de escritorio OpenOffice, StarOffice, Abiword

• Software matemático y científico como Scilabs, Maxima, Yacas, Sistema R

• Software de dibujo y diseño como QCad, Gimp, Dia

• El Entorno de Desarrollo Integrado (IDE) “Eclipse” y el proyecto “Mono” con varias

herramientas de desarrollo para aplicaciones.

• Editores de texto de propósito general como Vim y Emacs

• Herramientas para diseño y desarrollo Web como PHP y Perl

3.2.1. Tipos de Licencias de Software Libre

Debemos conocer que ciertos conceptos como que el Freeware es software que el

usuario final puede bajar totalmente gratis de Internet; y la diferencia con el Open Source es

que el autor siempre es dueño de los derechos, o sea que el usuario no puede realizar algo que

Anl. Mauricio Arévalo M.

- Pág. 35 -

no esté expresamente autorizado por el autor del programa, como modificarlo o venderlo y no

se obliga a la distribución del código fuente.

El Shareware o software de evaluación es software que se distribuye gratis y que el

usuario puede utilizar durante algún tiempo; pero se requiere que después de un tiempo de

prueba el usuario pague por el software para continuar usando el programa. Un ejemplo de

este tipo de software son los compresores WinRar y WinZip.

Entre los tipos de licenciamiento para Open Source o software libre más conocidos

tenemos los siguientes:

• GNU GPL (General Public License): La licencia GPL se aplica al software de la FSF

(Free Software Foundation) y el proyecto GNU otorga al usuario la libertad de

compartir el software y realizar cambios en él. Dicho de otra forma, el usuario tiene

derecho a usar el programa, modificarlo y distribuir las versiones modificadas pero no

tiene permiso de realizar restricciones propias con respecto a la utilización de ese

programa modificado.

Además, esta licencia expresamente excluye el concepto de la Garantía, así como la

exclusión de la responsabilidad para el autor por las versiones modificadas,

permitiendo la copia y distribución de la obra siempre y cuando se acompañe con el

código fuente original o modificado.

• GNU LGPL (Lesser GPL): Es una variación de la licencia GPL que está destinada a

ser utilizada básicamente para las librerías. La licencia LGPL permite que obras libres

sean unidas a obras no-libres o privativas.

• GNU FDL (Free Documentation): Consiste en el equivalente de la licencia GPL pero

destinada a obras escritas y literarias, tales como manuales, libros así como otros

documentos relacionados con el producto de software.

• Perl Artistic License (PAL): Destinada fundamentalmente para programas. Permite el

uso y distribución de la obra original sin restricciones, siempre y cuando se incluya la

Anl. Mauricio Arévalo M.

- Pág. 36 -

licencia original con sus debidas excepciones. Este tipo de licencia permite el cobro de

cantidades razonables debiéndose incluir las instrucciones o manuales, el código fuente

y además se permite que la obra libre sea agregada y utilizada conjuntamente con una

obra privativa.

• BSD License: BSD (Berkeley Software Distribution) es una licencia de uso, copia,

modificación y distribución “corta”; permite que la obra sea modificada y cerrada

individualmente por un particular. Está diseñada para salvaguardar la responsabilidad

del autor, no la libertad de la obra. No obliga a la entrega del código fuente ni a la

redistribución del mismo y el usuario tiene libertad ilimitada con respecto al software,

ya que puede decidir incluso si redistribuirlo como software no libre.

3.3. Software Propietario

Por lo general cuando una empresa productora de software distribuye un producto de

este tipo, solamente entrega al comprador una copia del programa ejecutable, junto con la

autorización de ejecutar dicho programa en un número determinado de computadoras.

En el contrato que suscriben ambas partes, comúnmente denominado “licencia” del

producto, queda expresado claramente que lo que el cliente adquiere es simplemente la

facultad de utilizar dicho programa en una determinada cantidad de computadoras

(dependiendo del monto que haya abonado). El software sigue siendo propiedad de la

empresa productora del mismo y el usuario no está facultado a realizar ningún cambio.

La corrección de errores, actualizaciones o agregado de nuevas funciones en un

programa solamente puede hacerse si se dispone del código fuente. Es claro que, al ser la

empresa proveedora de software propietario la única que dispone de dicho código, solamente

ésta puede atender a los requerimientos de un cliente insatisfecho con el producto del cual ha

adquirido una licencia de uso. Esto pone al usuario en una clara situación de dependencia del

proveedor produciéndose un monopolio con dicho proveedor.

Anl. Mauricio Arévalo M.

- Pág. 37 -

3.3.1. Tipos de Licencias de Software Propietario

El software propietario está protegido bajo los derechos de autor. Al comprar una

licencia original de un producto de software, se está adquiriendo el derecho a utilizar ese

producto de acuerdo a las reglas establecidas por su autor y por tratarse de un contrato, es

necesario que el dueño de este software provea su consentimiento para que el mismo sea

utilizado por un tercero.

El contrato de licencia es la única vía legal por la cual el titular otorga este

consentimiento y dicha licencia se documenta en el Acuerdo de Licencia del Usuario Final

(EULA). Cada instalación de software requiere una licencia que la respalde.

Existen distintos tipos de contratos de licencias para legalizar el software propietario, sin

embargo, pueden identificarse 3 grandes grupos de licenciamiento:

• Habitualmente, el software original se presenta en cajas vistosas impresas en alta

calidad, y dentro de ellas pueden encontrarse, entre otras cosas, la licencia de uso del

software, los manuales de los productos y disquetes o CDs identificados con etiquetas

preimpresas que indican el nombre del productor del software, su versión y su lenguaje.

• Otra forma muy común de licenciamiento, es a través de la preinstalación del software

en el disco duro al momento de adquirir la PC. Este tipo de licenciamiento se conoce

como OEM (Original Equipment Manufacturing o Manufactura de Equipos Originales)

y generalmente se instala con equipos nuevos.

• Las empresas productoras poseen planes de licenciamiento para grandes usuarios que no

necesariamente incluyen la entrega física de paquetes de software, sino sólo la licencia

de uso de varias copias. Por lo general se las denomina licencias por volumen y este

tipo de licenciamiento es una manera sencilla de comprar licencias de productos de

software a un precio con un descuento según el volumen adquirido.

A continuación se describen los tipos más conocidos de licenciamiento de software

propietario:

Anl. Mauricio Arévalo M.

- Pág. 38 -

LICENCIA CARACTERISTICAS

Producto Empaquetado (caja) Para pequeñas empresas que necesitan 1 o 2 licencias o para usuarios domésticos.

Producto Preensamblado (OEM) Para cualquier usuario que adquiere el software preinstalado en una PC nueva.

OPEN LICENSE Para empresas que quieran beneficiarse de un descuento por volumen a partir de 5 licencias. Tiene derechos de uso perpetuos.

SELECT LICENSE Para empresas con más de 250 PCs. Ofrece descuentos por volumen para cada grupo de productos separadamente. Tiene derechos de uso perpetuos.

ENTERPRISE AGREEMENT (EA) Para empresas con más de 250 PCs que desean estandarizar toda su organización con dicho software. Los precios por volumen están basados en pagos anuales. Tiene una duración de 3 años y derechos de uso perpetuos.

Tabla 3.1: Tipos de Licencias de Software propietario

Anl. Mauricio Arévalo M.

- Pág. 39 -

CAPITULO IV

MY SQL

4.1. Historia y Antecedentes

MySQL es un sistema de gestión de bases de datos relacionales, creado por la empresa

sueca MySQL AB y licenciado bajo GPL (Licencia Pública General). Su diseño le permite

soportar una gran carga de forma rápida y muy eficiente.

MySQL surgió por la necesidad que vieron sus creadores de tener un gestor de bases

de datos rápido y sencillo, ya que los SGBDs en general no eran lo bastante flexibles ni

veloces para lo que necesitaban, por lo que tuvieron que desarrollar nuevas funciones. De

todo esto surgió una nueva interfaz SQL (con código más portable) desarrollada en lenguaje C

y con apariencia similar a los nombres y funciones de muchos de sus programas.

Su principal objetivo de diseño fue la velocidad, por ello en sus primeras versiones se

suprimieron algunas características de otros SGBDs (Sistemas de Gestion de Base de Datos),

como el control de transacciones y las subconsultas. Consume pocos recursos y se distribuye

bajo licencia GPL.

Anl. Mauricio Arévalo M.

- Pág. 40 -

Según sus autores en un fragmento del manual MySQL, comentan que “no se sabe con

certeza de donde proviene el nombre pero las librerías han llevado el prefijo 'my' durante los

diez últimos años, además de que la hija de uno de los desarrolladores, Monty Widenius, se

llama My”6. El nombre de la mascota o delfín de MySQL es "Sakila", que fue elegido por los

fundadores de MySQL AB.

Su primera versión publicada bajo licencia GPL fue la 3.22 por el año de 1997, luego

han surgido las que hoy en día son versiones estables y que se pueden descargar desde su sitio

web (www.mysql.com) como la 3.23, 4.0 y 4.1, la 5.0 publicada en el año 2005 y la 5.1

publicada el 2006. Se está desarrollando actualmente la versión 5.2 para publicarse en a

finales del 2006 o inicios del 2007. La versión en la que se hicieron las respectivas pruebas y

los ejemplos que se muestran en la presente monografía es la “5.0.24” para el sistema

operativo Microsoft Windows XP.

Aunque MySQL es software libre y gratuito, MySQL AB distribuye las respectivas

versiones comerciales de MySQL, que se diferencian de las versiones libres en el soporte

técnico y las actualizaciones que se ofrecen.

Este gestor de bases de datos es probablemente el gestor más usado en el mundo del

software libre, debido sobretodo a su gran rapidez y desempeño, su fácil instalación y

configuración además de la facilidad de uso mediante herramientas que permiten su operación

a través de diversos lenguajes de programación.

4.2. Características y Funcionalidad del Servidor MySQL

MySQL es actualmente el servidor de base de datos más popular para los desarrollos

web. Es muy rápido y sólido, siendo muchos los administradores que lo instalan, y sin

embargo pocos los que conocen todo su potencial y características que lo hacen ser una

excelente alternativa como un servidor de bases de datos por su desempeño rápido, estable,

óptimo, confiable y seguro.

6 Tomado de MySQL Manual (www.netpecos.org/docs/mysql_postgres/b164.html#MYSQL)

Anl. Mauricio Arévalo M.

- Pág. 41 -

En base a lo recopilado de la documentación de sus desarrolladores7, a continuación

resalto las que considero las principales características de MySQL clasificadas según su

funcionalidad:

- Interioridades y portabilidad

• MySQL está escrito en C y C++.

• Trabaja bajo diferentes plataformas: AIX 4x 5x, Digital Unix 4x, FreeBSD 2x 3x 4x,

HP-UX 10.20 11x, Linux 2x, Mac OS, NetBSD, Novell NetWare 6.0, OpenBSD 2.5,

OS/2, SCO OpenServer, SCO UnixWare 7.1.x, SGI Irix 6.x, Solaris 2.5, SunOS 4.x,

Tru64 Unix y Windows 9x, Me, NT, 2000, XP, 2003.

• Dispone de APIs (Interfaz de Programación para Aplicaciones) para C, C++, Eiffel,

Java, Perl, PHP, Pitón, etc.

• Tiene velocidad cuando se manipula datos con el tipo de tabla “Myisam”; también es

rápido manejando el uso de joins y procesos de optimización.

• Brinda un sistema de almacenamiento transaccional con tablas tipo InnoDB y no

transaccional con tablas tipo MyISAM.

- Sentencias y funciones

• Tiene soporte completo para operadores y funciones en las cláusulas de consultas de

los estándares SQL como SELECT y WHERE. También soporta las cláusulas

GROUP BY y ORDER BY así como las funciones de agrupación (COUNT(),

COUNT(DISTINCT ...), AVG(), STD(), SUM(), MAX(), MIN()).

• Tiene soporte para LEFT OUTER JOIN y RIGHT OUTER JOIN cumpliendo con los

estándares de sintaxis SQL.

• Soporte para alias en tablas y columnas como lo requiere el estándar SQL.

• DELETE, INSERT, REPLACE, y UPDATE devuelven siempre el número de filas

que han cambiado.

7 Más información sobre las características técnicas en el manual de referencia de MySQL: http://dev.mysql.com/doc/refman/5.0/es/

Anl. Mauricio Arévalo M.

- Pág. 42 -

• Se puede mezclar tablas de distintas bases de datos en la misma consulta (a partir de la

versión MySQL 3.22).

• Desde la versión 4.0 de My SQL se permite realizar la UNION de consultas mediante

la cláusula UNION.

- Seguridad

• MySQL posee un sistema de privilegios y contraseñas que es flexible y seguro ya que

todo el tráfico de contraseñas está encriptado cuando se conecta con un servidor.

- Escalabilidad y límites

• Se usa MySQL Server con grandes bases de datos que contienen hasta 50 millones de

registros y 60.000 tablas que trabajan de manera estable. Se permiten hasta 64 índices

por tabla (32 antes de la versión MySQL 4.1.2). Cada índice o clave puede consistir

desde 1 hasta 16 columnas.

- Conectividad

• Los clientes se pueden conectar con el servidor MySQL usando sockets TCP/IP en

cualquier plataforma.

• La interfaz para el conector ODBC (MyODBC) proporciona a MySQL el soporte para

programas clientes que usen conexiones ODBC (Open Database Connectivity) y se lo

puede descargar desde el sitio web de MySQL (http://dev.mysql.com/downloads). Los

clientes pueden ejecutarse en Windows, Unix o Linux; el código fuente de MyODBC

está disponible y todas las funciones del estándar ODBC 3.51 están soportadas.

- Localización

• El servidor puede proporcionar mensajes de error a los clientes en distintos idomas.

Anl. Mauricio Arévalo M.

- Pág. 43 -

• Tiene soporte completo para distintos conjuntos de caracteres, incluyendo latin1 (ISO-

8859-1), german, big5, ujis, etc. El soporte para Unicode también está disponible.

• Todas las comparaciones para columnas normales de cadenas de caracteres son “case-

insensitive”, es decir no distinguen mayúsculas y minúsculas.

- Clientes y herramientas

• MySQL Server viene con las aplicaciones mysqlcheck y myisamchk que realizan

operaciones como chequear, optimizar, y reparar tablas de tipo InnoDB y de tipo

MyISAM respectivamente.

• Incluye las aplicaciones mysqlhotcopy y el mysqldump para crear copias de seguridad

de la base de datos.

• Mysqladmin es una aplicación cliente para realizar operaciones administrativas, se usa

para comprobar la configuración y el estado actual del servidor; también para crear y

borrar bases de datos, entre otras finalidades.

• Existen herramientas en modo consola como el Cliente MySQL o de entorno gráfico

con Interfaz Gráfica de Usuario (GUI) como MySQL Front, MySQL Administrador,

MyODBC, phpMyAdmin; las mismas que nos son muy útiles facilitándonos la

administración del servidor MySQL y sus bases de datos con un entorno gráfico para

comodidad del usuario. Así también se pone en conocimiento buenas herramientas de

modelado de bases de datos MySQL como DeZings y DBDesigner. MySQL Query

Browser es una herramienta para crear, ejecutar y optimizar consultas; también existe

una herramienta llamada MySQL Migration Toolkit para migrar bases de datos de

otros sistemas manejadores de Bases de Datos hacia MySQL.

Además de las características mencionadas anteriormente, vale la pena realizar a

continuación un análisis de ciertas características que considero importantes y destacadas;

muchas de estas características8 se han venido incoorporado en las últimas versiones de

MySQL, algunas de ellas se muestran en la tabla4.1:

8 Se puede revisar más información en http://dev.mysql.com/doc/refman/5.0/es/roadmap.html

Anl. Mauricio Arévalo M.

- Pág. 44 -

Característica Serie (Versión) MySQL desde que se incluye

Cláusula Union 4.0

Subconsultas 4.1

Procedimientos Almacenados 5.0

Triggers o Disparadores 5.0 y 5.1

Claves foráneas para tablas MyISAM 5.2 (ya está implementado para tablas InnoDB)

Tabla 4.1: Historia de las características de MySQL

- Servidor Incrustrado

La biblioteca del Servidor incrustado “libmysqld” permite que MySQL Server pueda

trabajar con una gran cantidad de dominios de aplicaciones. Usando esta biblioteca, los

desarrolladores pueden añadir MySQL Server en varias aplicaciones y dispositivos

electrónicos, donde el usuario final no tiene conocimiento que hay una base de datos

incrustrada.

La biblioteca incrustada MySSQL usa la misma interfaz que la biblioteca cliente

normal, por lo que es conveniente y fácil de usar.

- Disparadores o Triggers

Otra de las características que presenta MySQL es la del soporte básico para

disparadores (triggers). Un disparador es un objeto programado de una base de datos que se

asocia a una tabla y se activa cuando ocurre un evento en particular para dicha tabla.

Algunos usos para los disparadores son verificar valores a ser insertados o llevar a

cabo cálculos sobre valores involucrados en una actualización. Un disparador se asocia con

una tabla y se define para que se active automáticamente al ocurrir una sentencia INSERT,

DELETE, o UPDATE sobre dicha tabla; además la activación puede ocurrir antes o después

de la sentencia. Para crear o eliminar un disparador se emplean las sentencias CREATE

TRIGGER y DROP TRIGGER. La sintaxis para crear un disparador es la siguiente:

Anl. Mauricio Arévalo M.

- Pág. 45 -

CREATE TRIGGER nombre_disp momento_disp evento_disp ON nombre_tabla FOR EACH ROW sentencia_disp

Por ejemplo, las siguientes sentencias crean una tabla y un disparador para sentencias

INSERT dentro de la tabla. El disparador suma en una variable “sum” los valores insertados

en una de las columnas de la tabla. Para utilizar el disparador, se debe establecer el valor de

la variable acumuladora a cero, ejecutar una sentencia INSERT, y luego obtener el valor que

presenta la variable:

mysql> CREATE TABLE prueba_suma (sum_num INT, monto DECIMAL(10,2)); mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON prueba_suma -> FOR EACH ROW SET @sum = @sum + NEW.monto; mysql> SET @sum = 0; mysql>INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00); mysql> SELECT @sum AS 'Total monto Insertado'; +-----------------------+ | Total monto Insertado | +-----------------------+ | 1852.48 | +-----------------------+

No se pueden tener dos disparadores para una misma tabla que sean activados por el

mismo evento. Por ejemplo, no se pueden definir dos BEFORE INSERT o dos AFTER

UPDATE en una misma tabla; sin embargo esta no es una gran limitación, porque es posible

definir un disparador que ejecute múltiples sentencias empleando el constructor de sentencias

compuestas BEGIN...END luego de FOR EACH ROW.

Dentro del bloque BEGIN, también pueden utilizarse otras sintaxis permitidas en

rutinas almacenadas, tales como condicionales y bucles. Cuando se crea un disparador que

ejecuta sentencias múltiples, se hace necesario redefinir el delimitador de sentencias

(con el comando delimiter) si el disparador se ingresa a través del programa mysql, de forma

que se pueda utilizar el caracter ';' dentro de la definición del disparador. Ejemplo:

mysql> delimiter // mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON prueba_suma -> FOR EACH ROW -> BEGIN -> IF NEW.monto < 0 THEN -> SET NEW.monto = 0; -> ELSEIF NEW.monto > 100 THEN -> SET NEW.monto = 100;

Anl. Mauricio Arévalo M.

- Pág. 46 -

-> END IF; -> END;// mysql> delimiter ;

Las palabras claves OLD y NEW permiten acceder a columnas en los registros

afectados por un disparador. En un disparador para INSERT, solamente puede utilizarse

NEW.nom_col ya que no hay una versión anterior del registro, mientras que en un disparador

para DELETE sólo puede emplearse OLD.nom_col, porque no hay un nuevo registro. En un

disparador para UPDATE se puede emplear OLD.nom_col para referirse a las columnas de un

registro antes de que sea actualizado, y NEW.nom_col para referirse a las columnas del

registro luego de actualizarlo.

Se puede crear un trigger que ejecute varias operaciones al activarse un evento

(INSERT, DELETE Y UPDATE) que actúe sobre una tabla. En el ejemplo creado a

continuación se han creado 4 tablas y se crea un trigger que se dispare cuando ocurra un

evento INSERT en la tabla “test1” y que ejecuta 3 operaciones en las otras tablas:

CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4(a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0); DELIMITER // CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END // DELIMITER;

- MySQL Cluster

Una característica que incorporan las últimas versiones de MySQL es el MySQL

Cluster, una versión de alta disponibilidad y alta redundancia de MySQL adaptada para el

entorno de computación distribuida. Se usa el motor de almacenamiento NDB Cluster para

permitir la ejecución e interacción de varios servidores MySQL en un cluster. Este motor de

almacenamiento está disponible en las distribuciones de MySQL 5.0, en los paquetes

compatibles con las distribuciones Linux más modernas.

Anl. Mauricio Arévalo M.

- Pág. 47 -

Figura 4.1: Estructura del MySQL Clulster

MySQL Cluster integra el servidor MySQL estándar con un motor de almacenamiento

clusterizado en memoria llamado NDB (genera tablas de tipo NDB). Como se muestra en la

figura 4.1, un MySQL Cluster consiste en un conjunto de máquinas; cada una ejecuta un

número de procesos incluyendo varios servidores MySQL, nodos de datos para NDB Cluster,

servidores de administración, y programas especializados de acceso a datos.

Todos estos programas funcionan juntos para formar un MySQL Cluster. Cuando se

almacenan los datos en el motor NDB Cluster, las tablas se almacenan en los nodos de datos,

Anl. Mauricio Arévalo M.

- Pág. 48 -

utilizando así la tecnología de replicación síncrona. Tales tablas son directamente accesibles

desde todos los otros servidores MySQL en el cluster.

Al llevar MySQL Cluster al mundo “Open Source”, MySQL propociona tratamiento de

datos clusterizados con alta disponibilidad, rendimiento y escalabilidad.

- Replicación

Las características de MySQL 5.X soportan replicación asíncrona unidireccional en la

que un servidor actúa como el maestro y uno o más actúan como esclavos, que es lo que se

diferencia con la replicación síncrona, la misma que se usa en MySQL Cluster.

Se utilizan “logs” que sirven como registros de actualizaciones para enviarlos a todos

los servidores esclavos. Cuando un escalvo se conecta al maestro, informa al mismo de la

posición hasta la que el esclavo ha leído los logs en la última actualización satisfactoria; el

esclavo recibe cualquier actualización que hayan tenido los registros desde entonces, se

bloquea y espera para que el maestro le envíe nuevas actualizaciones.

Se debe tener en cuenta que cuando se usa esta replicación, todas las actualizaciones de

las tablas que se replican deben realizarse en el servidor maestro. La replicación

unidireccional tiene beneficios para mejorar la robustez y administración del sistema.

- Subconsultas

Una subconsulta es un comando de consulta SELECT anidado dentro de otro comando;

se permiten desde la versión 4.1. MySQL 5.0 soporta todas las formas de subconsultas y

operaciones que requiere el estándar SQL, así como algunas características específicas de

MySQL. A continuación se muestra un ejemplo de subconsulta:

SELECT * FROM t1 WHERE columna1 = (SELECT columna1 FROM t2);

En este ejemplo, la sentencia “SELECT * FROM t1..”. es la consulta externa (o

comando externo), y “SELECT column1 FROM t2” es la subconsulta. Una subconsulta está

Anl. Mauricio Arévalo M.

- Pág. 49 -

anidada dentro de la consulta exterior, y de hecho, es posible anidar subconsultas dentro de

otras subconsultas hasta una profundidad considerable.

Una subconsulta puede retornar un valor único (escalar), un registro, una columna o una

tabla; estas se llaman consultas de escalar, columna, registro y tabla.

Hay pocas restricciones sobre los tipos de comandos en que pueden usarse las

subconsultas. Una subconsulta puede contener cualquiera de las palabras claves o cláusulas

que puede contener una sentencia SELECT ordinaria: DISTINCT, GROUP BY, ORDER BY,

LIMIT, JOINS, restringir registros con WHERE, sentencias UNION, comentarios, funciones,

etc.

Una restricción es que el comando exterior de una subconsulta debe ser: SELECT,

INSERT, UPDATE, DELETE, SET. Otra restricción es que actualmente no se puede

modificar una tabla y seleccionar de la misma tabla los valores en la subconsulta.

Las subconsultas también se presentan en la cláusula FROM de un comando SELECT,

con la siguente sintaxis:

SELECT... FROM (subconsulta) [AS] nombre ...

La cláusula “[AS] nombre” es obligatoria, ya que cada tabla en la cláusula FROM debe

tener un nombre. Los nombres de columnas usados dentro de la subconsulta se reconocen en

la consulta exterior como si la subconsulta se tratara de cualquier tabla en la cláusula FROM.

- Procedimientos y Funciones almacenadas

MySQL ofrece soporte para procedimientos y funciones almacenadas, que son rutinas

que los procesa el servidor MySQL, en los que se puede insertar código para ejecutar bucles o

condiciones que incluyen sentencias SQL para que se ejecuten mediante llamadas (CALL)

cuando se las necesite. Los procedimientos almacenados y las funciones se crean con los

comandos CREATE PROCEDURE y CREATE FUNCTION.

CREATE PROCEDURE sp_name ([parametros[,...]]) [caracteristicas ...] cuerpo_rutina

Anl. Mauricio Arévalo M.

- Pág. 50 -

CREATE FUNCTION sp_name ([parametros[,...]]) RETURNS tipo [caracteristicas ...] cuerpo_rutina

Donde:

parametros: [ IN | OUT | INOUT ] param_nombre tipo

tipo: Es cualquier tipo de dato válido de MySQL

caracteristicas: LANGUAGE SQL | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | COMMENT 'string'

cuerpo_rutina: Son procedimientos almacenados o comandos SQL válidos

Un procedimiento sólo puede pasar valores usando variables de salida (OUT). Una

función puede llamarse desde dentro de un comando como cualquier otra función (invocando

el nombre de la función) y puede retornar un valor escalar o único.

Desde MySQL 5.0.1, los procedimientos almacenados se asocian con una base de datos

y se pueden calificar los nombres de rutinas con el nombre de la base de datos; por ejemplo,

para invocar procedimientos almacenados p o funciones f que se asocian con la base de datos

“prueba”, se los puede invocar con CALL prueba.p() o prueba.f(). Cuando se borra una base

de datos, todos los procedimientos almacenados asociados con ella también se borrarán.

- Modos SQL

A partir de la versión 5.0.2 de MySQL, están disponibles los “modos SQL” que son

opciones que nos permiten proporcionar un mayor control sobre cómo aceptar valores.

Los modos definen qué sintaxis SQL debe soportar MySQL y que clase de chequeos de

validación de datos debe realizar. Esto hace más fácil de usar MySQL en distintos entornos y

usar MySQL junto con otros servidores de bases de datos.

Anl. Mauricio Arévalo M.

- Pág. 51 -

MySQL nos permite trabajar con tablas transaccionales, que permiten realizar un control

de transacciones, manteniendo y asegurando de esta manera la integridad de los datos pero

MySQL también nos da la opción de trabajar con tablas no transaccionales que no permiten

realizar un control transaccional.

Es por ello que las restricciones son algo distintas en MySQL respecto a otras bases de

datos. Debemos tratar el caso en el que se insertan o actualizan muchos registros en una tabla

no transaccional en la que los cambios no pueden deshacerse cuando ocurre un error. La

filosofía básica es que MySQL Server trata de producir un error para cualquier cosa que

detecte mientras chequea un comando que va a ejecutarse, y las opciones que MySQL nos

ofrece cuando ocurre un error en una transacción son parar el comando en medio de la

ejecución o recuperarse lo mejor posible del problema y continuar. Por defecto, en tablas no

transaccionales como MyISAM, el servidor utiliza esta última opción.

Esto significa, que el servidor puede cambiar algunos valores ilegales por el valor legal

más próximo. En este modo, cuando se inserta un valor incorrecto en una columna, MySQL

cambia el valor al “mejor valor posible” para la columna en lugar de producir un error. Los

modos SQL u opciones con las que MySQL nos permite realizar estas operaciones son

STRICT_TRANS_TABLES y STRICT_ALL_TABLES.

Para tablas no transaccionales como MyISAM, si un valor incorrecto se encuentra en el

primer registro a insertar o actualizar, el comando se aborta y la tabla continúa igual. Si el

comando inserta o modifica varios registros y el valor incorrecto aparece en el segundo o

posteriores registros, el resultado depende de cúal es el modo estricto que esté habilitado:

� Para STRICT_ALL_TABLES, MySQL devuelve un error e ignora el resto de los

registros. Sin embargo, en este caso los primeros registros se insertan o actualizan y esto

significa que puede producirse una actualización parcial, que puede ser no deseada.

� Para STRICT_TRANS_TABLES, MySQL convierte los valores inválidos en el valor

válido más próximo para la columna e inserta el nuevo valor. En este caso MySQL genera

una advertencia en lugar de un error y continúa procesando el comando.

Usando estas opciones, se puede configurar MySQL Server para actuar en un modo más

“tradicional” como otros servidores de bases de datos que rechazan datos incorrectos. Los

Anl. Mauricio Arévalo M.

- Pág. 52 -

modos SQL se pueden configurar cuando inicia la aplicación cliente mysql cambiando la

variable sql_mode como se muestra a continuación:

--sql-mode="modo_SQL"

El valor puede dejarse en blanco (--sql-mode="") si se desea resetearlo. En MySQL 5.0,

también se puede cambiar el modo SQL tras el tiempo de arranque cambiando la variable

sql_mode usando el comando

SET [SESSION|GLOBAL] sql_mode="modo_SQL"

Asignar la variable GLOBAL afecta a las operaciones de todos los clientes que se

conecten a partir de entonces; en cambio, asignar la variable SESSION afecta sólo al cliente

actual. Cualquier cliente puede cambiar el valor de la variable sql_mode en su sesión en

cualquier momento.

- Utilización de variables de usuario

Se pueden emplear variables de usuario de MySQL con el símbolo de ‘@’ para retener

resultados sin necesidad de almacenarlos en variables del lado del cliente. Por ejemplo, para

encontrar los artículos con el precio más alto y el más bajo de una tabla “compras” se puede

hacer lo siguiente:

mysql> SELECT @min_precio:=MIN(precio),@max_precio:=MAX(precio) FROM compras; mysql> SELECT * FROM compras WHERE precio=@min_precio OR precio=@max_precio; +---------+-------+ | articulo| precio| +---------+-------+ | 0003 | 1.25 | | 0004 | 19.95 | +---------+-------+

- Control de Transacciones en tablas “InnoDB”

MySQL permite el control transaccional en las operaciones SQL que afecten a las tablas

de tipo InnoDB para brindar mayor seguridad e integridad en los datos. De forma

Anl. Mauricio Arévalo M.

- Pág. 53 -

predeterminada, cada cliente que se conecta al servidor MySQL comienza con el modo de

“autocommit” habilitado, lo cual automáticamente confirma (commit) o almacena la

actualización en disco de cada sentencia SQL ejecutada en el instante de su ejecución.

Para utilizar transacciones de múltiples sentencias se puede deshabilitar el modo

autocommit con la sentencia SQL “SET AUTOCOMMIT = 0” y emplear COMMIT y

ROLLBACK para confirmar o cancelar una transacción.

Tras deshabilitar el modo autocommit poniendo la variable AUTOCOMMIT a cero, se

debe usar COMMIT para almacenar los cambios en disco o ROLLBACK si se quiere ignorar

los cambios hechos desde el comienzo de la transacción. Si se quiere deshabilitar el modo

autocommit sólo para una serie única de comandos, se usa el comando START

TRANSACTION o sus alias BEGIN o BEGIN WORK como se muestra a continuación:

START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;

Con START TRANSACTION, autocommit permanece deshabilitado hasta el final de la

transacción donde esté COMMIT o ROLLBACK; entonces el modo autocommit vuelve a su

estado previo. El siguiente ejemplo muestra dos transacciones, la primera se confirma con

BEGIN y COMMIT mientras la segunda se cancela con el comando ROLLBACK:

mysql> CREATE TABLE CLIENTE (A INT, B CHAR (20)) -> ENGINE=InnoDB; Query OK, 0 rows affected (0.00 sec) mysql> BEGIN; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO CLIENTE VALUES (10, 'Pedro'); Query OK, 1 row affected (0.00 sec) mysql> COMMIT; Query OK, 0 rows affected (0.00 sec) mysql> SET AUTOCOMMIT=0; Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO CLIENTE VALUES (15, 'Juan'); Query OK, 1 row affected (0.00 sec) mysql> ROLLBACK; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM CLIENTE;

Anl. Mauricio Arévalo M.

- Pág. 54 -

+------+--------+ | A | B | +------+--------+ | 10 | Pedro | +------+--------+ 1 row in set (0.00 sec)

Desde MySQL 5.0, las tablas de tipo InnoDB soportan los comandos SQL para el

control de transacciones SAVEPOINT y ROLLBACK TO SAVEPOINT; su sintaxis es:

SAVEPOINT identificador ROLLBACK TO SAVEPOINT identificador

El comando SAVEPOINT crea un punto dentro de una transacción con un nombre

(identificador). El comando ROLLBACK TO SAVEPOINT deshace una transacción hasta el

punto nombrado. Todos los puntos de la transacción actual se borran si se ejecuta un

comando COMMIT o un ROLLBACK que no nombre ningún punto.

Suponiendo que, como en el ejemplo dado anteriormente, se está trabajando por defecto

con el motor de base de datos que crea por defecto tablas de tipo MyISAM, se debe

especificar la opción ENGINE = InnoDB o TYPE = InnoDB en la sentencia SQL de creación

de tabla para crearla como tipo InnoDB como se muestra a continuación:

CREATE TABLE CLIENTE (a INT, b CHAR (20)) ENGINE=InnoDB; CREATE TABLE CLIENTE (a INT, b CHAR (20)) TYPE=InnoDB;

- Pasar tablas MyISAM a InnoDB

Si se desea que todas las tablas que no sean de sistema se creen como tablas InnoDB,

simplemente debe agregarse la línea default-table-type=innodb a la sección [mysqld] del

fichero my.cnf9 o my.ini.

Cabe mencionar que no se deben convertir las tablas del sistema en la base de datos

Mysql (por ejemplo, user o host) al tipo InnoDB ya que las tablas del sistema siempre son del

tipo MyISAM.

9 Este archivo de configuración de MySQL se encuentra ubicado en C:\Archivos de programa\MySQL\MySQL Server 5.0 en Microsoft Windows o en el directorio

Anl. Mauricio Arévalo M.

- Pág. 55 -

Para cambiar una tabla al motor InnoDB se puede alterar el motor de almacenamiento en

la tabla o, hacer las inserciones directamente en la nueva tabla InnoDB con las mismas

definiciones que se tienen en las columnas de la tabla de tipo MyISAM. Es decir, podríamos

utilizar la sentencia ALTER TABLE... ENGINE=INNODB para alterar el motor de

almacenamiento, o crear una nueva tabla InnoDB vacía con idénticas definiciones e insertar

las filas con la sentencia INSERT, como se muestra a continuación:

INSERT INTO nuevatabla SELECT * FROM viejatabla WHERE clave > valor1 AND clave <= valor2;

- Conversiones de Tipos de Datos

Las funciones CAST() y CONVERT() pueden ser usadas para tomar un valor de un tipo

y producir un valor de otro tipo. Sin embargo, el tipo de dato internamente no cambia en la

estructura de la tabla. Su sintaxis es la siguiente:

CAST(expr AS tipo) CONVERT(expr,tipo) ó CONVERT(expr USING transcoding_name)

Donde “tipo” es el nuevo tipo de dato asignado al valor de “expr”. La función

CONVERT() junto con la palabra USING es usado para convertir datos entre distintos

conjuntos de caracteres, así se muestran los siguientes ejemplos:

SELECT CONVERT('abc' USING utf8);

SELECT (CONVERT(coltipo1 USING latin1))as coltipo2 FROM tabla1;

- El Diccionario de Datos (INFORMATION_SCHEMA )

La base de datos de información INFORMATION_SCHEMA está disponible en MySQL

5.0.2 y versiones posteriores, proporciona un acceso a los metadatos de la base de datos. Los

Metadatos son datos acerca de los datos, tales como el nombre de la base de datos o tabla, el

tipo de datos de una columna, o los permisos de acceso. Otros términos que a veces se usan

para esta información son diccionario de datos o catálogo del sistema.

Anl. Mauricio Arévalo M.

- Pág. 56 -

INFORMATION_SCHEMA es la base de datos de información, que almacena

información acerca de todas las otras bases de datos que mantiene el servidor MySQL .

Dentro de INFORMATION_SCHEMA hay varias tablas de sólo lectura, que realidad

son vistas, no tablas, así que no se puede ver ningún fichero asociado con ellas. Cada usuario

de MySQL tiene derecho a acceder a estas tablas, pero sólo a los registros que corresponden

a los objetos a los que tiene permiso de acceso.

En el siguiente ejemplo, el comando pide una lista de todas las tablas en la base de datos

“db5”, en orden alfabético inverso y mostrando tres informaciones: el nombre de la tabla, su

tipo y su motor.

mysql> SELECT table_name, table_type, engine -> FROM information_schema.tables -> WHERE table_schema = 'db5' -> ORDER BY table_name DESC; +------------+------------+--------+ | table_name | table_type | engine | +------------+------------+--------+ | v56 | VIEW | NULL | | v3 | VIEW | NULL | | v2 | VIEW | NULL | | v | VIEW | NULL | | tables | BASE TABLE | MyISAM | | t7 | BASE TABLE | MyISAM | | t3 | BASE TABLE | MyISAM | | t2 | BASE TABLE | MyISAM | | t | BASE TABLE | MyISAM | | pk | BASE TABLE | InnoDB | | loop | BASE TABLE | MyISAM | | kurs | BASE TABLE | MyISAM | | k | BASE TABLE | MyISAM | | into | BASE TABLE | MyISAM | | goto | BASE TABLE | MyISAM | | fk2 | BASE TABLE | InnoDB | | fk | BASE TABLE | InnoDB | +------------+------------+--------+ 17 rows in set (0.01 sec)

4.3. Estructura del Servidor MySQL

En el caso de MySQL, el servidor es el que realiza todas las operaciones sobre las

bases de datos, en realidad se comporta como un interfaz entre las bases de datos y nuestras

Anl. Mauricio Arévalo M.

- Pág. 57 -

aplicaciones. Las aplicaciones se comunicarán con el servidor mediante programas (clientes)

para leer o actualizar la base de datos:

El diseño de MySQL Server es multicapa, con módulos independientes, lo cual hace que

su desempeño sea óptimo, rápido, confiable y seguro. Algunos de los últimos módulos

creados para MySQL se listan a continuación con una indicación del nivel de pruebas o testeo

en el que se encuentran:

• Replicación (Estable): Hay grandes grupos de servidores usando replicación en

producción, con muy buenos resultados. Se sigue trabajando para mejorar las

características de replicación en MySQL 5.x.

• Tablas InnoDB (Estable): El motor de almacenamiento transaccional InnoDB es

estable y usado en grandes sistemas de producción con alta carga de trabajo.

• MyODBC 3.51 (Estable): MyODBC 3.51 usa ODBC (Open DataBase Connectivity)

3.51 y es usado ampliamente para la realizar las conexiones a bases de datos.

MySQL utiliza los comandos, cláusulas, tipos de datos, operadores y funciones que

cumplen con los estándares ANSI e ISO de SQL/92; aunque como la mayoría de gestores de

bases de datos posee algunos comandos, cláusulas y funciones “extendidas”, es decir,

implementadas por los propios desarrolladores de MySQL.

Figura 4.2: Estructura del Servidor MySQL

Anl. Mauricio Arévalo M.

- Pág. 58 -

4.3.1. Tipos de Tablas

El servidor MySQL cuenta con una variedad de tipos de tablas para el almacenamiento

de la información, dependiendo de las necesidades y cantidades de información que una

aplicación puede tener, se elige el tipo de tabla con la que más se acople. En una sola base de

datos es posible tener diferentes tipos de tablas y existe la posibilidad de variar el tipo de

tabla después de ser creada. La estructura de la tabla que se crea, es guardada en un

archivo con el nombre de la tabla y extensión .FRM mientras que el archivo de índices en

MySQL tiene la extensión .MYI.

Actualmente en MySQL existen 16 tipos de tablas; a continuación se mencionan las más

representativas:

• MYISAM: Es el tipo de tabla no transaccional por defecto en MySQL desde la versión

3.23. y hasta la versión 4; es optimizada para sistemas operativos de 64 bits. En este

tipo de tabla los datos se almacenan en un formato independiente, con lo que se pueden

copiar tablas de una máquina a otra de distinta plataforma. Tiene la posibilidad de

indexar los campos BLOB y TEXT. Su mayor característica es la velocidad y toda la

información a cerca de una tabla de este tipo, queda almacenada en un archivo con la

extensión .MYD.

• INNODB: Es el tipo de tabla transaccional por defecto desde de la versión 4 en

adelante. Este tipo de tabla maneja transacciones seguras mediante comandos como

begin trans, commit, rollback. Son menos rápidas y ocupan más memoria que las tablas

Myisam, pero a cambio ofrecen mayor seguridad frente a fallos durante una transacción

en la base de datos y soportan completamente restricciones de claves primarias, únicas y

foráneas. La información de esta tabla queda almacenada en un archivo con la

extensión .IDB.

• MEMORY: La estructura de estas tablas son almacenadas en disco en un archivo con

extensión .FRM usando por defecto indexación tipo “hash”. Estas tablas pueden ser

muy rápidas y muy utilizadas como tablas temporales. Sin embargo, cuando el servidor

Mysql Server es reiniciado, toda la información de las tablas se pierde quedando

Anl. Mauricio Arévalo M.

- Pág. 59 -

solamente la estructura. Este tipo de tablas no soportan las columnas de tipo blob o

Text.

• MERGE: También conocida como MRG_ISAM, más que un tipo de tabla es la

posibilidad de dividir tablas MYISAM de gran tamaño (solo es útil si son

verdaderamente de gran tamaño) y hacer consultas sobre todas ellas con mayor rapidez.

Las tablas deben ser de tipo MyIsam e idénticas en su estructura, luego se crea la tabla

tipo MERGE haciendo relación a las tablas creadas; esta tabla queda almacenada en un

archivo con la extensión .MRG.

• NDBCLUSTER: Este tipo de tabla se utiliza para el manejo de MySql Cluster en

Mysql Server. Se implementa con pruebas desde la versión MySQL 5.0.

• CSV: Este tipo de tabla fue adicionada desde la versión de MySQL 4.1.4 y almacena la

información en un archivo de texto separado por comas. Cuando se crea una tabla de

tipo Csv, se crean dos archivos, uno con extensión .FRM donde almacena la estructura

de la tabla y otro .CSV donde reposa la información.

• ARCHIVE: Este tipo de tabla fue adicionada a partir de la versión 4.1.3 y es usada

para almacenar información sin ningún tipo de indexación. Cuando se crea una tabla

de este tipo, MySQL crea un archivo con la extensión .FRM donde se almacena la

estructura de la tabla y otros archivos con la extensión .ARZ, .ARM y .ARN. Este

tipo de tabla soporta únicamente los comandos insert y select.

En las últimas versiones, el servidor MySQL con las tablas de tipo MyISAM puede

almacenar hasta 65 terabytes mientas que con tablas tipo Innodb la capacidad máxima de

almacenamiento es de 64 terabytes. Cuando se trabaja con altos volúmenes de información

es importante tener presente el límite en tamaño para un archivo que soporta el sistema

operativo. Por lo tanto, el tamaño efectivo máximo para las bases de datos en MySQL

usualmente los determinan los límites de tamaño de ficheros del sistema operativo y no los

límites internos de MySQL.

Anl. Mauricio Arévalo M.

- Pág. 60 -

En la siguiente tabla se muestra el límite máximo de tamaño que soporta un archivo

para algunos sistemas operativos:

Sistema operativo Limitaciones en el tamaño del archivo Linux 2.4 (Con sistema de archivo ext3 ) 4TB Solaris 9/10 16TB NetWare w/NSS 8TB Win32 w/ FAT/FAT32 2GB/4GB Win32 w/ NTFS 2TB (con posibilidad de crecer) MacOS X w/ HFS+ 2TB

Tabla 4.2: Límites de archivos en el sistema operativo

Se puede chequear el tamaño máximo de una tabla desde el Cliente MySQL con el

comando SHOW TABLE STATUS o con la herramienta myisamchk -dv nombre_tabla.

Los nombres de bases de datos, tablas, índices, columnas y alias son conocidos como

identificadores; los identificadores de bases de datos, tablas y columnas no pueden terminar

con espacios en blanco. La tabla siguiente describe la longitud máxima y los caracteres

permitidos para cada tipo de identificador en MySQL:

Identificador Longitud máxima (bytes) Caracteres permitidos

Base de datos 64

Cualquier carácter permitido en un nombre de directorio, excepto “/” “\” “.”

Tabla 64 Cualquier carácter permitido para un nombre de fichero, excepto “/” “\” “.”

Columna 64 Todos los caracteres Índice 64 Todos los caracteres Alias 255 Todos los caracteres

Tabla 4.3: Límites de archivos en el sistema operativo

4.3.2. Tipos de Datos de MySQL

En MySQL existen varios tipos de datos disponibles, cumpliendo con el estándar

SQL/92. A continuación enumero los tipos de datos agrupándolos por categorías: de

caracteres, enteros, de coma flotante, de fecha y hora, de bloques, enumerados y conjuntos.

Anl. Mauricio Arévalo M.

- Pág. 61 -

• Tipos de datos de cadenas de caracteres: CHAR, CHAR(), VARCHAR().

• Tipos de datos enteros: TINYINT, BIT, BOOL o BOOLEAN, SMALLINT,

MEDIUMINT, INT o INTEGER, BIGINT.

• Tipos de datos de coma flotante: FLOAT, FLOAT(), DOUBLE o REAL,

DECIMAL, NUMERIC o FIXED.

• Tipos de datos para hora y fecha: DATE, DATETIME, TIMESTAMP, TIME,

YEAR.

• Tipos de datos para datos sin tipo o grandes bloques de datos: TINYBLOB o

TINYTEXT, BLOB o TEXT, MEDIUMBLOB o MEDIUMTEXT, LONGBLOB o

LONGTEXT.

• Tipos enumerados y conjuntos: ENUM y SET

4.4. Ventajas y Desventajas de MySQL

4.4.1. Ventajas

• MySQL es Open Source: Significa que es posible para cualquiera usar y modificar el

software. Cualquiera puede bajar el software MySQL desde internet y usarlo sin pagar

nada en la versión gratuita y si se desea, se puede estudiar el código fuente y cambiarlo

para adaptarlo a nuestras necesidades específicas. El software MySQL usa la licencia

GPL (General Public License).

• El servidor de bases de datos relacionales MySQL es muy rápido, fiable y fácil de usar,

ya que en cooperación con los usuarios desarrolladores de Open Source a nivel mundial,

MySQL Server se desarrolló originalmente para manejar grandes bases de datos mucho

Anl. Mauricio Arévalo M.

- Pág. 62 -

más rápido que las soluciones de gestores de bases de datos existentes y ha sido usado

con éxito en entornos de producción de alto rendimiento durante varios años.

• MySQL Server trabaja en entornos cliente/servidor o incrustados; el software de bases

de datos MySQL es un sistema cliente/sevidor que consiste en un servidor SQL que

trabaja con diferentes programas y bibliotecas cliente, herramientas administrativas y

diversas interfaces de programación para aplicaciones (APIs). También se proporciona

el MySQL Server como biblioteca incrustada, que se puede incluir en una aplicación

para obtener un producto más pequeño, rápido y fácil de administrar.

• Una gran cantidad de software de contribuciones está disponible para MySQL, y por

esta razón se pueden usar muchas herramientas disponibles en modo consola y en

entorno gráfico para la administración completa del servidor My SQL.

• MySQL posee un buen control de acceso de usuarios y seguridad en los datos.

• Integración perfecta con el lenguaje PHP (Preprocesador de Hipertexto).

• Soporte completo para cláusulas, funciones, tipos de datos y comandos estándar y

extendidos del estándar SQL.

• Soporte para control de transacciones en tablas transaccionales (tipo InnoDB), y soporte

para procedimientos almacenados, subconsultas y disparadores (Triggers) en las últimas

versiones de MySQL (5.x).

• Gran portabilidad entre distintos sistemas o plataformas.

• Se permite la replicación de bases de datos trabajando con servidores MySQL maestros

y esclavos. También se permite trabajar con el entorno “MySQL Clúster” para dar alta

disponibilidad y rendimiento al sistema.

• Uso de MyODBC, que proporciona a MySQL soporte para programas clientes que usen

conexiones ODBC (Open Database Connectivity).

• Soporta múltiples modos asignados para comportarse como otros gestores de bases de

datos, definiendo la validación o no de los valores erróneos o incorrectos y la forma en

que se ingresan los datos.

Anl. Mauricio Arévalo M.

- Pág. 63 -

4.4.2. Desventajas

• Actualmente, el soporte para disparadores es básico, por lo tanto hay ciertas limitaciones

en lo que puede hacerse con ellos.

• Cuando MySQL maneja la Integridad referencial, con tablas NO transaccionales de tipo

MyISAM, aunque admite la declaración de claves ajenas o foráneas en la creación

tablas, internamente no las trata de forma diferente al resto de campos.

• Los privilegios para una tabla no se eliminan automáticamente cuando se borra una

tabla. Debe usarse explícitamente un comando REVOKE para quitar los privilegios de

una tabla.

• La función de conversión CAST() no soporta la conversión a REAL o BIGINT.

Los desarrolladores comentan en la documentación de MySQL que estas carencias no

les resultaban un problema, ya que era lo que en principio ellos necesitaban. Sin embargo se

las optimizará con la colaboración de los propios usuarios y desarrolladores a nivel mundial,

gracias a que es Software Libre.

4.5. Gestión de Bases de Datos MySQL

Existen muchas formas de establecer una comunicación con el servidor de MySQL; en

algunos casos, se usan librerías y APIs (Interfaz de Programación para Aplicaciones). En

PHP, por ejemplo, este API está integrado con el lenguaje, en C/C++ se trata de librerías de

enlace dinámico, en el proyecto “Mono” para el desarrollo de aplicaciones en la plataforma

.Net se usa el namespace “ByteFX.Data.MySql”, que es un proveedor de ADO.NET y en otros

lenguajes se puede utilizar el conector My ODBC (Open Database Connectivity) para realizar

conexiones con el servidor de MySQL desde cualquier cliente que soporte ODBC.

Así también existen herramientas o aplicaciones que nos son muy útiles facilitándonos

la administración del servidor MySQL y sus bases de datos con un entorno de consola como

el Cliente mysql y el mysqladmin que es una aplicación que nos sirve para realizar

Anl. Mauricio Arévalo M.

- Pág. 64 -

operaciones administrativas, o con herramientas de entorno gráfico como el MySQL Front y

MySQL Administrador.

Incluso existe una aplicación potente y amigable para administrar las bases de datos

MySQL mediante una interfaz Web llamada phpMyAdmin. Existe la aplicación MySQL

Query Browser que es una herramienta creada por MySQL AB para crear, ejecutar y

optimizar consultas en un entorno gráfico y sencillo de manejar para el usuario.

Se dispone también de herramientas de modelado de bases de datos MySQL como

DeZings o DBDesigner y aplicaciones como el MySQL Migration Toolkit para migrar bases

de datos de otros sistemas manejadores de Bases de Datos (DBMS) como Oracle, SQL Server

o Access a MySQL.

Además MySQL Server viene con aplicaciones cliente de consola para realizar

operaciones como chequear, optimizar, y reparar tablas como mysqlcheck o myisamchk para

efectuar estas operaciones en tablas de tipo “MyISAM”. Incluye también el programa para

importar datos mysqlimport y las aplicaciones para copias de seguridad de las bases de datos

mysqlhotcopy y el mysqldump.

Los programas clientes MySQL tienen varias opciones, pero todos ellos proporcionan

una opción --help que puede utilizarse para obtener una descripción completa de las distintas

opciones del programa. Por ejemplo, mysql --help.

Los programas clientes MySQL pueden leer opciones de inicio desde ficheros de

opciones (también llamados a veces ficheros de configuración).

Los siguientes programas clientes soportan ficheros de opciones: myisamchk,

myisampack, mysql, mysqladmin, mysqlcheck, mysqldump, mysqld, mysqlhotcopy,

mysqlimport, y mysqlshow. Los programas MySQL clientes leen las opciones de inicio en los

siguientes ficheros:

Anl. Mauricio Arévalo M.

- Pág. 65 -

Fichero Contenido

WINDIR\my.ini Opciones globales

C:\my.cnf Opciones globales

INSTALLDIR\my.ini Opciones globales

Tabla 4.4: Ubicación de los ficheros de configuración en Windows

WINDIR representa la ubicación del directorio Windows, INSTALLDIR representa el

directorio de instalación de MySQL (generalmente es C:\Archivos de

Programa\MySQL\MySQL 5.0 Server).

En Unix o Linux, los programas MySQL leen sus opciones de inicio en los siguientes

ficheros:

Fichero Contenido

/etc/my.cnf Opciones globales

$MYSQL_HOME/my.cnf Opciones específicas del servidor

Tabla 4.5: Ubicación de los ficheros de configuración en Linux

MYSQL_HOME es una variable de entorno que contiene la ruta al directorio donde

reside el fichero my.cnf específico del servidor. Generalmente esta ruta es

/usr/local/mysql/data para una instalación binaria o /var/lib/mysql para una instalación de

código fuente.

MySQL busca ficheros de opciones exactamente en el orden descrito en las tablas

anteriores y lee cualquiera que exista. Si se desea utilizar un fichero de opciones que no

existe, se lo debe crear con un editor de texto plano; y de existir múltiples ficheros de

opciones, las opciones leídas en último lugar prevalecen sobre las anteriores.

Con toda esta amplia gama de utilidades o herramientas de administración para el gestor

de bases de datos MySQL, realmente creo que está a la par con otros grandes sistemas

manejadores de bases de datos de licencia libre y propietaria, y puede ser usado e incorporado

Anl. Mauricio Arévalo M.

- Pág. 66 -

sin problemas a la mayoría de sistemas o aplicaciones que utilicen un motor de bases de datos

relacional independientemente de su arquitectura y plataforma en la que estén implementadas

a un bajo costo y con un alto rendimiento.

A continuación se citan las características más destacadas de las herramientas y

utilidades “clientes” que nos permiten administrar el servidor MySQL y gestionar sus bases

de datos en modo consola o de línea de comandos:

4.5.1. Cliente mysql

El cliente mysql es una poderosa herramienta interactiva en modo de consola que nos

permite realizar una conexión y administrar un servidor MySQL ejecutando sentencias SQL

para interactuar con las bases de datos, visualizando los resultados de las operaciones

solicitadas.

Se interactúa con el servidor MySQL de forma directa mediante el cliente mysql, el

mismo que se ejecuta en una consola (una ventana DOS en Windows, o un Shell en otros

sistemas como Linux).

Figura 4.3: Cliente MySQL

Para entrar en la consola (Cliente) de MySQL se requieren ciertos parámetros, y la

forma general de iniciar una sesión MySQL es:

Anl. Mauricio Arévalo M.

- Pág. 67 -

mysql -h host -u usuario –p

Los parámetros "-h" y "-u" indican que los parámetros a continuación son,

respectivamente, el nombre del host y el de usuario. El parámetro "-p" indica que se debe

solicitar una clave de acceso.

En versiones de MySQL anteriores a la 4.1.9 es posible abrir un cliente de forma

anónima sin especificar una contraseña, pero esto no es muy seguro y de hecho, las últimas

versiones de MySQL no lo permiten. Durante la instalación de MySQL se nos pide que

elijamos una clave de acceso para el superusuario 'root', el cual tiene todos los permisos o

privilegios y deberemos usar esa clave para iniciar por primera vez una sesión con el cliente

mysql como se muestra a continuación:

mysql -h localhost -u root -p

Enter password: ******* Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 76 to server version: 5.0.11-beta-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>

Un comando interpretado por el Cliente mysql normalmente consiste de cualquier

sentencia SQL (de definición o manipulación de datos) seguida por un punto y coma.

Cuando se emite un comando, el cliente lo manda al servidor para que lo procese y nos

muestra los resultados regresando luego al prompt indicando que está listo para recibir más

consultas u operaciones SQL.

El cliente mysql muestra al final de una operación cuántas filas fueron regresadas o

afectadas y cuanto tiempo tardó en ejecutarse la operación que ejecutamos; lo cual nos da una

idea de la eficiencia del servidor. Las palabras claves y los comandos de MySQL pueden ser

escritos usando tanto mayúsculas como minúsculas (case-insensitive).

El cliente mysql representa los resultados de una consulta como una tabla (filas y

columnas). La primera fila contiene las etiquetas (alias o nombres) para las columnas. Las

filas siguientes muestran los resultados de la consulta como se muestra en el siguiente

ejemplo:

Anl. Mauricio Arévalo M.

- Pág. 68 -

mysql> SELECT * FROM compras; CONSULTA SQL +---------+-------+ | articulo| precio| COLUMNAS DE LA CONSULTA +---------+-------+ | 0003 | 1.25 | | 0004 | 19.95 | | 0005 | 20.95 | RESULTADOS (DATOS) | 0006 | 30.95 | | 0007 | 40.95 | | 0008 | 50.95 | +---------+-------+ 6 rows in set (0.01 sec) NUMERO DE FILAS RETORNADAS Y TIEMPO

QUE TARDÓ LA CONSULTA (EN SEGUNDOS)

Es posible escribir más de una sentencia por línea, siempre y cuando estén separadas por

punto y coma, por ejemplo:

mysql> SELECT VERSION(); SELECT NOW();

+----------------+ | VERSION() | +----------------+ | 5.0.11-beta-nt | +----------------+ 1 row in set (0.01 sec) +---------------------+ | NOW() | +---------------------+ | 2006-08-25 14:26:04 | +---------------------+ 1 row in set (0.01 sec)

Los comandos que requieran de varias líneas no son un problema. El cliente mysql

determinará en dónde finaliza la sentencia cuando encuentre el punto y coma, no cuando

encuentre el fin de línea. Ejemplo:

mysql> SELECT -> USER(),

-> CURRENT_DATE;

+-------------------+--------------+ | USER() | CURRENT_DATE | +-------------------+--------------+ | mauricio@localhost| 2006-08-25 | +-------------------+--------------+ 1 row in set (0.00 sec)

Para ver la lista de opciones proporcionadas por el cliente mysql, lo invocamos con la

opción -- help (mysql –-help). Para comenzar a utilizar e interactuar con el servidor MySQL

mediante el programa cliente mysql, tenemos varios commandos, sentencias, funciónes u

Anl. Mauricio Arévalo M.

- Pág. 69 -

operadores que cumplen con los estándares ANSI e ISO de SQL/92. Para obtener una ayuda

detallada sobre el manejo y las opciones de cada uno de ellos se puede acceder al manual de

referencia en español de MySQL (http://dev.mysql.com/doc/refman/5.0/es/index.html) o

escribiendo en el programa cliente la palabra “help” o “?” seguida por el nombre del comando

a cerca del cual queremos obtener ayuda, como se muestra en el siguiente ejemplo:

mysql>? create database;

Entre los comandos SQL tenemos por ejemplo CREATE DATABASE, que sirve para

crear una nueva base de datos como se muestra a continuación:

mysql> CREATE DATABASE prueba; Query OK, 1 row affected (0.01 sec)

Mediante el comando USE se selecciona la base de datos que se utilizará por defecto en las operaciones que realicemos:

mysql> USE prueba; Database changed

Para salir de una sesión del cliente mysql se usa el comando "QUIT", "EXIT", o

presionando CONTROL+D:

Figura 4.4: Salir del cliente MySQL

Anl. Mauricio Arévalo M.

- Pág. 70 -

4.5.2. Mysqladmin

Este es un programa cliente en modo de consola que realiza tareas administrativas, tales

como crear y borrar bases de datos, recargar las tablas de permisos, volcar tablas a disco y

reabrir ficheros de log. Mysqladmin también puede utilizarse para consultar la versión,

información de procesos, e información de estado del servidor. La siguiente sintaxis se utiliza

para invocar a mysqladmin:

> mysqladmin comando [opciones_de_comando]

Mysqladmin soporta los siguientes comandos:

- Create nombre_base_de_datos: Crea una nueva base de datos.

- Debug: Le dice al servidor que escriba información de depuración en el log de error.

- Drop nombre_base_de_datos: Borra la base de datos y todas sus tablas.

- Extended-status: Muestra las variables de estado del servidor y sus valores.

- Flush-logs: Vuelca todos los logs.

- Flush-privileges: Recarga las tablas de permisos (lo mismo que reload).

- Flush-status: Limpia las variables de estado.

- Flush-tables: Vuelca todas las tablas.

- Ping: Comprueba si el servidor está vivo; el estado retornado por mysqladmin es 0 si el servidor está en ejecución, 1 si no lo está. En MySQL 5.0, el estado es 0 incluso en caso de un error tal como Access denied, ya que esto significa que el servidor está en ejecución pero no ha admitido la conexión.

- Reload: Recarga las tablas de permisos.

- Refresh: Vuelca todas las tablas; cierra y abre los ficheros de logs.

- Shutdown: Detiene o apaga el servidor.

- Start-slave: Comienza la replicación en un servidor esclavo.

- Status: Muestra un mensaje de estado corto del servidor.

- Stop-slave: Detiene la replicación en un servidor esclavo.

Anl. Mauricio Arévalo M.

- Pág. 71 -

- Variables: Muestra las variables de sistema del servidor y sus valores.

- Version: Muestra información de la versión del servidor.

Todos los comandos pueden abreviarse a un prefijo único. Por ejemplo:

> mysqladmin proc stat +----+------+-----------+----+---------+------+------+------------------+ | Id | User | Host | db | Command | Time | State| Info | +----+------+-----------+----+---------+------+------+------------------+ | 51 | root | localhost | | Query | 0 | | show processlist | +----+------+-----------+----+---------+------+------+------------------+ Uptime: 1473624 Threads: 1 Questions: 39487 Slow queries: 0 Opens: 541 Flush tables: 1 Open tables: 19 Queries per second avg: 0.0268 Memory in use: 92M Max memory used: 410M

El apagado del servidor puede ejecutarse con la sentencia mysqladmin shutdown, pero

también son posibles otros métodos de encendido y apagado específicos de cada sistema

operativo. Por ejemplo en un servidor ejecutándose como servicio en Windows se apaga

cuando el administrador de servicios se lo indica.

Los pasos del proceso de apagado del servidor son:

1. Comienza el proceso de apagado

2. El servidor deja de aceptar nuevas conexiones

3. El servidor acaba con su tarea actual

4. Se apagan o cierran los motores de almacenamiento

5. El servidor se cierra

4.5.3. Myisampack

Esta es una utilidad que comprime tablas MyISAM para producir tablas más pequeñas

de sólo lectura. Myisampack funciona comprimiendo cada columna de la tabla

separadamente; normalmente, myisampack comprime el fichero de datos en un 40 a 70 por

ciento.

Anl. Mauricio Arévalo M.

- Pág. 72 -

Cuando la tabla se utiliza posteriormente, el servidor lee en la memoria la información

que se necesita para descomprimir las columnas. Esto da un rendimiento mucho mejor al

acceder a registros individuales, ya que sólo se tiene que descomprimir un registro.

Tras su compresión, la tabla será de sólo lectura. A continuación se muestra como se

invoca a myisampack:

> myisampack [opciones] nombre_fichero(.MYI)

Cada nombre de fichero debe ser el nombre de un fichero índice (.MYI). Si no se

encuentra en el directorio de la base de datos, debe especificar la ruta al fichero. Se permite

omitir la extensión .MYI .

4.5.4. Mysqlcheck y Myisamchk

Son programas clientes de mantenimiento de tablas que verifican, reparan, analizan y

optimizan las tablas del servidor MySQL.

Mysqlcheck es similar a myisamchk, pero funciona de forma distinta. La principal

diferencia operacional es que mysqlcheck debe usarse cuando el servidor mysqld está en

ejecución, mientras que myisamchk debe usarse cuando no lo está. El beneficio de usar

mysqlcheck es que no se tiene que parar el servidor para comprobar o reparar las tablas.

Mysqlcheck usa los comandos SQL CHECK TABLE, REPAIR TABLE, ANALYZE

TABLE, y OPTIMIZE TABLE de forma conveniente para los usuarios. Determina los

comandos a usar en función de la operación que se quiera realizar, luego envía los comandos

al servidor para ejecutarlos. Existen tres modos generales de invocar mysqlcheck:

> mysqlcheck [opciones] nombre_de_base_de_datos [tablas] > mysqlcheck [opciones] --databases DB1 [DB2 DB3...] > mysqlcheck [opciones] --all-databases

Si no se nombra ninguna tabla o se usa las opciones --databases o --all-databases, se

comprueban todas las bases de datos.

Anl. Mauricio Arévalo M.

- Pág. 73 -

4.5.5. Mysqlimport

Es un programa cliente que proporciona una interfaz de línea de comandos para

importar ficheros de texto en sus respectivas tablas usando el comando LOAD DATA INFILE;

mysqlimport se lo invoca como se muestra a continuación:

> mysqlimport [opciones] nombre_de_base_de_datos fichero_de_texto1 [fichero_de_texto2 ...]

Del nombre de cada fichero de texto especificado en la línea de comandos, mysqlimport

elimina cualquier extensión, y utliza el resultado para determinar el nombre de la tabla a la

que importar el contenido del fichero; por lo que el nombre del fichero y el de la tabla deben

ser los mismos. Por ejemplo, los ficheros con nombres “paciente.txt”, “paciente.text” y

“paciente” se importarían todos a la tabla llamada paciente.

El siguiente es un ejemplo de una sesión que demuestra el uso de mysqlimport,

suponiendo que exista una tabla imptest en la base de datos test, y un fichero de texto

“imptest.txt” que contenga dos registros para los campos id y nombre respectivamente:

> mysqlimport test imptest.txt test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 > SELECT * FROM imptest +------+---------------+ | id | nombre | +------+---------------+ | 100 | Max Sydow | | 101 | Count Dracula | +------+---------------+

4.5.6. Mysqldump y Mysqlhotcopy

El cliente mysqldump puede utilizarse para volcar una base de datos o colección de

bases de datos en un fichero como comandos SQL o como ficheros separados por tabuladores

para copia de seguridad o para transferir datos a otro servidor SQL (no necesariamente un

servidor MySQL). EL volcado contiene comandos SQL para crear la tabla y/o rellenarla y

existen tres formas de invocar a mysqldump:

Anl. Mauricio Arévalo M.

- Pág. 74 -

> mysqldump [opciones] nombre_de_base_de_datos [tablas] > mysqldump [opciones] --databases DB1 [DB2 DB3...] > mysqldump [opciones] --all-databases

Si no se nombra ninguna tabla o se utiliza la opción --databases o --all-databases, se

vuelcan todas las bases de datos enteras.

Mysqlhotcopy es un script Perl que usa los comandos LOCK TABLES, para bloquear

las tablas a copiar y cp o scp para realizar una copia de seguridad rápida de la base de datos

mientras el servidor se encuentra en ejecución. Es la forma más rápida de hacer una copia de

seguridad de la base de datos o de tablas, pero sólo puede ejecutarse en la misma máquina

donde está el directorio de base de datos y sólo realiza copias de seguridad de tablas de tipo

MyISAM; además funciona solamente en Unix/Linux y NetWare. Este programa se invoca

como se indica a continuación:

shell> mysqlhotcopy nombre_de_base_de_datos [/ruta_nuevo_directorio]

4.5.7. Perror

Es una utilidad que muestra el significado de los errores de sistema de MySQL. Para la

mayoría de errores de sistema, MySQL muestra, además del mensaje de texto interno, el

código de error de sistema en uno de los siguientes estilos:

message ... (errno: #) message ... (Errcode: #)

Puede aclararse qué significa cada código de error utilizando la utilidad perror de la

siguiente manera:

shell> perror [opciones] código_de_error ...

Ejemplo con los codigos de error 13 y 64:

> perror 13 64 Error code 13: Permission denied Error code 64: Machine is not on the network

Anl. Mauricio Arévalo M.

- Pág. 75 -

Hay que tener en cuenta que el significado de los mensajes de error del sistema pueden

ser dependientes del sistema operativo. Un código de error puede significar cosas distintas en

diferentes sistemas operativos.

Los programas clientes vistos hasta ahora, generalmente se instalan junto con el servidor

MySQL en el directorio de instalación de MySQL/bin. El servidor junto con los programas

clientes se los puede descargar del sitio web de MySQL AB para descargas

(http://www.dev.mysql.com/downloads), donde también se proporcionan diversas

herramientas distribuidas por MySQL AB, como el sistema MySQL Cluster, o los conectores

MyODBC, o distintas APIs para trabanjar con lenguajes como .NET o C++, etc. También se

ofrecen algunos programas con interfaces gráficas de usuario (GUI) para administrar e

interactuar con el servidor MySQL.

Además existen varias herramientas y utilitarios con entorno gráfico desarrolladas por

distintos colaboradores a nivel mundial, que no son distribuidas por MySQL AB, sin embargo

también son muy funcionales y prácticas para gestionar las bases de datos MySQL.

A continuación se citan algunas de estas herramientas:

4.5.8. MySQL Administrator

Esta herramienta es desarrollada y distribuida por MySAL AB y se usa para administrar

servidores MySQL, bases de datos, tablas y usuarios.

MySQL Administrator es un programa para llevar a cabo operaciones administrativas,

como configurar el servidor de MySQL, supervisando su estado y desempeño, se puede

iniciarlo y detenerlo, administrar los usuarios y las conexiones, llevar a cabo los backups o

respaldos y las recuperaciones de las bases de datos y varias otras tareas administrativas,

además permite gestionar las tablas, sus campos, las vistas y procedimientos almacenados.

Todas estas tareas, se las puede realizar mediante programas clientes en modo de consola o

línea de comandos, sin embargo, MySQL Administrator nos facilita mucho la administración

Anl. Mauricio Arévalo M.

- Pág. 76 -

del servidor MySQL ya que gracias a su Interfaz Gráfica de Usuario (GUI) se tiene una

manera fácil e intuitiva de realizar las operaciones administrativas.

Figura 4.5: Conexión para MySQL Administrador

Figura 4.6: Ventana de Administración de MySQL Administrador

Permite la administración correcta del servidor, asegurando su desempeño, fiabilidad, y

seguridad; además despliega indicadores gráficos que muestran el desempeño del servidor,

facilitando su administración. Este software en su última versión (1.2) se lo puede descargar

Anl. Mauricio Arévalo M.

- Pág. 77 -

desde el sitio web de MySQL AB (http://dev.mysql.com/downloads/mysq/gui-tools/5.0.html)

en el paquete “MySQL GUI Tools Bundle for 5.0.” y está disponible para varias plataformas

incluyendo Windows, Linux, MacOS entre otras y se ha diseñado para trabajar con los

servidores de MySQL desde la version 4.0 y posteriores. Al iniciar esta aplicación, se nos

pide que especifiquemos los parámetros de conexión:

4.5.10. MySQL Query Browser

MySQL Query Browser es una herramienta gráfica proporcionada por MySQL AB para

crear, ejecutar, y optimizar consultas de las bases de datos MySQL en un ambiente gráfico,

donde MySQL Administrator está diseñado para administrar el servidor MySQL.

MySQL Query Browser esta diseñado para ayudar a consultar y analizar los datos

almacenados en una base de datos MySQL de una manera fácil, rápida e intuitiva.

Aunque todas las conslutas ejecutadas en el MySQL Query Browser pudieran ser

también ejecutadas en la utilidad cliente de línea de comando mysql, MySQL Query Browser

permite de una manera más intuitiva y grafica la consulta y la edición de datos.

La tarea realizada mas común con el MySQL Query Browser es ejecutar una o varias

consultas y analizar o comparar sus resultados. La manera más directa de crear consultas es

escribirlas directamente sobre el área de consultas, o por medio de las herramientas gráficas

generar las consultas deseadas. Conforme se va escribiendo en el área de resultados, las

porciones de sintaxis de SQL(SELECT, FROM, WHERE, etc) se van resaltando en azul.

Este software en su última versión (1.2) también se lo puede descargar desde el sitio

web de MySQL AB (http://dev.mysql.com/downloads/mysq/gui-tools/5.0.html) en el paquete

“MySQL GUI Tools Bundle for 5.0.” con versiones para varias plataformas incluyendo

Windows, Linux, MacOS entre otras y se ha diseñado para trabajar con los servidores de

MySQL desde la version 4.0 y posteriores.

Anl. Mauricio Arévalo M.

- Pág. 78 -

Figura 4.7: Ventana de MySQL Query Browser

4.5.11. MySQL Migration Toolkit:

Esta herramienta la proporciona MySQL AB y sirve de ayuda en la migración de

esquemas y datos desde otros sistemas de gestión de bases de datos realcionales hacia

MySQL, con un entorno gráfico y facilitando su utilización. Se encuentra en pruebas alfa y

todavía continúan haciendose esfuerzos para mejorarla, ya que contiene algunos errores por lo

que siempre se necesita realizar una copia de respaldo de las bases de datos antes de usar este

software.

MySQL Migration Toolkit soporta una variedad de sistemas gestores de bases de datos,

incluyendo Oracle, Microsoft SQL Server y Microsoft Access

La versión actual de este software es la 1.1 y se lo descarga desde el sitio web de

MySQL AB (http://dev.mysql.com/downloads/mysq/gui-tools/5.0.html) en el paquete

Anl. Mauricio Arévalo M.

- Pág. 79 -

“MySQL GUI Tools Bundle for 5.0.” con versiones para diversas plataformas; está diseñado

para trabajar con los servidores de MySQL desde la version 5.0 y posteriores.

La migración de los datos desde otros sistemas de gestión de bases de datos (SGBD) se

la realiza de una manera sencilla e intuitiva; MySQL Migration Toolkit usa un proceso o plan

de migración de datos por pasos hasta completar exitosamente la migración de los objetos

seleccionados de la base de datos.

Figura 4.8: Ventana de Migración de MySQL Migration Toolkit

4.5.12. MySQL Front

MySQL-Front es una poderosa herrmienta en entorno gráfico que nos permite manejar o

administrar bases de datos MySQL. A diferencia de otros sistemas, no esta programado en

PHP y HTML, por lo que el tiempo de respuesta es mucho más rápido y eficaz. Fue creada

por un grupo de desarrolladores llamado Star-Tools GMBH, en coordinación con la empresa

MySQL AB.

Anl. Mauricio Arévalo M.

- Pág. 80 -

Soporta bases de datos MySQL a partir de la versión 3.23, soporta todo tipo de tablas y

columnas MySQL y funciona con cualquier versión de Windows. Usa un gran número de

funciones API (Interfaz de Programación para Aplicaciones) de Windows, para asegurar la

total compatibilidad con futuras versiones de Windows. Además dispone de un corrector de

gramática SQL coloreando la sintaxis y permite gestionar y guardar las operaciones o

comandos SQL que se realicen en Scripts SQL.

El programa hace posible realizar toda la administración y tareas esenciales tales como

crear y cambiar la estructura de la base de datos, insertar, modificar, eliminar y consultar

datos, crear y modificar disparadores, índices, vistas, rutinas almacenadas, etc.

Ejecuta directamente cualquier órden o comando SQL de una manera fácil y cómoda ya

que entre sus herramientas posee un examinador de objetos, un examinador de datos y un

poderoso editor SQL.

Su instalación es muy fácil a través del asistente (con entorno gráfico) y requiere un

computador con un procesador Pentium o compatible, 32Mb de memoria RAM y 10 Mb de

espacio libre en el disco duro. Este software no es libre, por lo que la última versión

descargada (actualmente la 3.2) puede probarse durante 30 días sin ningún tipo de limitación.

Figura 4.9: Ventana de MySQL Front

Anl. Mauricio Arévalo M.

- Pág. 81 -

Aunque desafortunadamente este producto ya no se produce más y está descontinuado

por desacuerdos entre la comunidad que desarrolla MySQL Front y la empresa que distribuye

MySQL (MySQL AB); sin embargo todavía se lo puede descargar desde algunos sitios web

como “http://www.gamarod.com.ar/ recursos/downloads/programas-downloads.asp?cat=13”

y considero que este producto es una de las mejores herramientas con entorno gráfico para

administrar o gestionar de una manera rápida y eficiente las bases de datos MySQL.

4.5.13. PhpMyAdmin

Para administrar una base de datos MySQL, existe también una interfaz Web bastante

potente e intuitiva llamada PhpMyAdmin. Se la puede descargar desde el sitio web

“http://www.phpmyadmin.net/home_page/index.php” y su última versión estable es la 2.8.2.4;

su licencia es de tipo GPL.

En las palabras de los desarrolladores: “PhpMyAdmin es una herramienta escrita en

PHP con la intención de manejar la administración de MySQL a través de páginas Web,

utilizando la Internet. Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y

alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar

claves en campos, administrar privilegios y usuarios, exportar datos en varios formatos y está

disponible en 47 idiomas”10.

Esta herramienta está desarrollada sobre el lenguaje PHP (Hypertext Preprocessor"),

que es un lenguaje interpretado de alto nivel embebido en páginas HTML y ejecutado en el

servidor. Su versión 4 es la más reciente; es un lenguaje de script incrustado dentro de codigo

HTML. La mayor parte de su sintaxis ha sido tomada de C, Java y Perl con algunas

características especificas de si mismo. La meta del lenguaje es permitir rápidamente a los

desarrolladores la generación dinámica de páginas web.

Luego de descargar el programa, para que funcione, debemos tener configurado el

soporte php e instalado el servidor MySQL. Procederemos luego a descomprimir el fichero

descargado en nuestro servidor Web (puede ser Apache, Personal Web Server 3 y 4 o

10 Tomado de http://www.phpmyadmin.net/home_page/

Anl. Mauricio Arévalo M.

- Pág. 82 -

superior, Internet Information Server 3 y 4 o superior, OmniHTTPd 2.0b1 y superior, Oreilly

Website Pro, Xitami, Netscape Enterprise Server, etc.); estableciendo el enlace al nuevo

directorio y ya podremos entrar en la consola de PhpMyAdmin.

Figura 4.10: Descargar PhpMyAdmin en el servidor Web

A continuación se podrá seleccionar el lenguaje y la base de datos con la que se va a

trabajar. Existen algunas opciones administrativas en PhpMyAdmin como la de obtener

información a cerca del servidor MySQL, administrar los procesos, las bases de datos, los

privilegios, etc.; realizando de manera fácil y rápida cualquier tarea de gestión en las bases de

datos MySQL desde cualquier lugar.

Figura 4.11: Exportar información en diferentes formatos desde PhpMyAdmin

Anl. Mauricio Arévalo M.

- Pág. 83 -

4.5.14. MySQL Developer Studio

MySQL Developer Studio es otra poderosa herramienta gráfica, creada y distribuida por

la empresa “CoreLab” y utilizada para diseñar y simplificar el proceso de desarrollo de bases

de datos MySQL. Ofrece una manera sencilla de administrar y realizar el mantenimiento de

las bases de datos MySQL, nos permite diseñar complejas sentencias SQL, consultas y

manipulación de los datos de diferentes maneras.

Ofrece soporte para bases de datos MySQL a partir de la versión 3.23, soporta todo tipo

de tablas y columnas MySQL y funciona con cualquier versión de Windows. Tiene licencia

de tipo propietara, pero una versión de prueba de 30 días se puede descargar desde su sitio

web para descargas (http://crlab.com/download.html) en su última versión 1.51.

Figura 4.12: Administración de bases de datos con MySQL Developer Studio

Anl. Mauricio Arévalo M.

- Pág. 84 -

4.5.15. DBDesigner

Existen herramientas de modelado de datos para MySQL como DeZign y DBDesigner.

DBDesigner es un Sistema de diseño de bases de datos optimizado para bases de datos

MySQL y es creado y distribuido por el grupo Fabforce. Esta herramienta es software libre,

bajo la licencia GPL e integra el diseño, modelado, creación y mantenimiento de bases de

datos en un solo ambiente gráfico y sencillo de utilizar.

Este software está diseñado para Microsoft Windows 2K/XP y Linux y su última

versión es la 4.0. Se lo puede descargar desde el sitio web “http://www.fabforce.net/

downloads.php”.

Figura 4.13: DB Designer para el Diseño de Bases de Datos

4.6. Instalación y Configuración de MySQL

Existen varias versiones de MySQL para instalarse sobre plataformas diferentes como

Linux, Windows, MacOS, entre otras.

Anl. Mauricio Arévalo M.

- Pág. 85 -

Siempre es posible conseguir la versión estable y recomendada o alguna versión

anterior, o también la versión que actualmente esté en fase de desarrollo, que está destinada a

personas que quieran colaborar en el desarrollo buscando errores o probando las últimas

versiones.

Después de haber decidido qué versión de MySQL instalar, se debe elegir entre una

distribución binaria o una de código fuente. Probablemente la elección más frecuente sea la

distribución binaria, si existe una para la plataforma en cuestión. Hay distribuciones binarias

disponibles en formato nativo para muchas plataformas, como los ficheros RPM para Linux,

paquetes de instalación DMG para Mac OS X, y ficheros comprimidos Zip y tar para

Windows.

Consultando la página de descargas del servidor MySQL

(http://dev.mysql.com/downloads/) se puede obtener información acerca de la versión más

actualizada para cada sistema operativo y ejecutar su descarga.

A continuación muestro una breve guía que espero sirva como ayuda para la instalación

y configuración del servidor MySQL sobre los sistemas operativos Microsoft Windows y el

sistema Linux (software libre). Estas instalaciones las he realizado sobre una máquina con un

procesador Intel Centrino de 1.7GHz, 1Gb de memoria RAM, 40Gb de espacio en Disco

Duro y con la instalación previa de los sistemas operativos Microsoft Windows XP Service

Pack 2 y Linux Fedora Core 5.

4.6.1. Instalación sobre Windows

Para ejecutar MySQL para Windows, se requiere lo siguiente:

• Una máquina con un mínimo de 64 Mb de memoria RAM, un procesador que Intel

Pentium (o compatible) que soporte sistemas operativos de 32 bits a una velocidad

considerable.

Anl. Mauricio Arévalo M.

- Pág. 86 -

• Un sistema operativo Windows de 32 bits, tal como 9x, Me, NT, 2000, XP, o Windows

Server 2003. Se recomienda fuertemente el uso de un sistema operativo Windows

basado en NT (NT, 2000, XP, 2003) puesto que éstos permiten ejecutar el servidor

MySQL como un servicio.

• Soporte para protocolo TCP/IP.

• Una herramienta capaz de leer ficheros .zip, para descomprimir el fichero de

distribución.

• Suficiente espacio en disco duro para descomprimir, instalar, y crear las bases de datos

de acuerdo a los requisitos de espacio en disco que se considere va a manejar el

servidor MySQL. Generalmente se recomienda un mínimo de 280 megabytes libres.

• Si se planea conectarse al servidor MySQL a través de ODBC (Open Database

Connectivity), se deberá descargar desde el mismo sitio el driver-Connector/ODBC

para MySQL “MyODBC”.

• Si se necesitan tablas con un tamaño superior a 4GB, debe instalarse MySQL en un

sistema de ficheros NTFS.

Al momento de desarrollar la presente monografía, la última versión estable de MySQL

sobre Microsoft Windows para producción es la 5.0, con la que realice las pruebas y

ejercicios; mientras que está en pruebas beta la versión 5.1 y en desarrollo la versión 5.2. El

fichero comprimido descargado tiene la extensión .zip y contiene un fichero de instalación

“setup.exe”, el mismo que instalará MySQL Server mediente un asistente con interfaz gráfica,

facilitando todo el proceso de instalación.

Después de descargar este fichero, se descomprime y se ejecuta el fichero "setup.exe";

el proceso de instalación está mejorado con respecto a versiones anteriores, y bastará con

seguir las indicaciones del asistente de instalación en cada pantalla, escogiendo el tipo de

instalación (típica, completa o personalizada); tendremos que aceptar las condiciones del

contrato y elegir la carpeta de instalación donde se van a copiar los archivos de MySQL;

Anl. Mauricio Arévalo M.

- Pág. 87 -

además, si se desea, se nos permite registrarnos con nuestro correo electrónico en el sitio de

MySQL AB (www.mysql.com) para obtener asistencia e información a cerca de sus últimos

productos.

Figura 4.14: Instalación de MySQL Server

Luego de instalar el servidor MySQL, podemos configurar algunas de sus opciones

mediante el Asistente de Configuración de instancias de MySQL Server, ubicado en la

carpeta o directorio en la que se instaló MySQL Server junto con algunas otras utilidades

clientes vistas en este capítulo.

Para configurar una instancia de MySQL mediante este asistente se siguen los siguientes

pasos:

1. Hacemos clic en siguiente en la pantalla de bienvenida del asistente.

Anl. Mauricio Arévalo M.

- Pág. 88 -

Fig 4.15: Pantalla de Bienvenida

2. Escogemos una configuración detallada o Standard, donde en esta última, el servidor se

configura con las opciones más usuales; sin embargo he escogido la detallada para mostrar

cada configuración en el servidor:

Fig 4.16: Escoger el tipo de configuración

3. Escogemos el tipo de servidor que queremos configurar; entre las opciones existentes está

el Servidor de desarrollo (Developer Machine), que ocupa poca memoria y permite la

ejecución de cualquier otra aplicación; también tenemos la opción de Máquina Servidor

(Server Machine), que permite la ejecución de otras aplicaciones de servidor y tiene un

consumo medio de memoria y finalmente el Servidor Dedicado MySQL (Dedicated MySQL

Server Machina), en el cual la máquina se dedicará exclusivamente a ejecutar el Servidor

MySQL, asignando la mayor cantidad de memoria al mismo.

Anl. Mauricio Arévalo M.

- Pág. 89 -

Fig 4.17: Escoger el tipo de Servidor

4. Escogemos el uso para las bases de datos que administraremos mediante el servidor

MySQL. Aquí tenemos la opción “Multifuncional”, para propósitos generales en la cual

podemos crear tablas de tipo InnoDB por defecto o también tablas de tipo MyISAM;

también tenemos la opción “Transaccional” que nos permite trabajar solamente con tablas

transaccionales de tipo InnoDB como motor principal. Finalmente tenemos la opción “No-

transaccional”, donde solamente se activa el motor de bases de datos no transaccionales

(MyISAM).

Fig 4.18: Escoger el tipo de Uso para las Bases de Datos

5. Escogemos la ruta o ubicación donde se guardarán las configuraciones para el motor de

tablas de tipo “InnoDB”.

Anl. Mauricio Arévalo M.

- Pág. 90 -

Fig 4.19: Ruta para guardar configuración del motor InnoDB

6. Escogemos el número aproximado de las conexiones concurrentes al servidor. Tenemos la

opción “Decision Support (DSS)”, que nos permite tener aproximadamente 20 conexiones

concurrentes, la opción “Online Transaction Processing (OLTP)” la cual nos permite tener

sobre las 500 conexiones al servidor o la opción “Manual”, para configurar manualmente las

conexiones concurrentes al servidor.

Fig 4.20: Escoger el número de conexiones concurrentes

7. A continuación podemos habilitar las conexiones TCP/IP (Transmission Control

Protocol/Internet Protocol) para permitir que el servidor MySQL interactúe a través de una

red TCP especificando el número de puerto (por defecto es el 3306).

Anl. Mauricio Arévalo M.

- Pág. 91 -

Fig 4.21: Habilitar conexiones TCP/IP

8. A continuación se escoge el conjunto de caracteres por defecto en el que se almacenarán

los datos en la base de datos.

Fig 4.22: Escoger el conjunto de caracteres por defecto

9. A continuación se escoge si el servidor MySQL es instalado como un servicio de

Windows.

Fig 4.23: Configuraciones para Windows

Anl. Mauricio Arévalo M.

- Pág. 92 -

10. A continuación se puede cambiar la contraseña del superusuario root para administrar las

bases de datos MySQL.

Fig 4.24: Configuraciones de seguridad

11. Se procede a ejecutar las configuraciones señaladas y se finaliza el asistente de

configuración de instancias del servidor MySQL.

4.6.2. Instalación sobre Linux

La manera recomendada de instalar MySQL en una distribución de Linux es utilizando

paquetes RPM (RedHat Package Manager).

En la mayoría de los casos, sólo será necesario instalar los paquetes MySQL-server y

MySQL-client para conseguir una instalación básica de MySQL en funcionamiento. Si se

deseara ejecutar un servidor MySQL-Max, el cual posee capacidades adicionales, se debería

instalar también el RPM MySQL-Max. No obstante, ello debería hacerse solamente después

de instalar el RPM de MySQL-server.

Muchas distribuciones Linux incluyen MySQL, en el caso de la versión de Fedora Core

5, la versión de MySQL que viene instalada es la 5.0.18. En caso de no tener instalado

MySQL, tenemos los siguientes paquetes RPM en la página de descargas de MySQL11:

11 Las descargas para MySQL están disponibles en http://dev.mysql.com/downloads/

Anl. Mauricio Arévalo M.

- Pág. 93 -

• MySQL-server-VERSION.i386.rpm: Es el servidor MySQL; será necesario a menos

que solamente se desee conectar a un servidor MySQL ejecutado en otro ordenador por

medio de programas clientes.

• MySQL-Max-VERSION.i386.rpm: El servidor MySQL-Max; este servidor tiene

capacidades adicionales que no posee el provisto en el RPM MySQL-server.

Igualmente, debe instalarse primero el RPM MySQL-server, ya que MySQL-Max

depende de él.

• MySQL-client-VERSION.i386.rpm Los programas clientes MySQL estándar. Es

recomendable que se instale siempre este paquete.

• MySQL-shared-VERSION.i386.rpm: Este paquete contiene las bibliotecas

compartidas (libmysqlclient) que ciertos lenguajes y aplicaciones necesitan para enlazar

dinámicamente y usar MySQL.

• MySQL-embedded-VERSION.i386.rpm: Instala la biblioteca del servidor MySQL

incrustado (desde MySQL 4.0).

• MySQL-VERSION.src.rpm: Contiene el código fuente de todos los paquetes

anteriores. Puede usarse para regenerar los RPMs bajo otras arquitecturas.

Para ver todos los ficheros contenidos en un paquete RPM (por ejemplo, un RPM

MySQL-server), se debe ejecutar la siguiente sentencia:

shell> rpm -qpl MySQL-server-VERSION.i386.rpm

Para llevar a cabo una instalación estándar mínima, debe ejecutarse:

shell> rpm -i MySQL-server-VERSION.i386.rpm shell> rpm -i MySQL-client-VERSION.i386.rpm

Anl. Mauricio Arévalo M.

- Pág. 94 -

El servidor RPM ubica los datos bajo el directorio “/var/lib/mysql”. También crea una

cuenta de acceso para el usuario mysql (si no existía anteriormente) a fin de ejecutar el

servidor MySQL, y crea las correspondientes entradas en /etc/init.d/ para iniciar el servidor

automáticamente al arrancar el sistema. Todas las principales distribuciones de Linux de la

actualidad soportan la nueva disposición de directorios que utiliza /etc/init.d, porque es un

requisito para cumplir con el LSB (Linux Standard Base, Base Estándar para Linux).

Si entre los ficheros RPM instalados se encuentra MySQL-server, el servidor mysqld

debería estar ejecutándose luego de la instalación, y se debería estar en condiciones de

comenzar a utilizar MySQL.

Las cuentas que se hallan en las tablas de permisos de MySQL, en principio no están

protegidas con contraseñas. Después de iniciar el servidor se deben establecer contraseñas

para esas cuentas siguiendo con los principios de seguridad para los usuarios que tiene

MySQL.

Anl. Mauricio Arévalo M.

- Pág. 95 -

CAPITULO V

POSTGRESQL

5.1. Historia y Antecedentes

El Sistema Gestor de Bases de Datos Relacionales conocida como PostgreSQL es un

proyecto de software libre distribuido bajo licencia BSD (Berkeley Software Distribution) y

creado con el aporte de varios colaboradores y auspiciantes a nivel mundial bajo los

estándares de ANSI-SQL 92/99. Su sitio web es http://www.postgresql.org y con más de una

década de desarrollo, PostgreSQL se ha convertido en la base de datos de software libre más

avanzada disponible en el momento, ofreciendo las características propias de los más potentes

motores de bases de datos comerciales como Oracle o SQLServer.

PostgreSQL es el último resultado de una larga evolución comenzada con el proyecto de

bases de datos relacionales Ingres en la Universidad de Berkeley. Luego se inició el proyecto

Post-Ingres para resolver los problemas con el modelo de base de datos relacional que se

habían presentado.

El proyecto resultante llamado Postgres completó el soporte de tipos de datos y la base

de datos comprendía también las relaciones entre tablas o clases.

Anl. Mauricio Arévalo M.

- Pág. 96 -

La implementación del DBMS (Sistema Manejador de Bases de Datos) Postgres

comenzó a desarrollarse en 1986 con la coordinación del profesor Michael Stonebraker, y fue

patrocinado por algunas fundaciones estatales y militares de investigación.

Los conceptos iniciales para el sistema fueron presentados con la definición del modelo

de datos inicial junto con la lógica y arquitectura del gestor de almacenamiento; desde

entonces, Postgres ha pasado por varias versiones. El primer sistema de pruebas fue

operacional en el año 1987 y la Versión 1 fue lanzada a unos pocos usuarios en Junio de 1989;

después de revisar el sistema de reglas de la primera versión, éste fue rediseñado y la Versión

2 se lanzó en Junio de 1990. La Versión 3 apareció en 1991 y añadió una implementación

para múltiples gestores de almacenamiento, un ejecutor de consultas mejorado junto con un

mejor sistema de reglas. En su mayor parte, las siguientes versiones hasta el lanzamiento de

Postgres95 se centraron en los temas de portabilidad y fiabilidad.

El mantenimiento del código y las tareas de soporte ocupaban demasiado tiempo que

debía dedicarse a la investigación, así que el proyecto terminó oficialmente con el

lanzamiento de la Versión 4.2.

En 1994, Andrew Yu y Jolly Chen añadieron un intérprete de lenguage SQL (Lenguaje

Estructurado de Consultas) a Postgres y el proyecto se denominó Postgres95, el mismo que

fue lanzado a continuación en la Web para que encontrara su sitio en el mundo de los gestores

de bases de datos como un descendiente de dominio público y código abierto del código

original Postgres de Berkeley. El código de Postgres95 fue optimizado y reducido en tamaño

en un 25% respecto a sus predecesores; muchos cambios internos mejoraron el rendimiento y

la facilidad de mantenimiento. Postgres95 en su versión v1.0 se ejecutaba en un 30 a 50%

más rápido que Postgres v4.2 y además de su corrección de errores, el lenguage de consultas

Postquel fue reemplazado con SQL (implementado en el servidor). También se incluyó un

nuevo programa (psql) para realizar consultas SQL interactivas.

En 1996 nace el proyecto PostgreSQL, siendo una nueva versión de Postgres95,

tratando de reflejar la relación entre el Postgres original y las versiones más recientes con

capacidades de SQL. Los números de versión parten de la 6.0, volviendo a la secuencia

seguida originalmente por el proyecto Postgres de Berkeley.

Anl. Mauricio Arévalo M.

- Pág. 97 -

El énfasis durante el desarrollo de Postgres95 estaba orientado a identificar, entender y

mejorar los problemas existentes en el código del servidor. Con PostgreSQL, además de estas

mejoras se puso énfasis para aumentar las características y capacidades del servidor de bases

de datos utilizando los estándares SQL92/SQL99.

PostgreSQL se distribuye bajo la licencia BSD12. La licencia BSD al contrario que la

GPL permite el uso del código fuente en software no libre.

El autor, bajo este tipo de licencia, mantiene la protección de copyright únicamente para

la renuncia de garantía y para requerir la adecuada atribución de la autoría en los trabajos

derivados, pero permite la libre redistribución y modificación, por lo que pienso que esta

licencia asegura un verdadero “software libre”, en el sentido que el usuario tiene libertad

ilimitada con respecto al software, y que puede decidir incluso si redistribuirlo como software

no libre.

Actualmente la última versión de PostgreSQL disponible para descargar desde su sitio

web (http://www.postgresql.org/download/) es la 8.1, liberada el 8 de noviembre del 2005.

5.2. Características y Funcionalidad de PostgreSQL

PostgreSQL está considerado como la base de datos de código abierto y con orientación

a objetos más avanzada del mundo porque proporciona un gran número de características que

normalmente sólo se encontraban en las bases de datos comerciales tales como DB2, Oracle o

SQLServer. A continuación presento a mi parecer las más importantes características de este

sistema manejador de bases de datos por la cuales es considerado uno de los más potentes

gestores de bases de datos en el mundo del software libre:

• Posee un completo soporte para control de transacciones (mediante los comandos

BEGIN WORK, COMMIT WORK o END WORK, ROLLBACK WORK o ABORT)

12 licencia BSD (Berkeley Software Distribution), pertenece al grupo de licencias de software Libre pero tiene menos restricciones en comparación con otras como la GPL estando muy cercana al dominio público.

Anl. Mauricio Arévalo M.

- Pág. 98 -

asegurando la integridad y consistencia de los datos. Un bloque de transacciones

comienza con una sentencia BEGIN WORK y si la transacción fue válida se cierra con

COMMIT WORK o END WORK. Si la transacción falla, se cierra con ABORT o

ROLLBACK WORK.

• Implementación de los estándares SQL92/SQL99 con sus operadores, funciones,

cláusulas y comandos (DDL y DML), junto con comandos extendidos de PostgreSQL.

• Soporte completo de ACID (Atomicity Consistency Isolation Durability):

o Es posible definir operaciones Atómicas, es decir, formadas por comandos que se

ejecutan todos o ninguno de ellos.

o Consistencia, que garantiza que la base de datos nunca se quede en un estado

intermedio de una transacción (con parte de los comandos ejecutados y otra parte

que no).

o Aislamiento, que mantiene separadas las transacciones de usuarios distintos hasta

que éstas han terminado, es decir controlando la concurrencia de usuarios.

o Durabilidad, garantizando que el servidor de bases de datos guarde en un registro

o log de transacciones las actualizaciones realizadas y pendientes de forma tal que

pueda recuperarse de una terminación brusca como un corte de energía en la

máquina.

• Soporta procedimientos almacenados, que como se comentó en el capítulo anterior, son

rutinas (procesos o funciones) de código ejecutable que se almacenan compiladas en el

servidor. Entre otras cosas, permiten optimizar y acelerar las aplicaciones y evitan

transferencias innecesarias a través de la red. Los procedimientos almacenados se

pueden escribir usando el lenguaje procedural propio de programación de PostgreSQL

denominado PL/pgSQL.

Anl. Mauricio Arévalo M.

- Pág. 99 -

• Posee soporte completo para subconsultas, que son consultas anidadas dentro de otro

comando como SELECT, INSERT, UPDATE, DELETE ó FROM.

• Soporta los Triggers o disparadores, que son procedimientos almacenados que se lanzan

automáticamente bajo determinadas circunstancias como cuando ocurren

actualizaciones, inserciones o eliminaciones de registros en una tabla (mediante

comandos UPDATE, INSERT o DELETE). Permiten establecer reglas de integridad y

consistencia a nivel del servidor de base de datos.

• Posee soporte para vistas, que son un conjunto de registros, resultados de una consulta

que se comportan como una tabla física para facilitar su manejo.

• PostgreSQL tiene soporte para todos los tipos de JOINS o uniones entre tablas,

cumpliendo con los estándares de sintaxis SQL.

• Puede operar sobre distintas plataformas, incluyendo Linux, UNIX, AIX, BSD, HP-UX,

Mac OS X, Solaris y Windows.

• Tiene una buena seguridad gracias a la correcta gestión de usuarios, grupos de usuarios

y contraseñas, así como también los permisos asignados a cada uno de ellos mediante

sentencias SQL como CREATE USER, CREATE GROUP, DROP USER, DROP

GROUP, ALTER USER, ALTER GROUP, GRANT y REVOKE.

Anl. Mauricio Arévalo M.

- Pág. 100 -

• PostgreSQL ofrece soporte completo para la integridad referencial mediante la

definición de claves únicas, primarias y foráneas. Esta característica es utilizada para

garantizar la validez de los datos de la base de datos.

• La flexibilidad del API (Interfaz de Programación para Aplicaciones) de PostgreSQL ha

permitido a los proveedores proporcionar soporte al desarrollo fácilmente para el

servidor PostgreSQL. Entre estas interfaces están Python, Perl, PHP, ODBC,

Java/JDBC, C/C++, etc.

• Posee MVCC (Control de Concurrencia Multi-Versión), que es la tecnología que

PostgreSQL usa para mantener la concurrencia de usuarios y evitar bloqueos

innecesarios de la base de datos. Cuando hay un usuario escribiendo en la base de datos

y otro leyendo sus datos, el MVCC evita que el usuario escritor bloquee al usuario

lector.

• PostgreSQL permite extenderse por parte de los usuarios, por ejemplo se pueden crear

nuevos tipos de datos, funciones, operadores o lenguajes procedurales. Por estas

razones y gracias a su tipo de licencia BSD, PostgreSQL puede usarse, modificarse y

distribuirse libremente para cualquier propósito, pudiendo ser privado, comercial o

académico.

• Para la conectividad del servidor Postgree, se implementa un ODBC (Open Database

Connectivity) llamado psqlODBC, que es un API de interfaz entre clientes y servidores

de bases de datos PostgreeSQL, siendo su última versión la 8.0.2. y se lo puede

descargar gratuita y libremente desde la dirección

“ftp://ftp10.us.postgresql.org/pub/postgresql/odbc/versions/” en versiones para Linux o

Windows. Además también está disponible en la página web de descargas de

PostgreSQL (http://www.postgresql.org/download/) el proveedor de acceso a datos

Anl. Mauricio Arévalo M.

- Pág. 101 -

Npgsql que es utilizado en aplicaciones que usan la plataforma .Net (como el proyecto

Mono) como un “Assembly”13 para acceder y manipular bases de datos PostgreSQL,

como se muestra en el siguiente ejemplo hecho en lenguaje C#:

using System; using System.Data; using Npgsql; public static class UsoNpgsql { public static void Main(String[] args) { NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=mauricio; Password=secret;Database=prueba;"); conn.Open(); NpgsqlCommand command = new NpgsqlCommand("insert into table1 values(1, 1)", conn); Int32 filasafectadas; try { filasafectadas = command.ExecuteNonQuery(); } Console.WriteLine("Fueron añadidas {0} líneas en la tabla1", filasafectadas); try { conn.Close(); } } }

• Tiene soporte completo para distintos conjuntos de caracteres como latin1 (ISO-8859-

1), german, big5, ujis, etc.

• Soporta backups o respaldos en caliente (mientras trabaja el servidor PostgreSQL) y

recuperación completa de las bases de datos.

• Soporta Replicación con servidores PostgreSQL funcionando como maestros y otros

como esclavos. Todas las transacciones se las realiza primero en el servidor maestro

13 Assemblies son empaquetamientos físicos de las bibliotecas de clase, generalmente son archivos “.dll”

Anl. Mauricio Arévalo M.

- Pág. 102 -

para que se puedan actualizar en los esclavos. La replicación es un proceso asíncrono

en PostgreSQL, y se la realiza gracias a un archivo llamado binary Log que contiene la

información de las modificaciones y actualizaciones entre un nodo maestro y uno o

múltiples esclavos; la replicación con servidores PostgreSQL es un proceso

independiente del servidor y la aplicación que PostgreSQL utiliza para la replicación de

sus bases de datos se llama “Slony-I”.

• Incluye herencia entre tablas, por lo que a este gestor de bases de datos se le incluye

entre los gestores objeto-relacionales.

Para explicar la herencia de tablas con un ejemplo, crearé dos clases (tablas). La clase

capitales contiene las capitales de las provincias, las cuales son también ciudades.

Naturalmente, la clase capitales debería heredar de la clase ciudades sus atributos

(campos); esta herencia se la realiza en PostgreSQL mediante la cláusula “INHERITS”

en la sentencia CREATE TABLE como se muestra a continuación:

CREATE TABLE ciudades ( nombre text, poblacion float, altitud int );

CREATE TABLE capitales ( cod_provincia char(2) ) INHERITS (ciudades);

En este caso, una instancia de capitales hereda todos los atributos (nombre, población y

altitud) de su padre, ciudades. En PostgreSQL, una clase puede heredar de ninguna o

varias otras clases y una consulta puede hacer referencia a todas las instancias de una

clase y sus descendientes.

Por ejemplo, para consultar los nombres de todas las ciudades, incluida la capital que se

almacena en la tabla “capitales” (Quito), y que estén situadas a una altitud de 500 metros

o más, la consulta es:

SELECT c.nombre FROM ciudades* c WHERE c.altitud > 500;

Anl. Mauricio Arévalo M.

- Pág. 103 -

+----------+ |nombre | +----------+ |Quito | +----------+ |Cuenca | +----------+ |Riobamba | +----------+

Donde el asterisco “*” después de la tabla “ciudades” indica que la consulta debe

realizarse sobre la clase o tabla ciudades y sobre todas las clases que estén por debajo de

ella en la jerarquía de la herencia. Algunos comandos SQL como select, update, delete

o alter brindan soporte a esta notación.

• Soporta distintos tipos de datos según los estándares SQL92/SQL99; y además del

soporte para los tipos base, también soporta datos de tipo fecha, monetarios, elementos

gráficos, cadenas de bits, etc. También permite la creación de tipos de datos propios.

Entre los novedosos tipos de datos (o atributos) de PostgreSQL, existen los vectores

multidimensionales de longitud fija o variable. Para ilustrar su uso, crearé primero una

tabla con vectores:

CREATE TABLE SAL_EMP (nombre text, pago int4[], tareas text[][] );

La consulta anterior creará una tabla llamada SAL_EMP, la cual representa el salario

trimestral de un empleado y un vector bidimensional del tipo text (tareas), que

representa la tarea semanal del empleado. Ahora realizo algunos INSERTS y cuando se

agregan valores a un vector, se deben encerrar los valores entre llaves y separarlos

mediante comillas ('{“valor1”, “valor2”}'), como se muestra a continuación:

INSERT INTO SAL_EMP VALUES ('Luis', '{10000, 10000, 10000, 10000}', '{{"pintar", "ensamblar"}, {}}');

INSERT INTO SAL_EMP VALUES ('Carolina', '{20000, 25000, 25000, 25000}',

Anl. Mauricio Arévalo M.

- Pág. 104 -

'{{"vender", "cobrar"}, {"vender"}}');

Se puede acceder a cualquier porción de un vector, o subvectores, como se muestra a

continuación:

SELECT SAL_EMP.tareas[1:2][1:1] FROM SAL_EMP WHERE SAL_EMP.nombre = 'Luis'; +-----------------------+ |tareas | +-----------------------+ |{{"ensamblar"},{""}} | +-----------------------+

También existe el tipo de dato “SERIAL”, que es un tipo de dato especial de

PostgreSQL usado para autoincrementar valores; se usa típicamente para crear

identificadores únicos con autoincremento en las tablas. Este tipo de dato es equivalente

a especificar una secuencia (CREATE SEQUENCE) o a especificar la cláusula

“AUTO_INCREMENT” en MySQL. Su implementación es la siguiente:

CREATE TABLE nombre_tabla (nombre_col SERIAL);

Esta sentencia es equivalente a ejecutar las siguientes sentencias en PostgreSQL:

CREATE SEQUENCE nombre_sequencia;

CREATE TABLE nombre_tabla

(nombre_col INT4 DEFAULT nextval('nombre_sequencia');

CREATE UNIQUE INDEX nombre_índice on nombre_tabla (nombre_col);

La secuencia implícita en el tipo “SERIAL” no se borra cuando borramos o eliminamos

la tabla (mediante DROP TABLE) sino que permanece entre los objetos de la base de

datos hasta que se la elimine (mediante el comando DROP SEQUENCE).

• PosgreSQL tiene un catálogo del sistema (diccionario de datos) que contiene

información o metadatos a cerca de todos los objetos contenidos en las bases de datos

PostgreSQL. Este diccionario, se encuentra en las tablas pertenecientes al sistema que

Anl. Mauricio Arévalo M.

- Pág. 105 -

llevan el prefijo “pg_” como pg_database, pg_version, pgclass, pg_user, etc. Estas

tablas nos proporcionan información referente a las bases de datos, usuarios, tablas,

procedimientos, índices, tipos de datos, entre otros. Se encuentran en el directorio

“\Data” dentro del directorio en el que se instala PostgreSQL.

• El sistema de reglas que tiene PostgreSQL consiste en modificar las consultas de

acuerdo a reglas almacenadas como parte de la base de datos. Dichas consultas

modificadas son pasadas hacia el ejecutor de consultas; esto es una diferencia respecto a

otros DBMS que simplemente implementan los sistemas de reglas como procedimientos

y triggers o disparadores almacenados. Este sistema en PostgreSQL puede ser empleado

en el manejo de vistas con reglas para la especificación y actualizaciones de vistas. Una

regla se crea con el comando CREATE RULE.

La implementación del sistema de reglas posee una técnica llamada reescritura de la

consulta, la misma que procesa una consulta u operación de usuario y si existe una regla

que deba ser aplicada a dicha operación, la reescribe de tal forma que la consulta u

operación cumpla también con la regla.

Para una mejor ilustración, mostraré a continuación como implementar vistas utilizando

reglas; así tenemos la siguiente regla llamada “view rule” que actúa cuando se

seleccionan (select) registros de una vista (test_view):

create rule view_rule as on select to test_view do instead

select pro.nombre, par.nombre from proveedor pro, compra com, partes par where pro.cod = com.procod and par.pno = com.pno;

Esta regla se disparará cada vez que se detecte un comando SELECT en la vista

test_view. En lugar de seleccionar las tuplas de test_view, realmente se ejecutará la

instrucción SELECT dada en la parte de la acción de la regla, es decir si tenemos la

siguiente consulta de usuario sobre la vista view_rule:

Anl. Mauricio Arévalo M.

- Pág. 106 -

select nombre from test_view where nombre <> 'Smith';

Entonces para PostgreSQL, la consulta a la vista “test_view” realmente tomará primero

la consulta dada por la parte de acción de la regla “view_rule”, la adapta según el

número y orden de los atributos (campos) dados en la consulta del usuario y añade la

restricción dada en la cláusula WHERE de la consulta del usuario a las restricciones de

la parte de la acción de la regla. Es decir, la consulta anterior (select) original, será

reescrita de la siguiente forma:

select pro.nombre from proveedor pro, compra com, partes par where pro.cod = com.procod and par.pno = com.pno and pro.nombre <> 'Smith';

Pero también se pueden definir reglas que actúan cuando se ejecutan comandos como

INSERT, UPDATE o DELETE sobre una vista. A continuación muestro como ejemplo

el funcionamiento de varias reglas definidas para una vista “test_table_v” y que

funcionan actuando sobre una tabla “test_table” cuando se insertan, modifican o

suprimen registros en la vista:

CREATE TABLE test_table ( field1 char(1) NOT NULL, field2 SERIAL, field3 INTEGER DEFAULT 1, field4 VARCHAR(24) DEFAULT '(def val)', CONSTRAINT testdb_pkey PRIMARY KEY (field2)); CREATE VIEW test_table_v AS SELECT field1, field3, field4 FROM test_table; CREATE RULE test_table_rd AS ON DELETE TO test_table_v DO INSTEAD DELETE FROM test_table WHERE field1 = old.field1; CREATE RULE test_table_ri AS ON INSERT TO test_table_v DO INSTEAD INSERT INTO test_table (field1, field3, field4) VALUES (new.field1, new.field3, new.field4); CREATE RULE test_table_ru AS ON UPDATE TO test_table_v DO INSTEAD UPDATE test_table SET field1 = new.field1, field3=new.field3, field4=new.field4 WHERE field1 = old.field1; INSERT INTO test_table VALUES ('A'); INSERT INTO test_table_v VALUES ('B');

Anl. Mauricio Arévalo M.

- Pág. 107 -

-- Resultado -- =# SELECT * FROM test_table; field1 | field2 | field3 | field4 --------+--------+--------+----------------- A | 1 | 1 | (def val) B | 2 | | (2 rows)

• PostgreSQL soporta algunos lenguajes procedurales14. Estos lenguajes ejecutan o

procesan diversas operaciones directamente en el servidor y una de las principales

ventajas de ejecutar programación en el servidor de base de datos es que las consultas y

el resultado no tienen que ser transportadas entre el cliente y el servidor, ya que los

datos residen en el propio servidor.

Entre los lenguajes procedurales disponibles para PostgreSQL que se distribuyen con el

paquete estándar son los siguientes:

o PL/pgSQL - SQL Procedural Language

o PL/Tcl - Tcl Procedural Language

o PL/Perl - Perl Procedural Language

o PL/Python - Python Procedural Language

Donde el más destacado porque es desarrollado por los propios creadores y

colaboradores de PostgreSQL es PL/pgSQL, el mismo que permite ejecutar comandos

SQL mediante un lenguaje de sentencias imperativas y uso de funciones, dando mucho

más control automático que las sentencias SQL básicas.

Este lenguaje desarrollado en C, se ejecuta desde el propio cliente de PostgreSQL

(pgsql) y las metas del diseño como lenguaje procedural son:

o que pueda ser utilizado para crear funciones y disparadores (triggers)

o que pueda añadir estructuras de control al lenguaje SQL

o que sea capaz de realizar cómputos complejos

o que herede todas las definiciones de usuario como tipos, funciones y operadores.

14 Son lenguajes de programación utilizados en manejadores de Bases de Datos para programar operaciones como procedimientos, funciones, triggers, etc. con sentencias SQL y sentencias de control propias del lenguaje.

Anl. Mauricio Arévalo M.

- Pág. 108 -

o que sea confiable para correr dentro del DBMS

o de fácil empleo

Como un verdadero lenguaje de programación, PL/pgSQL dispone de estructuras de

control repetitivas y condicionales, además de darnos la posibilidad de creación de

funciones que pueden ser llamadas en sentencias SQL normales o ejecutadas en eventos

de tipo disparador (trigger). Las funciones escritas en PL/pgSQL aceptan argumentos o

parámetros y pueden devolver valores de tipo básico o de tipo complejo (por ejemplo,

registros, vectores, conjuntos o incluso tablas).

El lenguaje PL/pgSQL no es sensible a las mayúsculas y minúsculas y es un lenguaje

orientado a bloques. Un bloque se define con la siguiente estructura:

[<<etiqueta>>]

[DECLARE declaraciones] BEGIN Sentencias END;

Puede haber cualquier número de subbloques en la sección de la sentencia de un bloque,

las variables declaradas en la sección de declaraciones (DECLARE) se inicializan a su

valor por defecto cada vez que se inicia el bloque, no cada vez que se realiza la llamada

a la función.

Existen dos tipos de comentarios en PL/pgSQL. Un par de guiones '--' comienza un

comentario que se extiende hasta el fin de la línea mientras que los caracteres '/*'

comienzan un bloque de comentarios que se extiende hasta que se encuentre otra vez el

caracter '*/'.

Un ejemplo de una función escrita con PL/pgSQL que contiene subbloques es la

siguiente:

CREATE FUNCTION estafunc() RETURNS INTEGER AS ' DECLARE

cantidad INTEGER := 30; BEGIN

RAISE NOTICE ''Cantidad contiene aquí %'',cantidad; -- Cantidad contiene aquí 30 cantidad := 50; --

Anl. Mauricio Arévalo M.

- Pág. 109 -

-- Creamos un sub-bloque -- DECLARE

cantidad INTEGER := 80; BEGIN

RAISE NOTICE ''Cantidad contiene aquí %'',cantidad; -- Cantidad contiene aquí 80 END;

RAISE NOTICE ''Cantidad contiene aquí %'',cantidad; -- Cantidad contiene aquí 50 RETURN cantidad;

END;

' LANGUAGE 'plpgsql';

Nótese que al final de la función se define el lenguaje procedural que utilicemos

mediante la cláusula “LANGUAGE”. Todas las variables y constantes (CONSTANT)

usadas en un bloque o en sub-bloques deben declararse en la sección “DECLARE” del

bloque. Las variables en PL/pgSQL pueden ser de cualquier tipo de datos de SQL,

como INTEGER, VARCHAR y CHAR y su valor por omisión es NULL.

El siguiente procedimiento desencadenado asegura con la ayuda de un trigger o

disparador, que cada vez que se inserte o se actualice una fila en una tabla (emp_tabla),

se ejecute una función indicada (emp_funcion):

CREATE TRIGGER emp_trig BEFORE INSERT OR UPDATE ON emp_tabla FOR EACH ROW EXECUTE PROCEDURE emp_funcion();

A continuación muestro un ejemplo de una función (llamada) creada con PL/pgSQL que

actualiza dos tablas (llamadas y contactos) de un sistema de control de llamadas a

clientes, cuando estos no están interesados en la oferta que se les realiza:

CREATE OR REPLACE FUNCTION llamada(integer) RETURNS integer AS ' DECLARE

_millamada ALIAS FOR $1; _micontacto integer; BEGIN

-- buscar el contacto relacionado: SELECT contacto_id INTO _micontacto FROM llamadas WHERE id=_millamada; -- actualizar atendida en llamadas UPDATE llamadas SET atendida = true WHERE id = _millamada; -- actualizar bandera en contactos UPDATE contactos SET no_interesado = true WHERE id = _micontacto;

Anl. Mauricio Arévalo M.

- Pág. 110 -

RETURN _micontacto; END; ' LANGUAGE 'plpgsql';

• Existen herramientas libres y gratuitas con interfaces gráficas e intuitivas y fáciles de

utilizar para la administración completa de bases de datos PostgreSQL como son

PhpPgAdmin o el PgAdmin que son auspiciados por los mismos creadores del sistema

PostgreSQL. También existen algunas herramientas comerciales entre las que destaco

por su funcionalidad a PostgreSQL Manager.

Así también hay una variedad de herramientas para la administración de bases de datos

PostgreSQL en modo consola, fabricadas por los mismos creadores de PostgreSQL

(http://www.postgresql.org) como son por ejemplo el terminal de cliente interactivo de

postgreSQL psql, o las aplicaciones para realizar copias de seguridad y restauración de

base de datos pg_dump y pg_restore, o herramientas cliente para crear y eliminar bases

de datos como cretedb, dropdb entre otras que son incluidas en la descarga completa del

servidor PostgreSQL.

Estas, entre otras son algunas de las características que han hecho posible que

PostgreSQL se convierta en una poderosa y solvente herramienta de gestión de bases de datos

relacionales con ciertas características de orientación a objetos. Para hacerse una idea del

prestigio y la solvencia de este sistema de bases de datos, basta decir que la empresa Afilias

que gestiona los dominios .info y la parte técnica de los .org utiliza la versión estándar de

PostgreSQL para almacenar todos los dominios .info y .org registrados a nivel mundial.

5.3. Estructura del servidor PostgreSQL

Postgres usa un modelo de arquitectura cliente/servidor conocido como “proceso por

usuario”. Hay un proceso maestro que se ramifica para proporcionar conexiones adicionales

para cada cliente que se intente conectar a PostgreSQL.

Anl. Mauricio Arévalo M.

- Pág. 111 -

Una sesión PostgreSQL consiste en los siguientes procesos cooperativos (programas):

• Un proceso demonio supervisor (postmaster)

• La aplicación sobre la que trabaja el usuario (frontend)

• Uno o más servidores de bases de datos en segundo plano (servidor PostgreSQL).

Un único proceso postmaster controla una colección de bases de datos almacenadas en

un host; las aplicaciones de frontend o clientes que quieren acceder a una determinada base de

datos hacen llamadas y envían peticiones de usuario a través de la red al proceso postmaster,

el cual en respuesta inicia un proceso en el servidor y conecta el proceso de frontend al nuevo

servidor. A partir de este punto, el proceso cliente (frontend) y el servidor (backend) se

comunican sin la intervención del postmaster, aunque este proceso siempre se está ejecutando,

esperando peticiones de otros clientes (procesos frontend).

Figura 5.1: Estructura del Servidor PostgreSQL

En esta arquitectura el proceso postmaster y el proceso backend siempre se ejecutan en

la misma máquina (el servidor de base de datos), mientras que la aplicación frontend o cliente

se puede ejecutar desde cualquier equipo.

Existen en producción sistemas funcionando perfectamente con PostgreSQL que

manejan una capacidad de almacenamiento que fácilmente excede los 4 terabytes, algunos

límites en el espacio de disco que maneja PostgreSQL se describen a continuación:

Anl. Mauricio Arévalo M.

- Pág. 112 -

Límite Valor

Máximo tamaño de Base de Datos Ilimitado

Máximo tamaño de tabla 32 TB

Máximo tamaño de registro 1.6 TB

Máximo tamaño de campo 1 GB

Máximos registros por tabla Ilimitado

Máximas columnas por tabla 250 - 1600 dependiendo del tipo de columna

Máximos índices por tabla Ilimitado

Tabla 5.1: Límites de espacio en disco que maneja PostgreSQL

5.3.1. Tipos de Tablas

En Linux, PostgreSQL almacena las bases de datos en el directorio

“/var/lib/pgsql/data/base” y a partir de ahí un directorio para cada base. En Windows

PostgreSQL almacena los archivos de las bases de datos en el directorio “C:\Archivos de

Programa\PostgreSQL\8.1\data\Base”.

Cada tabla es considerada un archivo, así como los índices. Los nombres de las tablas

pertenecientes al sistema llevan el prefijo “pg_”. Por ejemplo, el archivo PG_VERSION

(presente en cada base de datos) contiene la versión mayor con la que fue creada la base y al

cambiar de versión de PostgreSQL es importante respaldar este archivo.

A continuación se muestra el contenido de las tablas que PostgreSQL utiliza como

catálogos para mantener el sistema. Cada base de datos que se crea, tiene estas mismas tablas,

salvo la primera (pg_database) que es única para todas las bases de datos:

Nombre tabla Descripción (que almacena)

pg_database Bases de datos

pg_class Clases o tablas

pg_attribute Atributos o campos de la clase o tabla

pg_index Índices secundarios

Anl. Mauricio Arévalo M.

- Pág. 113 -

Nombre tabla Descripción (que almacena)

pg_proc Procedimientos

pg_type Tipos de datos (del sistema y definidos por el usuario)

pg_user Usuarios de PostgreSQL

pg_operator Operadores (del sistema y definidos por el usuario)

Tabla 5.2: Contenido de las tablas que se usan como catálogos del sistema

Por ejemplo, para saber que bases de datos hay en el sistema se ejecuta la consulta:

SELECT * FROM pg_database;

Para saber que tablas tengo en la base de datos actual:

SELECT * FROM pg_class;

Si sólo queremos saber cuantos registros tiene una tabla, consultamos:

SELECT relname,reltuples FROM pg_class WHERE relname=’mitabla’;

5.3.2. Tipos de Datos

Como todos los manejadores de bases de datos, PostgreSQL implementa los tipos de

datos definidos para los estándares SQL/92 y SQL3 (SQL/99) y aumenta algunos otros.

Algunos de estos tipos de datos se muestran en las tablas que están a continuación:

Tipo en Postgres Correspondiente en SQL3 Descripción

Bool boolean valor lógico o booleano (true/false)

Char(n) character(n) cadena de carácteres de tamaño fijo

Date date fecha (sin hora)

Float8 real, double precision número de punto flotante de doble precisión

int2 smallint entero de dos bytes con signo

int4 int, integer entero de cuatro bytes con signo

Anl. Mauricio Arévalo M.

- Pág. 114 -

Tipo en Postgres Correspondiente en SQL3 Descripción

money decimal(9,2) cantidad monetaria

Time time hora en horas, minutos, segundos y centésimas

timespan interval intervalo de tiempo

timestamp timestamp with time zone fecha y hora con zonificación

varchar(n) character varying(n) cadena de caracteres de tamaño variable

Tabla 5.3: Tipos de datos del Estándar SQL3 en PostgreSQL

Tipos de datos extendidos en PostgreSQL

Tipo Descripción

Box caja rectangular en el plano

Cidr dirección de red o de host en IP versión 4

circle círculo en el plano

Inet dirección de red o de host en IP versión 4

int8 entero de ocho bytes con signo

Line línea infinita en el plano

Lseg segmento de línea en el plano

Path trayectoria geométrica, abierta o cerrada, en el plano

point punto geométrico en el plano

polygon trayectoria geométrica cerrada en el plano

serial identificador numérico único con autoincremento

Tabla 5.4: Tipos de datos Extendidos en PostgreSQL

5.4. Ventajas y Desventajas de PostgreSQL

5.4.1. Ventajas

• PostgreSQL es un sistema de gestión de bases de datos relacionales Open Source (de

código abierto), gratuito y que al tener licencia de tipo BSD, nos permite manejar

Anl. Mauricio Arévalo M.

- Pág. 115 -

libremente el código fuente del gestor de bases de datos PostgreSQL, mejorando u

optimizando su código. Incluso se permite redistribuirlo como producto comercial y

combinarlo con herramientas de licencia propietaria.

• Al sustituir los bloqueos de tabla por el control de concurrencia MVCC (Control de

Concurrencia Multi-Versión), se permite a los accesos de sólo lectura continuar leyendo

datos consistentes durante la actualización de registros, permitiendo también copias de

seguridad en caliente (mediante la aplicación pg_dump) mientras la base de datos

permanece disponible para consultas.

• Se han implementado importantes características al motor de datos, incluyendo

subconsultas, valores por defecto, restricciones a valores en los campos (constraints),

disparadores (triggers), etc.

• Se ha incluido un sistema de reglas consistente en modificar las consultas de acuerdo a

reglas almacenadas como parte de la base de datos.

• Posee manejo y control de transacciones para asegurar la consistencia de los datos.

• Soporta los tipos de datos, cláusulas, funciones y comandos de tipo estándar

SQL92/SQL99 y extendidos propios de PostgreSQL. Los tipos de datos internos han

sido mejorados incluyendo nuevos tipos.

• Para una fácil conectividad al servidor PostgreSQL, se implementa un ODBC (Open

Database Connectivity) llamado psqlODBC, que es un API de interfaz entre clientes y

servidores de bases de datos PostgreeSQL. Además se tiene el proveedor de acceso a

datos Npgsql que es utilizado en aplicaciones que usan la plataforma .Net para acceder y

manipular bases de datos PostgreSQL.

• PostgreSQL puede operar sobre distintas plataformas incluyendo Linux, Unix, MacOS

X, Solaris y últimamente Windows.

• Soporta replicación de bases de datos asíncrona, realizando primero las transacciones en

un “servidor maestro” para que se puedan actualizar en los “servidores esclavos” dando

alta disponibilidad al sistema.

Anl. Mauricio Arévalo M.

- Pág. 116 -

• Se han añadido características adicionales que cumplen el estándar SQL92, incluyendo

claves primarias y foráneas para asegurar reglas de integridad referencial,

identificadores entrecomillados, conversión de tipos de datos, etc.

• Posee un buen sistema de seguridad mediante la gestión de usuarios, grupos de usuarios,

permisos y contraseñas.

• Posee una gran capacidad de almacenamiento.

• Posee ciertas características de orientación a objetos, como la herencia entre tablas.

• Tiene una arquitectura Cliente – Servidor.

• Tiene algunas herramientas o aplicaciones para gestionar o administrar el servidor y sus

bases de datos con interfaces gráficas e intuitivas o en modo de línea de comandos.

• La velocidad del motor de bases de datos ha sido incrementada aproximadamente en un

20 a 40%, y su tiempo de arranque ha bajado al 80% desde que la versión 6.0 fue

lanzada.

• Tiene una buena escalabilidad ya que es capaz de ajustarse al número de CPUs y a la

cantidad de memoria que posee el sistema de forma óptima, soportando una mayor

cantidad de peticiones simultáneas a la base de datos de manera correcta; se dice que

“PostgreSQL ha llegado a soportar el doble de carga de lo que soporta MySQL”15.

5.4.2. Desventajas

• Consume más recursos que MySQL, por lo que se necesitan mayores características de

hardware para ejecutarlo.

• Aproximadamente es 2 veces más lento que MySQL (aunque en la práctica no se nota

esta diferencia).

15 Fragmento tomado de “http://www.netpecos.org/docs/mysql_postgres/index.html”

Anl. Mauricio Arévalo M.

- Pág. 117 -

• PostGreSQL es un magnífico gestor de bases de datos, capaz de competir con muchos

gestores comerciales, aunque el primer encuentro con este gestor es un poco “duro”, ya

que la sintaxis de algunos de sus comandos o sentencias no es nada intuitiva, sin

embargo existe una amplia documentación en su sitio web (http://www.postgresql.org) o

en la ayuda de PostgreSQL (aplicación psql y documentación de PostgreSQL).

5.5. Gestión de Bases de Datos PostgreSQL

Para la administración de un servidor de bases de datos PostgreSQL existen

herramientas libres y gratuitas con interfaces gráficas e intuitivas para la administración

completa de bases de datos PostgreSQL, entre estas herramientas están PhpPgAdmin o el

PgAdmin y herramientas comerciales como PostgreSQL Manager. También hay una

variedad de herramientas para la administración de bases de datos PostgreSQL en modo

consola, como el terminal de cliente interactivo de postgreSQL “psql”, o las aplicaciones

pg_dump y pg_restore para realizar copias de seguridad y restauración de bases de datos, o

las herramientas para crear y eliminar bases de datos como cretedb, dropdb, y otras más

generalmente ubicadas en el directorio “\bin” dentro del directorio donde se instaló

PostgreSQL. A continuación describo sus principales características:

5.5.1. psql

Asumiendo que PostgreSQL ya ha sido instalado e iniciado exitosamente, la

herramienta principal para trabajar en modo línea de comandos con PostgreSQL es “psql”.

Con psql tenemos una herramienta completa para poder manipular las bases de datos

PostgreSQL mediante comandos DML (Lenguaje de Manipulación de datos) y DDL

(Lenguaje de definición de datos). Psql viene incorporado en la instalación del paquete

PostgreSQL para Windows o Linux que se descarga desde el sitio web

“http://www.postgresql.org/download/” y con el mismo tipo de licencia que el paquete

PostgreSQL, es decir BSD (Berkeley Software Distribution). Este programa cuenta con ayuda

Anl. Mauricio Arévalo M.

- Pág. 118 -

en línea, por medio de la instrucción “\?” o “\h” para examinar la sintaxis de los comandos

SQL y se instala en el directorio “\bin” dentro del directorio de instalación de PosgreSQL.

Esta aplicación se la inicia en la línea de comandos del sistema operativo, escribiendo su

nombre (psql) con la siguiente sintaxis:

psql [opciones] [nombre_base_datos]

Como podemos ver, psql acepta opciones en la línea de comandos al momento de

invocar a la aplicación, entre las que están:

OPCION SIGNIFICADO -c Consulta Ejecuta una consulta. -d base_datos Especifica la base de datos. -e Hace “eco” de la consulta enviada al servidor. -E Hace “eco” de todas las consultas enviadas al servidor. -f nombre_arch Usa un archivo como fuente de consultas SQL. -F separador Coloca el separador de campos (por defecto es '|'). -h host Especifica el host del servidor. -l Lista las bases de datos disponibles. -o nombre_arch Guarda los resultados en el archivo especificado. -p puerto Especifica el número de puerto para habilitar la comunicación

entre procesos clientes (frontend) y servidores (backend o postmaster).

-q Ejecuta las consultas sin mostrar mensajes. -t No muestra cabeceras ni contadores de filas. -u Pregunta por un nombre de usuario y una contraseña para la

autentificación en el sistema. Tabla 5.5: Cliente psql

Entre las opciones más útiles a mi parecer, están “-h servidor” (conexión al host

servidor) y “-d base_datos” (especificar la base de datos), en cuyo caso también podemos

indicarle la opción -u para que nos solicite el usuario y la contraseña, como se muestra a

continuación:

psql -h servidor -d base_datos -u Username: fml Password:

Otra opción muy útil es “-l” para listar todas las bases existentes, por ejemplo:

Anl. Mauricio Arévalo M.

- Pág. 119 -

psql -h servidor -l -u Username: fml Password: datname |datdba|encoding|datpath ------------+------+--------+------------ template1 | 100| 0|template1 postgres | 100| 0|postgres plpgsql_test| 0| 0|plpgsql_test dbarc | 500| 0|dbarc zapatos | 500| 0|zapatos pruebas | 500| 0|pruebas fml | 534| 0|fml mancha | 500| 0|mancha antiguedades| 500| 0|antiguedades (17 rows)

La información que se interpreta en psql se organiza en filas para identificar cada

registro y en columnas, para identificar cada campo con sus etiquetas; además cada comando

o sentencia escrita debe terminar con el caracter “;” (punto y coma) como en la consulta que

muestro a continuación:

Figura 5.2: Estructura del Cliente psql

ETIQUETAS

(CAMPOS O

COLUMNAS)

CONSULTA SQL

RESULTADOS (DATOS)

Anl. Mauricio Arévalo M.

- Pág. 120 -

Para salir de psql utilizamos la opción “\q”. Cabe mencionar que psql utiliza una

biblioteca llamada “readline”, por la cual cuenta con edición en la línea de comandos.

5.5.2. pg_dump y pg_dumpall

Las herramientas clientes pg_dump y pg_dumpall nos ayudan tanto para respaldar las

tablas o bases de datos o para migrarlas de un sistema a otro en un formato transportable.

Estas utilidades vienen incluidas en el paquete de instalación PostgreSQL para Windows o

Linux y tienen el mismo tipo de licencia que el paquete PostgreSQL, es decir BSD (Berkeley

Software Distribution). Se instalan en el directorio “\bin” dentro del directorio de instalación

de PosgreSQL.

La utilidad pg_dump apareció en la versión “release 0.02” de Postgres95, pero se

mejoró desde la versión de PostgreSQL “release 7.1”.

En algunos casos al actualizar la versión de PostgreSQL será necesario primero

respaldar las tablas con estas herramientas para posteriormente volverlas a cargar; pg_dump

se emplea para respaldar una base de datos o una tabla en particular, mientras que pg_dumpall

respalda todas las bases de datos del sistema. Su sintaxis es la siguiente:

pg_dump [opciones.] [nombre_base_datos]

A continuación muestro algunas de sus opciones más útiles:

-a: Respalda solo los datos en un archivo de texto plano, no las definiciones (esquema).

-f formato: Selecciona el formato de salida para el archivo; este formato puede ser:

p: Es el formato predeterminado; el archivo se genera en un archivo plano de texto de

tipo “SQL script”.

t: La salida se genera en un archivo “.tar”; este formato puede ser modificado en la

entrada del programa que recupera respaldos pg_restore. Usando este formato de

archivo se permite excluir objetos de la base de datos en el momento en que se restaura.

Anl. Mauricio Arévalo M.

- Pág. 121 -

c: El archivo de salida se genera en un formato modificable para la entrada en el

programa pg_restore. Este es el formato más flexible para reordenar la carga de datos

con las definiciones de los objetos (esquema). Este formato se comprime por defecto.

-s: Solamente respalda el esquema de la base de datos (definiciones de objetos), no los datos.

-t tabla: Respalda los datos y el esquema de la tabla especificada.

La forma más general de emplear pg_dump para respaldar sólo una tabla, es la

siguiente:

pg_dump -t mitabla mibase > mibase.mitabla.dump

Con lo cual en el archivo “mibase.mitabla.dump” tenemos un archivo con los datos y el

esquema de la tabla ‘mitabla’ para poder recuperar toda la información de la misma.

Al respaldar una tabla de esta manera, lo primero que hace pg_dump es tratar de

identificar al usuario creador de la tabla, luego crea la tabla, fija los permisos existentes, copia

los datos y finalmente crea el índice si es que la tabla tiene un índice asociado.

Es mejor comprimir los archivos para ocupar el mínimo espacio posible. Por ejemplo,

podemos hacerlo así:

pg_dump -t mitabla mibase | gzip -9c > mibase.mitabla.dump.gz pg_dump -t mitabla mibase | bzip2 -c > mibase.mitabla.dump.bz

Ambos programas de compresión (gzip y bzip2) pueden ser consultados con el sistema

man (de manual) en Linux. Para recuperar la información en la base de datos, podemos

emplear la siguiente instrucción en la línea de comandos:

gunzip -c mibase.mitabla.dump.gz bunzip2 -c mibase.mitabla.dump.bz

Anl. Mauricio Arévalo M.

- Pág. 122 -

5.5.3. pg_restore

Esta herramienta restaura o recupera una base de datos PostgreSQL desde un archivo

creado con la herramienta pg_dump. Pg_restore apareció por primera vez en la versión 7.1 de

PostgreSQL. Al igual que las anteriores, esta utilidad se instala en el directorio “\bin” dentro

del directorio de instalación de PosgreSQL y tiene el mismo tipo de licencia (BSD) que el

paquete PostgreSQL.

Esta utilidad restaura una base de datos de PostgreSQL desde un archivo especificado,

este archivo guarda los comandos SQL necesarios para reconstruir la base de datos al estado

en el cual fue guardada o respaldada y su sintaxis es:

pg_restore [opciones] [nombre_archivo_a_restaurar]

Algunas opciones que tiene pg_restore son las siguientes:

-a: Recupera solamente los datos, no el esquema o definición de objetos.

-d nombre_db: Se conecta a la base de datos especificada y recupera directamente los datos

en la misma.

-e: Termina la operación si ocurre un error mientras se envían los comandos SQL para

restaurar la base de datos. Por defecto, si se encuentra un error en la operación, continúa la

recuperación y al final se muestra un contador y una descripción de los errores ocurridos.

-f formato: Especifica el formato del archivo, esta opción no es necesaria ya que pg_restore

determina el formato de manera automática. El formato del archivo puede ser uno de los

siguientes:

t: El archivo es un archivo “.tar”. Usando este formato de archivo se permite excluir

objetos de la base de datos en el momento en que se restaura.

c: El formato de archivo se puede modificar en pg_restore. Este es el formato más

flexible para reordenar la carga de datos con las definiciones de los objetos (esquema).

Este formato se comprime por defecto.

Anl. Mauricio Arévalo M.

- Pág. 123 -

-s: Solamente recupera el esquema de la base de datos (definiciones de objetos), no los datos.

-t tabla: Recupera la definición y/o los datos de la tabla especificada.

A continuación muestro un ejemplo respaldando una base de datos llamada mydb con

pg_dump y luego la restauro con pg_restore en una nueva base de datos llamada newdb:

pg_dump -ft mydb > db.tar pg_restore -d newdb db.tar

5.5.4. createdb y dropdb

Una de las primeras operaciones para probar la conexión y correcta instalación del

servidor de bases de datos PostgreSQL es crear una base de datos. Para crear una base de

datos se puede utilizar la aplicación createdb y para eliminarla del servidor se utiliza dropdb.

Estas aplicaciones se instalan en el directorio “\bin” dentro del directorio de instalación de

PosgreSQL y su sintaxis es la siguiente:

createdb nombre_base_datos dropdb nombre_base_datos

Un ejemplo de como crear una base de datos (mydb) mediante la aplicación createdb se

muestra a continuación:

createdb mydb

Createdb es una aplicación alternativa al comando SQL “CREATE DATABASE” y

luego de ejecutarse esta aplicación se muestra la respuesta “CREATE DATABASE”.

Si se recibe un mensaje similar a “createdb: command not found” puede ser porque

PostgreSQL no fue instalado apropiadamente o porque no se encuentra la ruta de la aplicación

en el directorio “\bin” del directorio de instalación de PostgreSQL, entonces se debe probar

escribiendo la ruta completa en donde se encuentra la aplicación y ejecutarla.

Anl. Mauricio Arévalo M.

- Pág. 124 -

En Linux por ejemplo, la aplicación createdb se encuentra en “/usr/bin/createdb”

mientras que en Windows se encuentra en “C:\Archivos de

programa\PostgreSQL\8.1\bin\createdb”.

Otra respuesta de error al ejecutar createdb puede ser la siguiente:

psql: could not connect to server: Connection refused Is the server running on host "nombre_server" and accepting TCP/IP connections on port 5432?

En cuyo caso deberemos revisar los archivos de configuración de PostgreSQL

(pg_hba.conf, pg_ident.conf y postgresql.conf) ubicados en el directorio “/Data” donde se

instaló el servidor PostgreSQL o debemos reinstalar el servidor PostgreSQL porque no se

puede establecer una conexión al servidor.

Para eliminar una base de datos físicamente del servidor se utiliza la aplicación dropdb,

la misma que es una aplicación alternativa al comando SQL “DROP DATABASE”.

Al eliminar una base de datos se eliminan también todos los objetos que contiene la base

de datos, además se debe tener cuidado porque no se puede recuperar una base de datos una

vez que esta se elimine.

5.5.5. Postmaster y pg_ctl

Luego de instalar PostgreSQL y antes de acceder a cualquier base de datos se debe

arrancar el servidor PostgreSQL. Esta operación se la puede realizar mediante el programa

llamado postmaster, indicándole al mismo donde se encuentra el directorio “\Data” de

PostgreSQL mediante la opción -D. Este programa se encuentra en el directorio “bin” donde

se instaló PostgreSQL (/usr/bin/postmaster) y la manera más común de arrancar el servidor

mediante la aplicación postmaster es:

postmaster -D /var/lib/pgsql/data

Anl. Mauricio Arévalo M.

- Pág. 125 -

Pg_ctl es una aplicación incluida también en el directorio “bin” donde se instala

PostgreSQL, y se proporciona para simplificar algunas tareas como iniciar y detener al

servidor PostgreSQL. Por ejemplo:

pg_ctl start -l logfile

Esta operación arranca el servidor y coloca las transacciones en el archivo especificado

(logfile). La opción de -D le indica al servidor PostgreSQL donde se encuentra el directorio

“\Data” que es donde normalmente se guardan las bases de datos.

5.5.6. PgAdmin

PgAdmin es una aplicación con interfaz gráfica comprensible para el diseño y

administración total de bases de datos PostgreSQL; esta aplicación está diseñada para

ejecutarse en sistemas operativos como GNU/Linux y Windows 2000, XP o 2003. PgAdmin

versión 3 se ejecuta desde la versión de la base de datos PostgreSQL 7.3 y superiores. Para

versiones anteriores de la base de datos, se debe usar la versión de PgAdmin2.

Figura 5.3: Ventana de PgAdmin

Anl. Mauricio Arévalo M.

- Pág. 126 -

PgAdmin se distribuye libremente bajo licencia de tipo GNU separadamente de

PostgreSQL y se puede descargar su última versión (PgAdmin3-1.4.3) desde el sitio web

“http://www.pgadmin.org/download/” en las versiones para Linux o Windows.

En la versión del servidor PostgreSQL 8.1.4 para Windows, que fue la que descargue en

el momento que realicé la presente monografía, se instala junto con el servidor de bases de

datos la herramienta PgAdmin III en su versión 1.4.2 lanzada en marzo del 2006.

La versión de PgAdmin III contiene las siguientes características:

• Esquema de navegación de todos los objetos de PostgreSQL.

• Diálogos de creación y propiedades de objetos (usuarios, tablas, bases de datos,

disparadores, etc.).

• Herramienta de edición/visualización de tablas.

• Habilidad para navegar y conectarse a múltiples servidores a la vez.

• Interfaz de usuario intuitiva y traducida a más de 20 idiomas.

• La ventana principal muestra la estructura de la base de datos y todos los detalles de los

objetos contenidos en la misma.

• Se puede controlar o administrar los usuarios de las bases de datos, manejando los

privilegios, usuarios, grupos y contraseñas.

• Permite llevar un control sobre el estado del servidor de bases de datos, permitiendo

iniciarlo o detenerlo.

• Posee una herramienta avanzada para consultas, permitiendo ejecutar cualquier

sentencia SQL.

• Permite exportar datos en distintos formatos a partir de una consulta SQL generada.

• Permite ver y editar los datos de una consulta a una tabla o vista.

• Tiene una herramienta de Mantenimiento que ejecuta tareas como reconstruir las

estadísticas de las bases de datos y tablas, limpiar o eliminar los datos sin usar y

reorganizar los índices.

• Permite sacar copias o respaldos de las bases de datos y restaurarlas haciendo uso de las

herramientas pg_dump y pg_restore de PostgreSQL.

• La ventana del “estado del servidor” muestra los usuarios actualmente conectados, los

bloqueos y características del servidor seleccionado.

Anl. Mauricio Arévalo M.

- Pág. 127 -

5.5.7. PhpPgAdmin

PhpPgAdmin es una herramienta con una interfaz Web bastante potente que nos permite

administrar los servidores de bases de datos PostgreSQL, esta aplicación está escrita en PHP

con la intención de manejar la administración de PostgreSQL a través de páginas Web,

utilizando Internet y fue basado en otro producto visto anteriormente llamado phpMyAdmin,

que provee las mismas funcionalidades a los usuarios del servidor de base de datos MySQL.

PhpPgAdmin es un cliente web que ofrece una manera conveniente de crear objetos

como bases de datos, tablas, usuarios, funciones, vistas, disparadores, etc., alterarlos o

consultar sus datos usando el estándar SQL.

Esta aplicación se la puede descargar desde el sitio web

“http://phppgadmin.sourceforge.net/?page=download” y su última versión estable es la 4.0.1

publicada en noviembre del 2005. Es una herramienta de código abierto (Open Source) con

licencia de tipo GPL siendo creada y distribuida por la empresa SourceForge.

Entre sus principales características tenemos:

• PhpPgAdmin puede administrar múltiples servidores PostgreSQL.

• Soporta las versiones de PostgreSQL 7.0.x, 7.1.x, 7.2.x, 7.3.x, 7.4.x, 8.0.x y 8.1.x

• Permite la fácil administración de usuarios y grupos, bases de datos, tablas, índices,

triggers o disparadores, reglas, privilegios, vistas, secuencias, funciones, etc.

• Permite una fácil manipulación de los datos, con un buscador de tablas, vistas y

reportes.

• Permite la ejecución de la mayoría de comandos SQL de manipulación (DML) y

definición de datos (DDL).

• Puede exportar e importar los datos en una variedad de formatos: SQL, XML, XHTML

o CSV.

• Tiene una fácil instalación y configuración.

Para que funcione, debemos tener configurado PHP (Lenguaje Preprocesador de

Hipertexto) e instalado el servidor PostgreSQL. Procederemos luego a descomprimir el

Anl. Mauricio Arévalo M.

- Pág. 128 -

fichero descargado en nuestro servidor Web (puede ser puede ser Apache, Personal Web

Server, Internet Information Server) y ya podremos entrar en la consola de PhppgAdmin.

PhpPgAdmin funciona con versiones de PHP 4.1 o superiores, pero se recomienda 4.3 porque

ofrece más funcionalidad

Luego seleccionamos el lenguaje y la base de datos con la que se va a trabajar; existen

algunas opciones administrativas en PhppgAdmin como administrar las bases de datos, los

privilegios, exportar e importar información de un modo sencillo y remoto, entre otras;

realizando de manera fácil, rápida e intuitiva la mayoría de tareas de gestión de las bases de

datos PostgreSQL desde cualquier lugar vía Internet.

Una prueba de esta aplicación se la puede encontrar accediendo a la página

http://phppgadmin.kattare.com/phppgadmin4/, la misma que usa Phppgadmin para probar la

administración remota de bases de datos PostgreSQL, se escoge la base de datos para

administrarla y se digita el usuario ‘phppgadmin’ y la contraseña ‘webdb’.

Figura 5.4: Ventana de PhpPgAdmin

Anl. Mauricio Arévalo M.

- Pág. 129 -

5.5.8. EMS SQL Manager para PostgreSQL

SQL Manager es una herramienta de alto desempeño para administrar un servidor de

bases de datos PostgreSQL, trabaja con cualquier versión de la base de datos a partir de la 8.0

y soporta todas las características de PostgreSQL. SQL Manager dispone de una interfaz

gráfica de usuario que nos permite administrar las bases de datos de una manera eficiente,

segura y rápida. Entre sus principales características técnicas están las siguientes:

• Soporte completo desde la versión 8.1 de PostgreSQL.

• Interfaz gráfica de usuario (GUI).

• Manejo y administración rápida de la base de datos.

• Manejo de todos los objetos PostgreSQL.

• Posee herramientas avanzadas para la manipulación de datos.

• Posee un efectivo administrador de seguridad.

• Tiene excelentes herramientas visuales y de texto para generar consultas.

• Capacidad de exportar e importar datos.

• Posee una poderosa herramienta visual para diseñar las bases de datos.

• Fácil uso de tareas de mantenimiento de bases de datos mediante asistentes.

Esta herramienta es comercial pero se puede descargar la versión de prueba desde su

sitio web “http://www.sqlmanager.net/”. SQL Manager para PostgreSQL es una herramienta

con licencia propietaria y los derechos de autor le pertenecen a la empresa EMS, que se

dedica a brindar soluciones para poder trabajar de mejor manera con distintos manejadores de

bases de datos, que en este caso son herramientas diseñadas para trabajar con PostgreSQL.

En la misma página Web de SQL Manager se pueden descargar las siguientes

herramientas con interfaz gráfica, que son muy útiles para una administración completa de la

base de datos:

• Data Export para PostgreSQL: herramienta para exportar datos.

• Data Import para PostgreSQL: herramienta para importar datos.

• Data Pump para PostgreSQL : herramienta para generar respaldos o copias.

• DB Comparer for PostgreSQL: herramienta para comparar bases de datos y

encontrar diferencias en su estructura.

Anl. Mauricio Arévalo M.

- Pág. 130 -

• DB Extract for PostgreSQL: Es una utilidad para generar respaldos de bases de

datos en archivos “scripts” SQL.

• SQL Query for PostgreSQL: herramienta para generar consultas complejas.

La versión Enterprise, que viene con EMS SQL Manager y todos los productos de la

lista anterior cuesta 475 dólares mientras la versión Estándar, que viene con SQL Manager

pero con menos aplicaciones adicionales, tiene un costo de 420 dólares. Si solamente se

desea la aplicación EMS SQL Manager tiene un costo de 275 dólares.

Figura 5.5: Ventana de EMS SQL Manager

Esta herramienta solamente está disponible en su versión SQL Manager 2005 para

Microsoft Windows.

Anl. Mauricio Arévalo M.

- Pág. 131 -

5.6. Instalación de PostgreSQL

Existen versiones de PostgreSQL para instalarse sobre plataformas diferentes como

Linux, Solaris o Windows

Actualmente la última versión de PostgreSQL disponible para descargar desde su sitio

web (http://www.postgresql.org/download/) es la 8.1, liberada el 8 de noviembre del 2005 en

versiones para Linux o Windows.

Después de haber decidido la versión de PostgreSQL a instalar, se debe elegir entre una

distribución binaria o una de código fuente (source). Existen distribuciones binarias de la

versión 8.1 de PostgreSQL disponibles para descargar en ficheros RPM para Linux y ficheros

comprimidos Zip para Windows.

Figura 5.6: Página Web de descargas de PostgreSQL

La instalación de PostgreSQL para Windows y Linux la he realizado sobre una máquina

con un procesador Intel Movile de 1.7GHz, 1Gb de memoria RAM y 40Gb de espacio en

Disco Duro, aunque los requerimientos de hardware para instalar PostgreSQL 8.1 son una

máquina con un mínimo de 32 Mb de memoria RAM, un procesador Intel Celeron (o

Anl. Mauricio Arévalo M.

- Pág. 132 -

superior) que soporte sistemas operativos de 32 bits a una velocidad considerable y un disco

duro, que su tamaño esté calculado según el espacio que ocupen las bases de datos que tenga

el sistema, pero para la instalación de PostgreSQL se necesitan aproximadamente unos 60Mb

de espacio libre.

Para la instalación de PostgreSQL en los dos sistemas operativos (Windows y Linux),

instalé previamente los sistemas operativos Microsoft Windows XP Service Pack 2 como

sistema operativo de la máquina y la distribución de Linux Fedora Core 5, utilizando la

aplicación VMware WorkStation versión 5.0.0 para que Linux Fedora funcione en una

“máquina virtual” y pueda interactuar mediante una red virtual entre las dos máquinas (Linux

y Windows) administrando desde Windows una base de datos PostgreSQL instalada en

Linux.

En la versión de PostgreSQL 8.1 para Windows viene incluida la aplicación PgAdmin

junto con el servidor de bases de datos PostgreSQL para una administración gráfica, sencilla y

completa de las bases de datos PostgreSQL, incluyéndose también en la instalación los

controladores para acceso a datos psqlODBC y Npgsql; mientras que en el sistema operativo

Linux Fedora Core 5 viene incluida solamente una instalación del servidor PostgreSQL 8.1,

que hay que seleccionarla en el momento de la instalación de Fedora Core 5 y si se requieren

otras aplicaciones de administración con interfaz gráfica como PgAdmin o PhpPgAdmin, hay

que descargarlas desde sus sitios web e instalarlas por separado. Luego de realizar la

instalación de PostgreSQL en Windows y Linux, presento la configuración del servidor para

que pueda ser administrado desde Windows.

5.6.1. Instalación sobre Windows

Para instalar el servidor PostgreSQL sobre Windows se necesita un sistema operativo

Windows de 32 bits, tal como 9x, Me, NT, 2000, XP, o Windows Server 2003. Aunque se

recomienda el uso de un sistema operativo Windows basado en NT (NT, 2000, XP, 2003).

Además es necesaria una herramienta capaz de leer ficheros .zip, para descomprimir el fichero

de distribución.

Anl. Mauricio Arévalo M.

- Pág. 133 -

Al momento de desarrollar la presente monografía, la última versión estable de

PostgreSQL para Microsoft Windows es la 8.1, con la que realice las pruebas; el fichero

comprimido descargado desde el sitio web (http://www.postgresql.org/download/) se llama

postgresql-8.1.4-1.zip, luego se lo descomprime mediante la aplicación “WinZip” o una

herramienta compatible y entre los cuatro archivos que contiene, se ejecuta el fichero de

instalación “postgresql-8.1.msi”, el mismo que instalará el servidor de bases de datos

PostgreSQL, la herramienta de administración gráfica PgAdmin, el controlador de ODBC

(Open Database Connectivity) llamado psqlODBC y el proveedor de acceso a datos para .Net

llamado NpgSQL mediante un asistente con interfaz gráfica, facilitando de esta manera el

proceso de instalación.

Figura 5.7: Ficheros de la descarga de PostgreSQL para Windows

Los pasos que se siguen con el asistente para la instalación de PostgreSQL son:

• Primero seleccionamos el idioma de la instalación:

Figura 5.8: Idioma de la instalación

Anl. Mauricio Arévalo M.

- Pág. 134 -

• Luego aceptamos los términos que tiene la licencia de software libre de tipo BSD

(Berkeley Software Distribution) bajo la que se distribuye PostgreSQL:

Figura 5.9: Notas sobre la licencia de PostgreSQL

• A continuación elegimos las aplicaciones que vamos a instalar (el servidor PostgreSQL,

las interfaces psql y PgAdmin y los controladores psqlODBC y Npgsql):

Figura 5.10: Aplicaciones de PostgreSQL

Anl. Mauricio Arévalo M.

- Pág. 135 -

• Elegimos instalar el servidor de bases de datos como un servicio y establecemos un

usuario (account name) y una contraseña (password) para el administrador de servicios;

si el usuario no existe, se creará:

Figura 5.11: Servicio y usuario de PostgreSQL

• Si la contraseña es muy fácil de piratear, nos sugiere una aleatoria. No hay problema si

escogemos la que digitamos o la aleatoria sugerida. Luego definimos los parámetros de

configuración (principalmente el super-usuario y la contraseña):

Figura 5.12: Parámetros de configuración PostgreSQL

Anl. Mauricio Arévalo M.

- Pág. 136 -

• Elegimos el lenguaje usado como lenguaje procedural o de Script (PL/pgsql) para

programar los procedimientos almacenados en PostgreSQL:

Figura 5.13: Elegir el lenguaje

• Seleccionamos los módulos opcionales de contribuciones, en este caso dejé los módulos

que vienen seleccionados por defecto en PostgreSQL:

Figura 5.14: Módulos Adicionales

• El asistente estará listo para instalar el servidor PostgreSQL con las configuraciones

indicadas, y al finalizar la instalación debemos verificar los programas instalados en el

menú “Inicio-Programas-PostgreSQL 8.1”, para finalmente reiniciar el equipo.

Anl. Mauricio Arévalo M.

- Pág. 137 -

Figura 5.15: Finalización de la Instalación

5.6.2. Instalación sobre Linux

Para instalar PostgreSQL sobre el sistema operativo Linux utilicé la distribución del

sistema Linux Fedora Core 5 y lo instalé como una máquina virtual con la aplicación VMware

Workstation 5.0.0 ejecutándose sobre Windows para realizar pruebas con bases de datos

PostgreSQL instaladas sobre la máquina con el sistema Linux Fedora Core 5; de esta manera

puedo administrar las bases de datos PostgreSQL que se encuentran en el equipo con Linux,

mediante la herramienta PgAdmin desde Windows a través de una red virtual creada por la

aplicación VmWare Workstation.

El Proyecto Fedora (Distribución Linux bajo licencia GPL) es un sistema operativo de

software libre, resultado de una fusión entre Red Hat Linux y el antiguo Proyecto Fedora

Extras, produciéndose el denominado sistema Fedora Core y está patrocinado oficialmente

por la empresa Red Hat, aunque es de libre distribución.

Anl. Mauricio Arévalo M.

- Pág. 138 -

Escogí esta distribución de Linux por su facilidad de instalación y configuración, siendo

su última versión estable la Core 5, publicada el 20 de marzo del 2006, y se lo puede

descargar desde sitios web como “www.fedoraproject.org” o “www.fedora.redhat.com”.

En Linux Fedora Core 5 viene ya integrado el servidor PostgreSQL versión 8.1 por lo

que solamente es necesario que se lo escoja como un paquete más en el momento de la

instalación del sistema operativo, como se muestra en la siguiente figura:

Figura 5.16: Instalación del Servidor PostgreSQL cuando se instala Fedora Core 5

Figura 5.17: Añadir el usuario y contraseña para el usuario “postgres”

Anl. Mauricio Arévalo M.

- Pág. 139 -

Luego de instalar el paquete de Postgresql junto con el sistema operativo, ingresé al

sistema como superusuario ‘root’, añadí el usuario “postgres” al sistema mediante las

cláusulas “adduser” y “passwd” para establecer su contraseña en la línea de comandos.

Este usuario es habilitado en el sistema operativo y como superusuario del servidor

PostgreSQL cuando se escoge instalar el paquete PostgreSQL en la instalación de Fedora.

A continuación para probar en el mismo equipo que el servidor PostgreSQL esté

funcionando correctamente, cerré la sesión e ingresé nuevamente al sistema con el usuario

creado (postgres) que es el superusuario de PostgreSQL.

Ingresé al Terminal de línea de comandos y creé una base de datos mediante la

aplicación “createdb” que se incluye con PostgreSQL; luego se pueden crear, modificar o

eliminar objetos de esa base de datos mediante sentencias SQL usando la aplicación “psql”,

que como se explicó anteriormente es el Terminal interactivo de PostgreSQL para su

administración.

Figura 5.18: Crear una base de datos y una tabla para probar el servidor PostgreSQL

Sin embargo, para distribuciones de Linux que no tengan instalado el paquete de

PostgreSQL, existen descargas binarias del servidor PostgreSQL y sus paquetes adicionales

Anl. Mauricio Arévalo M.

- Pág. 140 -

para algunas distribuciones de Linux en paquetes RPM (RedHat Package Manager) en el sitio

web http://www.postgresql.org/download/. Escogemos el paquete o paquetes de instalación

que pertenezcan a nuestra distribución de Linux, con la versión más reciente y los

descargamos.

Existen varios paquetes RPMs en cada distribución de PostgreSQL para Linux, pero si

queremos instalar el servidor PostgreSQL, instalaremos los paquetes “postgre-libs”,

“postgresql” y “postgresql-server”, identificados con la versión de PostgreSQL que

queramos instalar. Estos paquetes contienen respectivamente las librerías compartidas de

PostgreSQL, los programas clientes para administrar las bases de datos y el servidor

PostgreSQL. Para instalar solamente un cliente de PostgreSQL, se instalarán los paquetes

“postgre-libs” y “postgresql”.

Antes de instalar en el sistema dichos paquetes, creamos al usuario “postgres”, que será

el encargado de manejar la base de datos con las sentencias:

useradd postgres passwd postgres

Instalamos los paquetes del servidor PostgreSQL para llevar a cabo la instalación básica

del paquete que contiene al servidor PostgreSQL. Para instalarlos se debe ejecutar el

comando rpm con las opciones y el orden indicados desde la línea de comandos como se

muestra a continuación:

(rpm -ivh paquete_nombre_version.rpm)

rpm -ivh postgresql-server-8.1.4-3PGDG.i686.rpm

rpm -ivh postgresql-libs-8.1.4-3PGDG.i686.rpm

rpm -ivh postgresql-8.1.4-3PGDG.i686.rpm

Cabe señalar que el comando de instalación rpm16

tiene las opciones –ivh para instalar

los paquetes, -Uvh para actualizar los paquetes y para desinstalar un paquete RPM se utiliza la

opción –e, pero antes se debe detener el servicio de PostgreSQL.

16 Más opciones sobre el instalador rpm las podemos encontrar digitando el comando rpm – -help.

Anl. Mauricio Arévalo M.

- Pág. 141 -

También se debe saber que en la mayoría de distribuciones de Linux, los archivos de

PostgreSQL se guardan en las ubicaciones mostradas en la siguiente tabla17:

Tabla 5.6: Ubicaciones de los archivos de PostgreSQL en Linux

Luego de la instalación de los paquetes RPMs inicializaremos el directorio en el que se

guardarán los datos mediante las herramientas initdb o mediante el demonio postmaster,

indicando con la opción –D donde se encuentra el directorio “/Data” de PostgreSQL, como se

indica a continuación:

/usr/bin/initdb -D /var/lib/pgsql/data /usr/bin/postmaster -D /var/lib/pgsql/data

Iniciaremos a continuación el servicio de PostgreSQL mediante el comando:

service postgresql start

Luego se puede probar el funcionamiento del servidor PostgreSQL creando,

modificando o eliminando bases de datos y sus objetos usando la aplicación “psql” o

instalando aplicaciones con interfaz gráfica de usuario como PgAdmin o PhpPgAdmin.

17 Tabla tomada de la documentación del manual de instalación de PostgreSQL en Fedora (http://pgfoundry.org/docman/?group_id=1000048)

Anl. Mauricio Arévalo M.

- Pág. 142 -

5.7. Configuración de PostgreSQL

Luego de la instalación del servidor de bases de datos PostgreSQL existen tres archivos

para configurar el servidor que son postgresql.conf, pg_hba.conf y pg_ident.conf. Estos

archivos establecen la manera en que se comporta e interactúa el servidor PostgreSQL y se

encuentran ubicados en el directorio “C:\Archivos de programa\PostgreSQL\8.1\data” en

Windows y en el directorio “/var/lib/pgsql/data” en Linux.

Figura 5.19: Directorios en Linux y Windows de los archivos de configuración

Todos estos tres archivos de configuración tienen una estructura que contiene las

configuraciones que lee el servidor cuando arranca el proceso “postmaster” por lo que es

necesario reiniciar el servicio Postgresql en el servidor si se modifica alguna línea de

configuración mediante el administrador de servicios en Windows o Linux.

listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost', '*' = all port = 5432 max_connections = 100 #authentication_timeout = 60 # 1-600, in seconds #ssl = off

Comentarios Líneas Habilitadas

Líneas Deshabilitadas (en comentario)

Anl. Mauricio Arévalo M.

- Pág. 143 -

Los comentarios en estos archivos son precedidos por el caracter ‘#’, y también están en

comentarios de manera predeterminada algunas líneas que forman parte de la configuración

de PostgreSQL. Si quitamos el caracter ‘#’ dichas líneas quedarán habilitadas. A

continuación muestro como se presenta la estructura de estos archivos:

Luego de configurar estos archivos, es necesario reiniciar el servicio de “postgresql” en

Linux y en Windows para que los cambios tomen efecto y poder así realizar una conexión

administrando el servidor PostgreSQL en modo de consola de texto con la aplicación psql o

en modo gráfico con las aplicaciones PgAdmin o PhpPgAdmin. Además se puede acceder y

modificar los datos mediante aplicaciones clientes escritas en diversos lenguajes de

programación que utilicen el controlador ODBC psqlODBC o el proveedor de acceso a datos

Npgsql.

En la máquina con el sistema operativo Linux Fedora Core 5, ingresé al sistema con el

usuario ‘root’ para alterar estos archivos y luego reiniciar el servicio postresql, mientras que

en la máquina con Windows no los modifiqué puesto que solamente usé el servidor de bases

de datos PostgreSQL en Linux administrándolo con la herramienta PgAdmin desde Windows.

5.7.1. Archivo postgresql.conf

Este archivo configura aspectos generales del servidor PostgreSQL como la ubicación

de los archivos de configuración y del directorio “\Data”, las direcciones IP de los host y el

puerto por el cual las escucha (5432 es el predeterminado), el número máximo de conexiones,

el manejo de memoria, la seguridad y autentificación, etc.

Como se puede ver en la figura 5.20 solamente se chequea que el servidor escuche

cualquier dirección IP mediante la línea listen_addresses=‘*’. Se puede establecer también

en esta línea el parámetro ‘localhost’ si queremos solamente conexiones en el equipo local y

no de otros equipos o podemos escribir las direcciones IP de los equipos con los cuales

queremos que se comunique el servidor PostgreSQL separadas por una coma (,).

Anl. Mauricio Arévalo M.

- Pág. 144 -

Figura 5.20: Configuración en Linux del archivo postgresql.conf

También verifiqué el número de puerto por el cual escucha las peticiones el servidor

PostgreSQL (port = 5432)18 y el número máximo de conexiones concurrentes que en este

caso manejará el servidor (max_connections=100).

5.7.2. Archivo pg_hba.conf

HBA significa “Host-Based Authentication” o Autentificación basada en Host, y

mediante este archivo, PostgreSQL controla los host o equipos que tienen permiso de

conectarse al servidor, la manera o modo en que se autentifican19 los clientes, los nombres de

usuarios de las bases de datos PostgreSQL que pueden conectarse y las bases de datos que

pueden ser accedidas. Este archivo contiene registros que tienen uno de los siguientes

formatos:

18 El puerto 5432 debe estar habilitado en el Firewall de Windows, en el del antivirus y en el de Linux; o se debe deshabilitar el Firewall del sistema operativo y de cualquier antivirus. Además este puerto se lo debe habilitar en las propiedades del protocolo TCP/IP (Filtrado TCP/IP) o se debe permitir el acceso a todos los puertos TCP. 19 La autentificación es el proceso por el que el servidor de bases de datos establece la identidad del cliente mediante un usuario y una contraseña, y por ende determina si a la aplicación del cliente (o el usuario que ejecuta la aplicación del cliente) se le permite conectarse al servidor PostgreSQL.

Anl. Mauricio Arévalo M.

- Pág. 145 -

# local DATABASE USER METHOD [OPTION] # host DATABASE USER CIDR-ADDRESS METHOD [OPTION] # hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTION] # hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTION]

En donde el primer campo indica el tipo de conexión: “local” es una conexión al equipo

local, “host” es una conexión con o sin encriptación SSL mediante el socket TCP/IP;

“hostssl” es una conexión encriptada SSL mediante el socket TCP/IP mientras que

“hostnossl” es una conexión TCP/IP que no está encriptada.

El campo DATABASE indica la base de datos, que puede ser “all” para especificar

todas, podemos también especificar la base o bases de datos que pueden ser accedidas

separándolas con una coma (,). También se puede poner “sameuser” para especificar que se

de acceso a todas las bases de datos a las que el usuario identificado tenga acceso.

En el campo USER se especifica el usuario, pudiendo ser “all”, para especificar que

todos los usuarios de las bases de datos tienen acceso al servidor, o podemos poner el nombre

de un usuario o de varios usuarios separados por una coma. También se puede poner el

nombre de un grupo de usuarios precedido por el signo (+).

El campo CIDR-ADDRESS especifica las direcciones de los equipos o el conjunto de

equipos (red) que se comunicarán con el servidor. Este campo se estructura por la dirección

IP del equipo y la máscara de red a la que pertenece, que se representa con un entero (entre 0

y 32 para IPv4 o 128 para IPv6) y especifica el número de bits significativos en la máscara de

red. A continuación muestro algunos ejemplos:

127.0.0.1/32: Es la dirección del “localhost” que se la puede representar también en columnas separadas como 127.0.0.1 255.255.255.255 que completan los cuatro octetos especificados (8*4=32 bits).

192.168.32.0/24: Es una dirección de Red utilizando IPv4 (con 24 bits

significativos). 192.168.0.1/32: Es una dirección de Host utilizando IPv4 (con 32 bits

significativos). ::1/128: Es la dirección de “localhost” utilizando IPv6. ::ffff:192.168.0.0/120: Es una dirección de red utilizando IPv6.

Anl. Mauricio Arévalo M.

- Pág. 146 -

El campo METHOD puede ser "trust", "reject", "md5", "crypt", "password", "krb5",

"ident", o "pam". Este campo especifica el modo de autentificación del usuario

Si se pone “trust” en dicho campo, se permite la conexión incondicionalmente, con este

método se permite a cualquiera que se conecte al servidor PostgreSQL identificarse con un

usuario de PostgreSQL, sin la necesidad de una contraseña.

Si se utiliza el método “reject” se deshecha la conexión incondicionalmente, se usa para

excluir ciertos host o redes que intenten conectarse al servidor PostgreSQL.

Cuando se utiliza el método “md5” se le exige al usuario que proporcione una

contraseña encriptada MD520 para la autentificación. Esta opción en versiones anteriores a la

7.2 de PostgreSQL se la conoce como “crypt”.

Con la opción “password” se requiere que el usuario proporcione una contraseña sin

encriptación para su autentificación.

Mediante la opción “krb5” se utiliza el protocolo Kerberos21 versión 5 para autentificar

el usuario. Este método se puede utilizar sólo para conexiones con TCP/IP.

Mediante el método “ident” se especifica el nombre del usuario del sistema operativo en

la máquina cliente, y se verifica si dicho usuario se identifica con el nombre del usuario de la

base de datos a la que se quiere acceder mediante una consulta al archivo pg_ident.conf.

Sin embargo, en el archivo pg_hba.conf en la máquina que tengo instalado Linux

Fedora Core 5, solamente ingresé el tipo “host” y di un acceso a todas las bases de datos y a

todos los usuarios cuyos equipos pertenezcan a la dirección de red 192.168.32.0, que es en la

que están configurados el equipo servidor de PostgreSQL con Linux Fedora (con la dirección

IP 192.168.32.100) y el equipo de Windows (con la dirección IP192.168.32.1 asignada

dinámicamente mediante la aplicación Vmware Workstation).

20 MD5 (acrónimo de Message-Digest Algorithm, o Algoritmo de Resumen de Mensaje) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado para realizar autentificación de usuarios. 21 Kerberos es un protocolo de autentificación (cliente/servidor) estándar, seguro y conveniente utilizado sobre una red pública (por ejemplo Internet).

Anl. Mauricio Arévalo M.

- Pág. 147 -

Además seleccioné el método “md5” para la autentificación de los usuarios que quieran

acceder a las bases de datos del servidor PostgreSQL desde cualquier equipo que pertenezca a

esa red, como se muestra en la siguiente figura:

Figura 5.21: Configuración en Linux del archivo pg_hba.conf

5.7.3. Archivo pg_ident.conf

Este archivo configura la autentificación de los usuarios si es que en el archivo

pg_hba.conf se tiene un registro cuyo método de autentificación sea de tipo “ident”.

En el archivo pg_ident.conf se verifica si el usuario o usuarios que se identifican en el

archivo pg_hba.conf con el método “ident” tienen una correspondencia entre el nombre de

usuario del sistema operativo y el nombre del usuario de la base de datos a la que se quiere

acceder.

Los registros en este archivo están estructurados de la siguiente manera:

# MAPNAME IDENT-USERNAME PG-USERNAME

Donde en el campo MAPNAME se coloca el “nombre” de la identidad con la que en el

archivo pg_hba.conf se identifica al usuario, en el campo IDENT-USERNAME se coloca el

Anl. Mauricio Arévalo M.

- Pág. 148 -

nombre del usuario que se tiene en el sistema operativo y en el campo PG-USERNAME se

pone el nombre del usuario de PostgreSQL correspondiente.

Por ejemplo, si en el archivo pg_hba.conf se tiene la línea:

# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.0.0/16 ident omicron

Se indica que cualquier usuario con identidad “omicron” perteneciente a la red con

dirección IP 192.168.0.0 y que en el archivo pg_ident tenga un registro identificado en el

campo MAPNAME con “omicron” pueda acceder a las bases de datos correspondientes. En

el archivo pg_ident se tendría la siguiente línea:

# MAPNAME IDENT-USERNAME PG-USERNAME omicron usuarioso mauricio

En esta línea se especifica que en la entrada “omicron” se debe validar un usuario cuyo

nombre en el sistema operativo es “usuarioso” pero que su correspondencia como usuario de

PostgreSQL es “mauricio”.

5.7.4. Finalización de la Configuración

Al finalizar la configuración de estos archivos, se deben guardar los cambios y reiniciar

el servicio “postgresql” desde el administrador de servicios de Linux Fedora Core 5 como se

muestra en la figura 5.22 o también se lo puede reiniciar desde la línea de comandos

(Terminal) en Fedora mediante la sentencia service postgresql restart.

Anl. Mauricio Arévalo M.

- Pág. 149 -

Figura 5.22: Reinicio del servicio postgresql en Linux Fedora Core 5.

En Windows para reiniciar el servicio se pueden ejecutar las aplicaciones “Stop service”

y “Start service” que se instalan junto con el servidor PostgreSQL o se lo puede reiniciar

mediante el administrador de servicios como se muestra a continuación:

Figura 5.23: Reinicio del servicio postgresql en Windows.

Anl. Mauricio Arévalo M.

- Pág. 150 -

Finalmente pude probar la conexión a las bases de datos PostgreSQL instalado en la

máquina con Linux Fedora Core 5 desde la máquina que tiene el sistema operativo Windows

XP mediante la aplicación PgAdmin (Inicio-Programas-PostgreSQL 8.1-PgAdmin III),

digitando la dirección IP del servidor (en Linux) o su nombre, el puerto, la base de datos por

defecto (Maintenance DB), el usuario y la contraseña. Luego se podrán crear y administrar

bases de datos del servidor PostgreSQL y todos los objetos que contienen las mismas.

Figura 5.24: Conexión al servidor PostgreSQL desde Windows.

Anl. Mauricio Arévalo M.

- Pág. 151 -

CAPITULO VI

OTROS SISTEMAS GESTORES DE BASES DE DATOS

En este capítulo presento brevemente algunos Sistemas Gestores de Bases de Datos

Relacionales (RDBMS) con licencia libre y propietaria, junto con tablas comparativas en

donde se describen sus principales características, a fin de poder tener parámetros de

comparación con las bases de datos que son objeto de este estudio como MySQL y

PostgreSQL.

6.1. Oracle

Este sistema surgió a final de los años 70 y principio de los años 80. George Koch fue

su impulsador junto con un grupo de 25 desarrolladores; al principio se conoció a este sistema

como “Relational Software” para luego tomar el nombre de Oracle, que es desarrollado y

distribuido comercialmente bajo licencia propietaria por la empresa Oracle Corporation. Su

sitio web es “www.oracle.com” y es uno de los mayores y más usados Sistemas Manejadores

de Bases de Datos Relacionales (RDBMS) en el mundo.

Oracle es un Manejador de bases de datos relacionales que hace uso de los recursos del

sistema informático en la mayoría de arquitecturas de hardware, para garantizar su

aprovechamiento al máximo en ambientes cargados de información; Oracle corre en

computadoras personasles (PC), microcomputadoras, mainframes, soporta unos 17 idiomas y

Anl. Mauricio Arévalo M.

- Pág. 152 -

dispone de versiones para la mayoría de sistemas operativos, entre los más importantes están

Microsoft Windows, Linux, Unix, MacOS.

Ofrece además del Gestor de bases de datos, una suite de productos con una gran

variedad de herramientas propias de desarrollo, como SQL plus, Oracle Forms, Oracle

Reports, Oracle Designer, Oracle Discovered, Oracle JDeveloper, entre otras.

Podemos programar funciones y triggers (disparadores) en el lenguaje procedural de

Oracle PL/SQL, que es un dialecto del SQL combinado con programación procedural.

Soporta bases de datos de todos los tamaños y un verdadero ambiente cliente servidor, además

dispone de los tipos de datos definidos en los estándares ANSI/ISO SQL92, soporta también

el manejo de transacciones, subconsultas, replicación de bases de datos, integridad referencial,

respaldos y restauración, etc.

La versión 10g de Oracle vio la luz en febrero del 2004, primero en su versión para

UNIX y posteriormente en sus versiones para Linux y Windows. La novedad más llamativa

de esta versión es la capacidad de estos servidores de funcionar según la tecnología “Grid

Computing” (para distribuir la base de datos entre varios servidores).

El precio de las licencias de Oracle 10g son algo caras, el precio se eleva a los $4995

por procesador y $149 por usuario para la edición “Standard Edition One”, y $40000 por

procesador y $800 por usuario para la versión “Enterprise Edition”.

Además para aprovechar toda la potencia que ofrece Oracle se necesita de un potente

equipo y no lo recomiendo para entornos monousuarios, sino para entornos empresariales.

Se comenta que “Oracle ha anunciado que ofrecerá de manera gratuita una versión de su

motor de base de datos. Se denominará Oracle 10g Express Edition, la cual tendrá como

restricciones la limitación a instalaciones en máquinas monoprocesador gestionando hasta

1Gb. de memoria y 4Gb. de disco para el almacenamiento”22. Esta acción acompaña a la

realizada anteriormente por Oracle al adquirir InnoDB (recordemos que el soporte para este

tipo de motor de Bases de datos está también incluido dentro de MySQL).

22 Nota tomada de http://techdir.com/articles/20051028/209223_F.shtml

Anl. Mauricio Arévalo M.

- Pág. 153 -

6.2. Microsoft SQL Server

Es un sistema de gestión de bases de datos relacionales (SGBD) creado y distribuido por

la empresa Microsoft bajo licencia propietaria, se basa en el lenguaje SQL, y es capaz de

poner a disposición de muchos usuarios grandes cantidades de datos de manera simultánea

(multiusuario). Su sitio web es www.microsoft.com/latam/sql/.

SQL Server permite trabajar en modo cliente-servidor o monousuario. Además permite

administrar la información de otros servidores de datos SQL Server.

Soporta el manejo de transacciones, subconsultas, posee una gran estabilidad, seguridad

y escalabilidad, soporta procedimientos almacenados, replicación de bases de datos, respaldos

y restauración e incluye también un potente entorno gráfico de administración que permite el

uso de comandos DDL y DML con administración gráfica llamado “Enterprise Manager”

además de un “Analizador de consultas”, para escribir cualquier comando SQL mediante un

editor de texto.

El cluster tolerante a fallos de SQL Server proporciona redundancia de hardware

mediante una configuración en la que los recursos de misión crítica se transfieren

automáticamente de la máquina que ha generado el error a un servidor configurado de igual

modo.

Para el desarrollo de aplicaciones distribuidas (tres o más capas), Microsoft SQL Server

incluye interfaces de acceso para la mayoría de las plataformas de desarrollo, incluyendo

.NET.

Microsoft SQL Server no es multiplataforma, ya que sólo está disponible en Sistemas

Operativos de Microsoft (Windows) y está orientado solamente para sus entornos de

desarrollo.

La última versión de SQL Server es la 2005 (conocida como Yukon) y cuesta

aproximadamente $3899 en la versión Workgroup, $5999 para la versión “Standard Edition”

y $24999 en la versión “Enterprise Edition”.

Anl. Mauricio Arévalo M.

- Pág. 154 -

Existe también la version “Express Edition” de SQL Server 2005, siendo una versión

libre, gratuita, de fácil uso y ligera. SQL Server Express Edition incluye características como

SQL Server 2005 Reporting Services, una plataforma servidor para crear informes

tradicionales o interactivos y una herramienta de administración gráfica, SQL Server 2005

Management Studio Express, para la fácil administración de las bases de datos en un entorno

gráfico, gestiona hasta 1Gb de memoria RAM y 4Gb de espacio de disco duro.

6.3. SQL Lite

SQLite es una librería escrita en C que implementa un motor de base de datos SQL

empotrable23, su última versión es la 3.3.7 y está disponible para sistemas operativos como

Windows, Linux, Unix, BSD y MacOS bajo libre distribución y licencia de dominio público

GPL. El sitio web oficial de SQLite es “www.sqlite.org/index.html”.

Sus desarrolladores destacan entre sus principales características la encapsulación

completa en un único archivo por cada base de datos, su soporte transaccional, su rapidez, su

escaso tamaño y su completa portabilidad en distintas plataformas. Soporta las características

(tipos de datos, funciones, etc) del estándar SQL/92 y su máximo tamaño para

almacenamiento es aproximadamente de 2 Terabytes.

El motor de PHP 5 incluye soporte interno para SQLite y existen APIs para dar el

soporte para distintos lenguajes, como C y Python e incluso un proyecto de un conector

ODBC para SQLite24.

SQLite cuenta con una utilidad llamada sqlite que nos permitirá ejecutar comandos SQL

(DML y DDL) en modo de texto para administrar una base de datos SQLite y sus objetos.

Además es muy sencillo utilizar este programa con un script SQL, ya que basta ejecutar sqlite

junto con el nombre de la base de datos a la que queramos acceder y el archivo SQL que

contiene las sentencias SQL que queramos ejecutar.

23 Bases de datos empotradas o embebidas son aquellas que no inician un servicio en una máquina, sino que están en forma de librerías pudiéndose enlazar directamente a nuestro código fuente. 24 El controlador ODBC para SQLite se descarga desde el sitio “http://www.ch-werner.de/sqliteodbc”

Anl. Mauricio Arévalo M.

- Pág. 155 -

SQLite ejecuta las operaciones más rápido que MySQL o Postgresql, pero no olvidemos

que estos últimos se tratan de motores de bases de datos para propósitos distintos (Servidores

de Bases de datos). SQLite no permite múltiples usuarios accediendo en modo escritura a la

base de datos, ya que el mecanismo de bloqueo que utiliza es muy primitivo: bloquea toda la

base de datos, además no soporta replicación de bases de datos, manejo de transacciones,

integridad referencial ni características avanzadas (cluster). Así, esta librería está

especialmente recomendada cuando queramos una gran rapidez en las consultas y nos baste

que sólo un único usuario pueda realizar modificaciones. Por ejemplo es ideal como base de

datos para guardar configuraciones, logs, o sencillamente como base de datos monousuario.

6.4. HSQLDB

Es otro motor de bases de datos relacionales empotrable desarrollado en Java, es un

proyecto de software libre bajo licencia de tipo BSD (Berkeley Software Distribution);

soporta los estándares SQL/92 y SQL/99, es rápida y se la puede descargar desde su sitio web

www.hsqldb.org, siendo su última versión estable es la 1.8.0.7 (liberada en septiembre del

2006).

No soporta características avanzadas como replicación, acceso multiusuario, pero

soporta operaciones con comandos SQL de manipulación y definición de datos (DDL y

DML), permite el manejo de transacciones, integridad referencial y soporta varias plataformas

como Linux, Unix, Windows, MacOS.

El grupo de desarrollo se formó en el año 2001 y HSQLDB es utilizado como el motor

de bases de datos del proyecto OpenOffice.org 2.0 (software libre de ofimática).

6.5. Firebird

Firebird es un sistema de administración de base de datos (o RDBMS) de código abierto

bajo Licencia Pública basado en la versión 6 de Interbase, cuyo código fue liberado por la

Anl. Mauricio Arévalo M.

- Pág. 156 -

empresa Borland en el año 2000. Su código fue reescrito de C a C++ por la Fundación

FirebirdSQL, siendo su última versión la 1.5.3. Su sitio web es www.firebirdsql.org.

Es multiplataforma, y actualmente puede ejecutarse en los sistemas operativos: Linux,

HP-UX, FreeBSD, Mac OS, Solaris y Microsoft Windows. Es liviano, con requerimientos de

hardware bajos.

Posee una arquitectura Cliente/Servidor sobre el protocolo TCP/IP, pero también

permite la arquitectura embebida o incrustrada para aplicaciones monousuario, ofrece un

soporte de transacciones, subconsultas e integridad referencial, tiene una buena seguridad

basada en usuarios y roles. Tiene pleno soporte del estándar SQL-92, tanto de sintaxis como

de tipos de datos y permite la escritura de disparadores (triggers) y procedimientos

almacenados.

Existen controladores ODBC, OLEDB y JDBC para Firebird y se permite además un

mantenimiento con la realización de copias de seguridad y restauraciones periódicas de las

bases de datos. Una restricción que tiene es que no puede ejecutarse en máquinas con varios

procesadores.

6.6. Informix

Informix es un Sistema de Gestión de Bases de datos Relacionales (RDBMS) conocido

actualmente como una categoría de programas de IBM, y es distribuido comercialmente bajo

licencia propietaria por dicha empresa dentro de la familia de "Administración de

Información" (Information Management). En el año 2001 IBM compró a la empresa Informix

Inc. por aproximadamente 1.000 millones de dólares con lo que el mercado de las bases de

datos comerciales en UNIX quedó entre IBM y Oracle. Su página principal es

www.ibm.com/software/data/informix/.

Este gestor de base de datos, ahora llamado "Informix Dynamic Server" (IDS) incluye

un RDBMS basado en SQL y juegos de herramientas para la administración o gestión de las

bases de datos.

Anl. Mauricio Arévalo M.

- Pág. 157 -

Puede ser usado en plataformas como Windows 2000, 2003 Server, XP, Linux, UNIX,

AIX, HP-UX, IRIX, Solaris y TRU64. Su última versión es la 10.0.

Gestiona múltiples bases de datos remotas en una única y centralizada consola donde se

muestran gráficamente tanto las bases de datos, como los objetos que contienen (tablas,

índices, procedimientos, etc.). Ofrece herramientas para crear menús, formularios de entrada

de datos y generadores de reportes.

Tiene una arquitectura cliente/servidor, la capacidad de replicación de bases de datos,

dispone de los tipos de datos y sintaxis definidos en los estándares ANSI/ISO SQL92, ocupa

menos memoria y recursos que Oracle aunque mantiene sus características que lo consolidan

como un gran gestor de bases de datos como son la gestión del acceso de múltiples usuarios,

soporte para el manejo de transacciones, subconsultas, manejo de integridad referencial (con

claves principales y foráneas), soporte para procedimientos almacenados, disparadores,

respaldos, restauración, etc.

Informix además se especializa en el soporte para Datawarehouse (almacenes de datos)

y Datamining (minería de datos).

6.7. Comparaciones

A continuación presento comparaciones hechas en tablas25 en donde se dan a conocer

los creadores, la fecha de la primera versión, la última versión estable, el tipo de licencia de

software y algunas características importantes que tienen los sistemas de gestión de bases de

datos que se han visto en este capítulo incluyendo MySQL y PostgreSQL. Entre estas

características están los sistemas operativos soportados por cada gestor de bases de datos, el

soporte para algunas características técnicas (ACID, Integridad referencial, transacciones,

Unicote) y el soporte para objetos (disparadores, funciones, procedimientos, rutinas externas):

25 Tablas comparativas tomadas de “es.wikipedia.org/wiki/Comparación_de_sistemas”

Anl. Mauricio Arévalo M.

- Pág. 158 -

Sistema de Gestión de Bases de Datos Creador

Fecha de la primera versión pública

Última versión estable

Licencia de software

Informix Informix Software 1985 10.0 Propietario

Oracle Oracle Corporation 1977 10g Propietario

Microsoft SQL Server Microsoft 1989 2005 o Yukon

Propietario

Firebird Firebird Foundation 25 de julio de

2000 1.5.3

Licencia Pública

InterBase

MySQL MySQL AB Noviembre

de 1996 5.0

GPL o propietario

PostgreSQL PostgreSQL Global Development Group

Junio de 1989

8.1.4 Licencia

BSD

HSQLDB Hsqldb.Org 2001 1.8.0 Licencia

BSD

SQLite D. Richard Hipp 17 de agosto

de 2000 3.3.7

GPL Dominio público

Tabla 6.1: Comparaciones entre SGBDs.

Sistema de Gestión de Bases de Datos Windows Mac OS X Linux Unix Informix Sí Sí Sí Sí

Oracle Sí Sí Sí Sí

Microsoft SQL Server Sí No No No

Firebird Sí Sí Sí Sí

MySQL Sí Sí Sí Sí

PostgreSQL Sí Sí Sí Sí

HSQLDB Sí Sí Sí Sí

SQLite Sí Sí Sí Sí

Tabla 6.2: Soporte de los SGBDs para Sistemas Operativos.

Sistema de Gestión de Bases de Datos ACID Integridad referencial

Transacciones Unicode

Informix Sí Sí Sí Sí

Oracle Sí Sí Sí Sí

Microsoft SQL Server Sí Sí Sí Sí

Firebird Sí Sí Sí Sí

MySQL Depende: solo con InnoDB

Depende: solo con InnoDB

Depende: solo con InnoDB

PostgreSQL Sí Sí Sí Sí

HSQLDB Sí Sí Sí ?

SQLite Sí No Básico: No Trans.

Anidadas Sí

Tabla 6.3: Características Técnicas

Anl. Mauricio Arévalo M.

- Pág. 159 -

Sistema de Gestión de Bases de Datos Trigger Función Procedimiento Rutina externa Informix Sí Sí Sí Sí

Oracle Sí Sí Sí Sí

Microsoft SQL Server Sí Sí Sí Sí

Firebird Sí Sí Sí Sí

MySQL Sí desde 5.0 Sí desde 5.0 Sí desde 5.0 Sí desde 5.0

PostgreSQL Sí Sí Sí Sí

HSQLDB Sí Sí Sí Sí

SQLite Sí No No Sí

Tabla 6.4: Objetos soportados por algunos SGBDs

Además de estas comparaciones, cabe señalar que existe un trabajo derivado de

PostgreSQL llamado BizGres (http://www.bizgres.org/). El Proyecto Bizgres busca hacer de

PostgreSQL la Base de Datos Open Source más robusta para Business Intelligence26 y Data

Warehousing. Para este propósito dispone de herramientas como JasperReports SDK,

Bizgres Loader, KTLSDK, entre otras.

Microsoft SQL Server por ejemplo también ofrece soluciones parecidas incluidas con el

manejador de bases de datos como son “Analysis Services” para analizar grandes cantidades

de datos y “Reporting Services” para generar informes que extraigan el contenido de una gran

variedad de orígenes de datos.

Ahora también, Pentaho y MySQL presentan una solución para proporcionar soluciones

OLAP (Online Analytical Processing) totalmente en entorno Open Source, con la base de

Pentaho Mondrian y de MySQL 5.

Esta solución informática27 va dirigida a todos aquellos que esten interesados en

aplicaciones “Business Intelligence” como Reporting, análisis, OLAP y Data Warehousing;

todo esto bajo Open Source.

26 Business Intelligence o “Inteligencia de Negocios” es una técnica que brinda soluciones de inteligencia de negocios y permiten al nivel gerencial minimizar el tiempo requerido para recolectar toda la información relevante de negocios, automatizar la asimilación de la información en inteligencia personalizada y proporcionar las herramientas para hacer comparaciones y tomar decisiones inteligentes. 27 Más información sobre dicha solución en “http://www.mysql.com/news-and-events/web-seminars/mysql-olap-pentaho-mondrian.php”

Anl. Mauricio Arévalo M.

- Pág. 160 -

CONCLUSIONES

En el momento de la evaluación de un proyecto no debemos cerrar nuestro criterio y

creer que la utilización de todo un conjunto de herramientas con licenciamiento propietario o

con licenciamiento libre es la que debe utilizarse en el desarrollo de dicho proyecto, sino que

para desarrollar un proyecto informático es necesario hacer una valoración de riesgos donde

se evalúa la posibilidad de utilizar un producto o herramienta propietaria por la que hay que

pagar una licencia o utilizar un producto de software libre, analizando en cada caso las

ventajas, inconvenientes y el desempeño de dicha herramienta siempre y cuando cumpla con

los requerimientos o necesidades de la aplicación o proyecto a desarrollar, donde muchas

veces se necesita de una arquitectura mixta o híbrida, es decir, utilizar una mezcla de

productos de software licenciado y otros de software libre.

Para ello se seleccionan los productos claves de software propietario y de open software

que más se adaptan a las necesidades de la organización y al proyecto informático.

Con la salida al mercado de múltiples entornos de desarrollo, es necesario conocer las

características, ventajas y desventajas de cada herramienta que se ofrece, por lo que en este

trabajo puse en conocimiento principalmente las características y ventajas de dos de los más

importantes sistemas gestores de bases de datos de software libre (MySQL y PostgreSQL).

MySQL es desarrollada y mantenida por la empresa MySQL AB mientras que el grupo

“PostgreSQL Global Development Group” es el que desarrolla y mantiene PostgreSQL.

Estos dos sistemas de gestión de bases de datos relacionales (RDBMS) se caracterizan

por su distribución como software libre y su intención de igualar las características técnicas de

otros potentes sistemas bajo licencia propietaria como Oracle, Informix o Microsoft SQL

Server.

Entre las principales características que llevan a estos dos gestores de bases de datos a

ser muy utilizados dentro de lo que es el software libre están que ambos utilizan el lenguaje

Anl. Mauricio Arévalo M.

- Pág. 161 -

SQL (Lenguaje estructurado de Consultas) con comandos DML y DDL, cláusulas, tipos de

datos, operadores, funciones y la sintaxis que cumplen con los estándares ANSI e ISO de

SQL/92 y PostgreSQL también utiliza el estándar SQL/99 (con orientación a objetos).

Además utilizan algunos comandos propios (extendidos) de cada manejador, soportan

una arquitectura cliente/servidor, soportan el manejo de transacciones, subconsultas, joins,

disparadores, manejo de acceso concurrente a la base de datos (no la bloquean), brindan

mantenimiento mediante el respaldo y restauración de las bases de datos, soportan

procedimientos y funciones almacenadas, soportan la integridad referencial en los datos,

gestionan de manera segura el acceso de los usuarios a la base de datos, ambos mantienen un

diccionario de datos y tienen características avanzadas como la replicación de bases de datos

o la tecnología de Clúster en MySQL. En PostgreSQL los procedimientos almacenados se

pueden escribir usando el lenguaje procedural propio denominado PL/pgSQL.

MySQL y PostgreSQL se acoplan fácilmente a diversas plataformas de desarrollo de

software gracias a que disponen de algunas herramientas como conectores ODBC y

proveedores de acceso a datos con tecnología ADO.Net y además varias APIs que se acoplan

a lenguajes como PHP, Perl, Python, Java, etc. Además se proveen muy buenas herramientas

de software libre o propietario para la gestión de bases de datos en modo de consola de

comandos de texto o mediante herramientas con una Interfaz Gráfica de Usuario (GUI)

trabajando bajo Linux o en Windows. Estas herramientas permiten administrar uno o varios

servidores de bases de datos en un entorno distribuido, actuando sobre distintas plataformas.

MySQL debe su popularidad a su gran desempeño y a las facilidades de desarrollo de

aplicaciones Web bajo la arquitectura que ha sido llamada: LAMP

(Linux+Apache+MySQL+Perl o PHP o Python).

Existe un trabajo derivado de PostgreSQL llamado BizGres que busca hacer de

PostgreSQL la Base de Datos Open Source más robusta para Business Intelligence. También,

Pentaho y MySQL, presentan una solución para proporcionar soluciones OLAP (Online

Analytical Processing) totalmente en entorno Open Source.

Anl. Mauricio Arévalo M.

- Pág. 162 -

RECOMENDACIONES

En mi opinión, debido a las potentes características que tienen ambos gestores de bases

de datos de software libre vistos, se pueden utilizar como una real alternativa a gestores de

bases de datos de software propietario como Oracle o SQL Server, aunque si se va a

desarrollar aplicaciones en ambientes Web recomiendo MySQL por su rapidez y

funcionalidad, mientras que si se piensa desarrollar aplicaciones con un entorno empresarial,

recomiendo PostgreSQL por su seguridad y potencia.

Finalmente, puedo decir que este trabajo me servirá de mucho en mi formación

profesional gracias a las investigaciones realizadas sobre los gestores de bases de datos que se

han detallado en la presente monografía, ya que aprendí sus características técnicas, sus

ventajas y debilidades, sus herramientas de administración y realicé una comparación con

otros sistemas gestores de bases de datos obteniendo de esta manera criterios acertados de

evaluación en el momento de decidir por el sistema de gestión de bases de datos a utilizar en

determinadas aplicaciones informáticas; por tales razones recomiendo que en la Unidad

Académica se sigan impulsando estos temas investigativos, ya que los estudiantes siempre

ganamos nuevos y útiles conocimientos.

Anl. Mauricio Arévalo M.

- Pág. 163 -

ANEXOS

ANEXO A: MODOS DE MySQL

Los “modos” que soporta MySQL Server son los siguientes:

• ALLOW_INVALID_DATES: No hace un chequeo total de las fechas en modo

estricto. Chequea sólo que los meses se encuentran en el rango de 1 a 12 y que los días

estén en el rango de 1 a 31. Este modo se aplica a columnas DATE y DATETIME.

• ANSI_QUOTES: Con ANSI_QUOTES activado, puede usar comillas dobles (“…”)

para delimitar una cadena de caracteres, ya que se interpreta como un identificador o

comilla(‘…’).

• NO_FIELD_OPTIONS: No muestra opciones específicas para columnas de MySQL

en la salida de SHOW CREATE TABLE.

• NO_KEY_OPTIONS: No muestra opciones específicas para índices de MySQL en la

salida de SHOW CREATE TABLE.

• NO_TABLE_OPTIONS: No muestra opciones específicas para tablas (tales como

ENGINE) en la salida de SHOW CREATE TABLE.

• ERROR_FOR_DIVISION_BY_ZERO: Produce un error en modo estricto (de otra

forma una advertencia) cuando encuentra una división por cero (o la división en módulo

MOD(X,0)) durante un INSERT o UPDATE, o en cualquier expresión como en

Anl. Mauricio Arévalo M.

- Pág. 164 -

WHERE que implique datos de tablas y una divisón para cero. Si este modo no se da,

MySQL retorna NULL para una división para cero.

• NO_AUTO_VALUE_ON_ZERO: Este modo afecta el tratamiento de las columnas

AUTO_INCREMENT. Normalmente, se genera el siguiente número de secuencia para

la columna insertando NULL o 0 en ella, pero este modo suprime este comportamiento

para 0 de forma que solamente NULL genere el siguiente número de secuencia.

• NO_ZERO_DATE: No permite '0000-00-00' como fecha válida. Se puede insertar

las fechas 0 con la opción IGNORE en el comando INSERT. Cuando MySQL no está

en modo estricto, la fecha se acepta pero se genera una advertencia.

• ONLY_FULL_GROUP_BY: No permite consultas que en la parte del GROUP BY

se refieran a una columna que no se seleccione.

• PIPES_AS_CONCAT: Trata a “||” como un concatenador de columnas de caracteres

(lo mismo que CONCAT()) en lugar de un sinónimo de OR.

• REAL_AS_FLOAT: Trata al tipo de dato REAL como un sinónimo de FLOAT en

lugar de sinónimo de DOUBLE.

• STRICT_ALL_TABLES: Activa el modo estricto para todos los motores de

almacenamiento. Rechaza los datos inválidos.

• STRICT_TRANS_TABLES: Habilita el modo estricto para motores de

almacenamiento transaccionales, y para los no transaccionales, devuelve el “mejor valor

posible” en caso de existir errores.

Los modos especiales listados en la siguiente tabla, se proporcionan como abreviaciones

de combinaciones de algunos de los modos explicados anteriormente y todos están

disponibles desde la versión MySQL 5.0.2.

Anl. Mauricio Arévalo M.

- Pág. 165 -

MODO MySQL EQUIVALENCIA

DB2 PIPES_AS_CONCAT, ANSI_QUOTES

MSSQL, ORACLE ó POSTGRESQL PIPES_AS_CONCAT, ANSI_QUOTES, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS.

TRADITIONAL STRICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO.

Tabla A1: Equivalencia de Modos MySQL

Anl. Mauricio Arévalo M.

- Pág. 166 -

ANEXO B: TIPOS DE DATOS EN POSTGRESQL

Tabla B1: Tipos de datos en PostgreSQL

Tipo Descripción

abstime fecha y hora absoluta de rango limitado (Unix system time)

bool booleano 'true' o 'false'

Box rectángulo geométrico '(izquierda abajo, derecha arriba)'

bpchar caracteres rellenos con espacios, longitud especificada al momento de creación

bytea arreglo de bytes de longitud variable

char un sólo carácter

circle círculo geométrico '(centro, radio)'

date fecha ANSI SQL 'aaaa-mm-dd'

datetime fecha y hora 'aaaa-mm-dd hh:mm:ss'

float4 número real de precisión simple de 4 bytes

float8 número real de precisión doble de 8 bytes

inet dirección de red

Int2 número entero de dos bytes, de -32k a 32k

Int4 número entero de 4 bytes, -2B to 2B

Int8 número entero de 8 bytes, 90#9018 dígitos

line línea geométrica '(pt1, pt2)'

lseg segmento de línea geométrica '(pt1, pt2)'

macaddr dirección MAC

money unidad monetaria '$d,ddd.cc'

numeric número de precisión múltiple

Point punto geométrico '(x, y)'

polygon polígono geométrico '(pt1, ...)'

Text cadena de caracteres nativa de longitud variable

Time hora ANSI SQL 'hh:mm:ss'

timestamp fecha y hora en formato ISO de rango limitado

varchar cadena de caracteres sin espacios al final, longitud especificada al momento de creación

Anl. Mauricio Arévalo M.

- Pág. 167 -

ANEXO C: ALTERNATIVAS PARA

BUSINESS INTELLIGENCE (BI)

A continuación doy a conocer brevemente algunas herramientas de BI (Business

Intelligence) que existen a nivel propietario y cual puede ser su alternativa en el mundo Open

Source, en la cual se incluyen las bases de datos MySQL y PostgreSQL. Además, la idea

(independientemente de que muchos productos se usen para varias soluciones), es que cada

solucion se pueda clasificar (OLAP, reporting, data mining, etc).

Tabla C1: Alternativas Open Source para BI

Anl. Mauricio Arévalo M.

- Pág. 168 -

ANEXO D: CONEXIONES PARA

MySQL y PostgreSQL

A continuación muestro algunas conexiones para MySQL utilizando algunos

proveedores de datos:

• ODBC:

ODBC 2.50 Base de datos local:

"Driver={mySQL}; Server=localhost; Option=16834; Database=MiBaseDeDatos;"

ODBC 2.50 Base de datos remota:

"Driver={mySQL}; Server=NombreDelServidor; Port=3306; Option=131072; Stmt=;

Database=MiBaseDeDatos; Uid=MiNombreDeUsuario; Pwd=MiPassword;"

ODBC 3.51 Base de datos local:

"DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;

DATABASE=MiBaseDeDatos; USER=MiNombreDeUsuario;

PASSWORD=MiPassword; OPTION=3;"

ODBC 3.51 Base de datos remota:

"DRIVER={MySQL ODBC 3.51 Driver}; SERVER=NombreDelServidor;

PORT=3306; DATABASE=MiBaseDeDatos; USER=MiNombreDeUsuario;

PASSWORD=MiPassword; OPTION=3;"

Anl. Mauricio Arévalo M.

- Pág. 169 -

Creación de una conexión ODBC en C#:

Using System;

Using System.Data;

Using System.Data.Odbc;

string cadenaconexion=

"DRIVER ={MySQL ODBC 3.51 Driver}; " +

"Server=NombreDelServidor; " +

"Database=MiBaseDeDatos; " +

"User =NombreDeUsuario; " +

"Password=MiPassword;" +

"Option=3;"

IDBConnection dbcon;

dbcon= new OdbcConnection (cadenaconexion);

dbcon.Open();

• Estándar para OLE DB, OleDbConnection (.NET)

"Provider=MySQLProv; Data Source=MiBaseDeDatos; User Id=MiNombreDeUsuario;

Password=MiPassword;"

• Estándar para Connector/Net 1.0 (.NET):

"Server=NombreDelServidor; Database=MiBaseDeDatos; Uid=MiNombreDeUsuario;

Pwd=MiPassword;"

Especificando puerto: (Recuerdese que el puerto predeterminado es el 3306)

"Server=NombreDelServidor; Port=1234; Database=MiBaseDeDatos;

Uid=MiNombreDeUsuario; Pwd=MiPassword;"

Creación de una conexión MySqlClient en C#:

Anl. Mauricio Arévalo M.

- Pág. 170 -

using MySql.Data.MySqlClient;

MySqlConnection objMySqlConn = new MySqlConnection();

objMySqlConn.ConnectionString = "Server=NombreDelServidor;

Database=MiBaseDeDatos; Uid=MiNombreDeUsuario; Pwd=MiPassword;";

objMySqlConn.Open();

Creación de una conexión MySqlClient en VB .NET:

Imports MySql.Data.MySqlClient

Dim objMySqlConn As MySqlConnection = New MySqlConnection()

objMySqlConn.ConnectionString = "Server=NombreDelServidor;

Database=MiBaseDeDatos; Uid=MiNombreDeUsuario; Pwd=MiPassword;"

objMySqlConn.Open()

• ByteFX.Data.MySQLClient (Proveedor de ADO.NET en el proyecto Mono):

"Server=NombreDelServidor; Database=MiBaseDeDatos; User ID=NombreDeUsuario;

Password=MiPassword;"

Creación de una conexión ByteFX.Data.MySqlClient en C#:

Using System;

Using System.Data;

Using System.Data.MySQLClient;

string cadenaconexion=

"Server=NombreDelServidor; " +

"Database=MiBaseDeDatos; " +

"User ID=NombreDeUsuario; " +

"Password=MiPassword;"

IDBConnection dbcon;

dbcon= new.MySqlConnection (cadenaconexion)

dbcon.Open();

Anl. Mauricio Arévalo M.

- Pág. 171 -

A continuación muestro algunas conexiones para PostgreSQL:

• Core Labs PostgreSQLDirect (Proveedor ADO.NET) Estándar:

"User ID=root; Password=pwd; Host=localhost; Port=5432; Database=testdb;

Pooling=true; Min Pool Size=0; Max Pool Size=100; Connection Lifetime=0"

• Npgsql (Proveedor de ADO.NET para PostgreSQL):

"Server= NombreDelServidor; Port=Puerto; User Id=Nombre_Usuario;

Password=Contraseña; Database=Nombre_BaseDeDatos;"

Ejemplo de una conexión con Npgsql en C#:

using System; using System.Data; using Npgsql; public static class UsoNpgsql { public static void Main(String[] args) { NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=mauricio; Password=secret;Database=prueba;"); conn.Open(); NpgsqlCommand command = new NpgsqlCommand("insert into table1 values(1,1)" , conn); Int32 filasafectadas; try { filasafectadas = command.ExecuteNonQuery(); } Console.WriteLine("Fueron añadidas {0} líneas en la tabla1", filasafectadas); try { conn.Close(); } } }

Anl. Mauricio Arévalo M.

- Pág. 172 -

GLOSARIO

Administrador de base de datos (DBA): Es la persona o equipo de personas profesionales

responsables del control y manejo del sistema de base de datos, generalmente tiene(n)

experiencia en DBMS, diseño de bases de datos, Sistemas operativos, comunicación de datos,

hardware y programación.

Base de Datos Distribuida: Una Base de Datos Distribuida es, una base de datos construida

sobre una red computacional y no por el contrario en una máquina aislada. La información

que constituye la base de datos esta almacenada en diferentes sitios en la red, y las

aplicaciones que se ejecutan acceden a los datos en distintos sitios. Una Base de Datos

Distribuida entonces es una colección de datos que pertenecen lógicamente a un sólo sistema,

pero se encuentran físicamente esparcidos en varios "sitios" de la red.

Business Intelligence: Son soluciones informáticas de “inteligencia de negocios” que se

implementan para ayudar a las organizaciones a entender los patrones de compra de los

clientes, identificar las oportunidades de venta y el incremento en las ganancias y mejorar en

sí la toma de decisiones. Las soluciones de inteligencia de negocios permiten al nivel

gerencial minimizar el tiempo requerido para recolectar toda la información relevante de

negocios, automatizar la asimilación de la información en inteligencia personalizada y

proporcionar las herramientas para hacer comparaciones y tomar decisiones inteligentes.

Colaciones (collation): Una colación es un conjunto de reglas para comparar caracteres

dentro de un conjunto de caracteres. Por ejemplo, para el conjunto de caracteres latin1

existen las colaciones latin1_spanish_ci, latin1_swedish_ci, latin1_german1_ci, entre otras.

Conjunto de caracteres (character set): Un conjunto de caracteres es un conjunto de

símbolos y codificaciones.

Anl. Mauricio Arévalo M.

- Pág. 173 -

Data mining: Básicamente se conoce como Data mining o minería de datos a la solución de

“Business Intelligence” o Inteligencia de Negocios que consiste en el conjunto de técnicas

avanzadas para la extracción de información predecible escondida en grandes bases de datos

con el fin de conseguir los objetivos de negocio. Es una combinación de tecnologías y

técnicas que permiten la extracción de información de grandes bases de datos, para convertirla

en conocimiento que será utilizado para tomar decisiones empresariales.

Data Warehouse (DW): es un almacén o repositorio de datos categorizados, que concentra

un gran volumen de información de interés para toda una organización, la cual se distribuye

por medio de diversas herramientas de consulta y de creación de informes orientadas a la

toma de decisiones. Nos ayuda a la recopilación, unificación, limpieza y filtro de datos,

también facilita la implantación de un sistema Data Mining.

DBI/DBD: DBI son las siglas en inglés de Database independent interface for Perl. El

concepto de funcionamiento es que mientras DBI es una interfase independiente del soporte

de un manejador de base de datos en particular, los DBD Database Drivers le dan la

funcionalidad para cada manejador o subsistema.

Esquema: Es la descripción lógica de la base de datos, es decir el diseño global de la base de

datos. Proporciona los nombres de las entidades y sus atributos especificando las relaciones

que existen entre ellos. El esquema no cambia o cambia en escasas ocasiones; los que varían

son los datos; es decir su instancia.

Funciones y procedimientos almacenados Se refieren a las rutinas internas escritas en SQL

o lenguajes procedurales como PL/SQL. Rutina externa se refiere a la escritura en los

lenguajes anfitriones como C, Java, Cobol, etc.

Instancia: Es el estado que presenta una base de datos en un tiempo determinado.

Entendámosla como una fotografía que se toma de la base de datos en un tiempo t, después de

que transcurre el tiempo t la base de datos ya no será la misma.

IPv4: Es la versión 4 del Protocolo IP (Internet Protocol). Esta fue la primera versión del

protocolo que se implementó extensamente, y forma la base de Internet. IPv4 usa direcciones

Anl. Mauricio Arévalo M.

- Pág. 174 -

de 32 bits, limitándola a 232 = 4.294.967.296 direcciones únicas, muchas de las cuales están

dedicadas a redes locales (LANs). Ejemplo: 192.168.32.100.

IPv6: Es la versión 6 del Protocolo de Internet (Internet Protocol), un estándar del nivel de

red encargado de dirigir y encaminar los paquetes a través de una red. Las direcciones IPv6,

de 128 bits de longitud, se escriben como ocho grupos de cuatro dígitos hexadecimales. Por

ejemplo, 2001:0db8:85a3:08d3:1319:8a2e:0370:7334 es una dirección IPv6 válida.

Lenguajes procedurales: Son lenguajes de programación utilizados en manejadores de Bases

de Datos que se ejecutan directamente en el servidor para programar operaciones como

procedimientos, funciones, triggers, etc. con sentencias SQL y sentencias de control propias

del lenguaje.

Multiproceso: Las computadoras que tienen mas de un CPU son llamadas multiproceso. Un

sistema operativo multiproceso coordina las operaciones de la computadoras

multiprocesadoras. Ya que cada CPU en una computadora de multiproceso puede estar

ejecutando una instrucción, el otro procesador queda liberado para procesar otras

instrucciones simultáneamente.

Named pipes: Una tubería o canalización con nombre es un fichero que actúa como una

tubería. Se pone algo en el fichero y sale por el otro lado; por ello se llama FIFO, o ``First-In-

First-Out'', «lo primero que entra es lo primero que sale», debido a que lo primero que se

introduce en la tubería es lo primero que sale por el otro lado, en el caso de peticiones al

servidor de bases de datos que utilice esta tecnología, la usa para transmitir los datos hacia

otro punto de la red. Si se escribe a una tubería con nombre, el proceso que escribe a la

tubería no termina hasta que la información que se escribe se lea desde el otro lado de la

tubería.

OLAP y OLETP: OLAP significa ‘On-Line Analytical Processing’, que se contrapone con el

término OLTP ‘On-Line Transactional Processing’. Término más habitual, que se define en

los sistemas de bases de datos relacionales usados ampliamente en el mundo empresarial.

En estos últimos sistemas lo importante es el registro de los datos, y en OLAP, lo importante

es el análisis de los mismos.

Anl. Mauricio Arévalo M.

- Pág. 175 -

PERL: (Practical Extraction and Report Language), es un lenguaje de programación utilizado

en el WWW a través de un CGI, principalmente para realizar consultas a bases de datos. Perl

es un lenguaje para manipular textos, archivos y procesos de una forma fácil y legible. Perl

nació y se ha difundido bajo el sistema operativo UNIX, aunque existe para otras plataformas.

PHP: PHP (acrónimo recursivo de "PHP: Hypertext Preprocessor"), originado inicialmente

del nombre PHP Tools, o Personal Home Page Tools, es un lenguaje de programación

interpretado, es decir, se ejecuta en el servidor. Aunque fue concebido en el tercer trimestre

de 1994 por Rasmus Lerdorf no fue hasta el día 8 de Junio de 1995 que fue lanzada la versión

1.0. Se utiliza entre otras cosas para la programación de páginas web activas, y se destaca por

su capacidad de mezclarse con el código HTML y motores de bases de datos como MySQL.

Propiedad Intelectual: Conjunto de normas y principios que regulan los derechos morales y

patrimoniales que la ley concede a los autores (los derechos de autor), por el solo hecho de la

creación de una obra en el ámbito literario, artístico o científico, tanto publicada o que todavía

no se haya publicado. Puede definirse como la especie de propiedad que se tiene sobre las

obras de la inteligencia

Puertos: Un puerto, no es nada más que un numero de 16 bits y que se utiliza para que un

determinado programa se comunique con la pila TCP. Es decir, un programa se hace "dueño"

de un puerto, y es capaz de enviar y recibir datos por él. Los puertos de números bajos:

inferiores al 1024, están reservados para el TCP-IP y normalmente tienen nombre propio: el

21 es el FTP, el 23 el telnet, el 80 es el servidor web... etc). Los puertos superiores quedan

libres pudiendo utilizarles cualquier aplicación y para cualquier uso.

Python: Es un lenguaje de programación interpretado e interactivo, capaz de ejecutarse en

una gran cantidad de plataformas. Fue creado por Guido van Rossum en 1990 y está

completamente orientado a objetos; la última versión estable del lenguaje es actualmente la

2.5 (Septiembre de 2006).

Secure Sockets Layer (SSL) y Transport Layer Security (TLS): Seguridad de la Capa de

Transporte (en el modelo de referencia OSI). Son protocolos criptográficos que proporcionan

comunicaciones seguras en Internet.

Anl. Mauricio Arévalo M.

- Pág. 176 -

Socket: Es un objeto de software utilizado por un cliente para conectarse a un servidor; un

socket no es nada más que un canal de comunicaciones entre dos host TCP. Por tanto, un

socket queda totalmente definido por 4 números: la dirección IP, el puerto de la máquina

origen, la dirección IP y el puerto de la máquina destino.

Tcl: (“Tool Command Language” o lenguaje de herramientas de comando), es un lenguaje de

script creado por John Ousterhout, ha sido concebido para su fácil aprendizaje, siendo a la vez

muy potente. Se usa principalmente para el desarrollo rápido de prototipos, aplicaciones

"script", interfaces gráficas y pruebas. La combinación de Tcl con Tk (del inglés Tool Kit) es

conocida como Tcl/Tk, y se utiliza para la creación de interfaces gráficas.

Unicode: Unicode es una norma de codificación de caracteres. Su objetivo es asignar a cada

posible carácter de cada posible lenguaje un número y nombre único, a diferencia de la mayor

parte de los juegos ISO como el ISO-8859-1, que sólo definen los necesarios para un idioma o

zona geográfica.

Anl. Mauricio Arévalo M.

- Pág. 177 -

BIBLIOGRAFIA

http://es.tldp.org/Tutoriales/NOTAS-CURSO-BBDD/notas-curso-BD/node3.html

http://es.tldp.org/Tutoriales/NOTAS-CURSO-BBDD/notas-curso-BD/node1.html

http://es.tldp.org/Tutoriales/NOTAS-CURSO-BBDD/notas-curso-BD/node1.html

http://es.wikipedia.org

http://www.monografias.com/trabajos11/basda/basda.shtml

http://www.monografias.com/trabajos29/comparacion-sistemas/comparacion-sistemas.shtml

http://es.wikipedia.org/wiki/Comparacion_de_sistemas_administradores_de_bases_de_datos_

relacionales

http://www.arsys.es/

http://www.acis.org.co

http://www.gnu.org/philosophy/why-free.es.html

http://manifiesto.cofradia.org/index.html

http://www.itlp.edu.mx/publica/tutoriales/basedat1/tema1_3.htm

http://todobi.blogspot.com

http://www.mysql.com

http://www.phpmyadmin.net/home_page/index.php

http://www.fabforce.net

http://www.datanamic.com

http://www.sqlmanager.net

http://dev.mysql.com/doc/refman/5.0/es/

www.netpecos.org/docs/mysql_postgres/b164.html#MYSQL

http://www.postgresql.org

http://es.tldp.org/Postgresql-es/web/navegable/todopostgresql/postgres.html

Anl. Mauricio Arévalo M.

- Pág. 178 -

http://personales.ya.com/reque/apuntes/memoria/index.html

http://www.pgadmin.org

http://phppgadmin.sourceforge.net

http://www.planetalinux.com.ar/

Celma, M; Casamayor, J. C; Mota, L. "Bases de datos relacionales", Pearson, Prentice Hall, Edición 2003.

Consultas al Ing. Alí Méndez

Consultas al Ing. Luis Loján

Consultas al Ing. Lauro Ulloa