Professional Documents
Culture Documents
PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información.
PDF generated at: Wed, 26 Jan 2011 13:34:30 UTC
Contenidos
Artículos
Introducción 1
Base de datos 1
Dato 5
Base de datos relacional 6
Sistema administrador de bases de datos relacionales 10
Sistema de gestión de bases de datos 14
Clave primaria 16
Clave foránea 18
Columna (base de datos) 19
Registro (base de datos) 20
Null (SQL) 20
Trigger (base de datos) 28
Vista (base de datos) 31
Otros 66
Software libre 66
Normalización de bases de datos 76
Referencias
Fuentes y contribuyentes del artículo 83
Fuentes de imagen, Licencias y contribuyentes 85
Licencias de artículos
Licencia 86
1
Introducción
Base de datos
Una base de datos o banco de datos (en
ocasiones abreviada con la sigla BD o con la
abreviatura b. d.) es un conjunto de datos
pertenecientes a un mismo contexto y
almacenados sistemáticamente para su
posterior uso. En este sentido, una biblioteca
puede considerarse una base de datos
compuesta en su mayoría por documentos y
textos impresos en papel e indexados para
su consulta. En la actualidad, y debido al
desarrollo tecnológico de campos como la
informática y la electrónica, la mayoría de OpenOffice.org Base: sistema de gestión de bases de datos.
las bases de datos están en formato digital
(electrónico), que ofrece un amplio rango de soluciones al problema de almacenar datos.
Existen programas denominados sistemas gestores de bases de datos, abreviado SGBD, que permiten almacenar y
posteriormente acceder a los datos de forma rápida y estructurada. Las propiedades de estos SGBD, así como su
utilización y administración, se estudian dentro del ámbito de la informática.
Las aplicaciones más usuales son para la gestión de empresas e instituciones públicas. También son ampliamente
utilizadas en entornos científicos con el objeto de almacenar la información experimental.
Aunque las bases de datos pueden contener muchos tipos de datos, algunos de ellos se encuentran protegidos por las
leyes de varios países. Por ejemplo, en España los datos personales se encuentran protegidos por la Ley Orgánica de
Protección de Datos de Carácter Personal (LOPD).
Según el contenido
Directorios
Un ejemplo son las guías telefónicas en formato electrónico.
Estas surgen debido a la existencia física de organismos descentralizados. Esto les da la capacidad de unir las bases
de datos de cada localidad y acceder así a distintas universidades, sucursales de tiendas, etcétera.
Véase también
• Sistema de gestión de base de datos
• Modelo relacional, normalización de bases de datos
• Base de datos orientada a objetos
• Almacén de datos
• Minería de datos
• Base de datos biológica
• Base de datos probabilística
Dato
El dato es una representación simbólica (numérica, alfabética, algorítmica etc.), un atributo o una característica de
una entidad. El dato no tiene valor semántico (sentido) en sí mismo, pero si recibe un tratamiento (procesamiento)
apropiado, se puede utilizar en la realización de cálculos o toma de decisiones. Es de empleo muy común en el
ámbito informático y, en general, prácticamente en cualquier disciplina científica.
En programación, un dato es la expresión general que describe las características de las entidades sobre las cuales
opera un algoritmo.
En Estructura de datos, es la parte mínima de la información.
Humanidades
En humanidades, específicamente en el ámbito de las ciencias de la información y la bibliotecología, se considera
que un dato es una expresión mínima de contenido sobre un tema. Ejemplos de datos son: la altura de una montaña,
la fecha de nacimiento de un personaje histórico, el peso específico de una sustancia, el número de habitantes de un
país, etc. La información representa un conjunto de datos relacionados que constituyen una estructura de menos
complejidad (por ejemplo, un capítulo de un libro de ciencias). En otras palabras, un conjunto de datos
convenientemente estructurado y organizado es lo que llamamos información.
Dato 6
Véase también
• Información
• Conocimiento
• Sistema de información
Características
• Una base de datos relacional se compone de varias tablas o relaciones.
• No pueden existir dos tablas con el mismo nombre.
• Cada tabla es a su vez un conjunto de registros (filas y columnas).
• La relación entre una tabla padre y un hijo se lleva a cabo por medio de las claves primarias y ajenas (o foráneas).
• Las claves primarias son la clave principal de un registro dentro de una tabla y éstas deben cumplir con la
integridad de datos.
• Las claves ajenas se colocan en la tabla hija, contienen el mismo valor que la clave primaria del registro padre;
por medio de éstas se hacen las relaciones.
Elementos
Restricciones
Una restricción es una condición que obliga el cumplimiento de ciertas condiciones en la base de datos. Algunas no
son determinadas por los usuarios, sino que son inherentemente definidas por el simple hecho de que la base de datos
sea relacional. Algunas otras restricciones las puede definir el usuario, por ejemplo, usar un campo con valores
enteros entre 1 y 10.
Las restricciones proveen un método de implementar reglas en la base de datos. Las restricciones restringen los datos
que pueden ser almacenados en las tablas. Usualmente se definen usando expresiones que dan como resultado un
valor booleano, indicando si los datos satisfacen la restricción o no.
Las restricciones no son parte formal del modelo relacional, pero son incluidas porque juegan el rol de organizar
mejor los datos. Las restricciones son muy discutidas junto con los conceptos relacionales.
Dominios
Un dominio describe un conjunto de posibles valores para cierto atributo. Como un dominio restringe los valores del
atributo, puede ser considerado como una restricción. Matemáticamente, atribuir un dominio a un atributo significa
"todos los valores de este atributo deben de ser elementos del conjunto especificado".
Distintos tipos de dominios son: enteros, cadenas de texto, fecha,no procedurales etc.
Clave única
Cada tabla puede tener uno o más campos cuyos valores identifican de forma única cada registro de dicha tabla, es
decir, no pueden existir dos o más registros diferentes cuyos valores en dichos campos sean idénticos. Este conjunto
de campos se llama clave única.
Pueden existir varias claves únicas en una determinada tabla, y a cada una de éstas suele llamársele candidata a clave
primaria.
Clave primaria
Una clave primaria es una clave única elegida entre todas las candidatas que define unívocamente a todos los demás
atributos de la tabla, para especificar los datos que serán relacionados con las demás tablas. La forma de hacer esto es
por medio de claves foráneas.
Sólo puede existir una clave primaria por tabla y ningún campo de dicha clave puede contener valores NULL.
Clave foránea
Una clave foránea es una referencia a una clave en otra tabla. Las claves foráneas no necesitan ser claves únicas en la
tabla donde están y sí a donde están referenciadas.
Por ejemplo, el código de departamento puede ser una clave foránea en la tabla de empleados, obviamente se permite
que haya varios empleados en un mismo departamento, pero existirá sólo un departamento.
Base de datos relacional 8
Clave índice
Las claves índice surgen con la necesidad de tener un acceso más rápido a los datos. Los índices pueden ser creados
con cualquier combinación de campos de una tabla. Las consultas que filtran registros por medio de estos campos,
pueden encontrar los registros de forma no secuencial usando la clave índice.
Las bases de datos relacionales incluyen múltiples técnicas de ordenamiento, cada una de ellas es óptima para cierta
distribución de datos y tamaño de la relación.
Los índices generalmente no se consideran parte de la base de datos, pues son un detalle agregado. Sin embargo, las
claves índices son desarrolladas por el mismo grupo de programadores que las otras partes de la base de datos.
Procedimientos almacenados
Un procedimiento almacenado es código ejecutable que se asocia y se almacena con la base de datos. Los
procedimientos almacenados usualmente recogen y personalizan operaciones comunes, como insertar un registro
dentro de una tabla, recopilar información estadística, o encapsular cálculos complejos. Son frecuentemente usados
por un API por seguridad o simplicidad.
Los procedimientos almacenados no son parte del modelo relacional, pero todas las implementaciones comerciales
los incluyen.
Estructura
La base de datos se organiza en dos marcadas secciones; el esquema y los datos (o instancia).
El esquema es la definición de la estructura de la base de datos y principalmente almacena los siguientes datos:
• El nombre de cada tabla
• El nombre de cada columna
• El tipo de dato de cada columna
• La tabla a la que pertenece cada columna
Las bases de datos relacionales pasan por un proceso al que se le conoce como normalización, el resultado de dicho
proceso es un esquema que permite que la base de datos sea usada de manera óptima.
Los datos o instancia es el contenido de la base de datos en un momento dado. Es en sí, el contenido de todos los
registros.
Manipulación de la información
Para manipular la información utilizamos un lenguaje relacional, actualmente se cuenta con dos lenguajes formales
el álgebra relacional y el cálculo relacional. El álgebra relacional permite describir la forma de realizar una consulta,
en cambio, el cálculo relacional sólo indica lo que se desea devolver.
El lenguaje más común para construir las consultas a bases de datos relacionales es SQL (Structured Query
Language), un estándar implementado por los principales motores o sistemas de gestión de bases de datos
relacionales.
En el modelo relacional los atributos deben estar explícitamente relacionados a un nombre en todas las operaciones,
en cambio, el estándar SQL permite usar columnas sin nombre en conjuntos de resultados, como el asterisco
taquigráfico (*) como notación de consultas.
Al contrario del modelo relacional, el estándar SQL requiere que las columnas tengan un orden definido, lo cual es
fácil de implementar en una computadora, ya que la memoria es lineal.
Es de notar, sin embargo, que en SQL el orden de las columnas y los registros devueltos en cierto conjunto de
resultado nunca está garantizado, a no ser que explícitamente sea especificado por el usuario.
Base de datos relacional 9
Ventajas y desventajas
Ventajas
• Provee herramientas que garantizan evitar la duplicidad de registros.
• Garantiza la integridad referencial, así, al eliminar un registro elimina todos los registros relacionados
dependientes.
• Favorece la normalización por ser más comprensible y aplicable.
Desventajas
• Presentan deficiencias con datos gráficos, multimedia, CAD y sistemas de información geográfica.
• No se manipulan de forma manejable los bloques de texto como tipo de dato.
Las bases de datos orientadas a objetos (BDOO) se propusieron con el objetivo de satisfacer las necesidades de las
aplicaciones anteriores y así, complementar pero no sustituir a las bases de datos relacionales.
Véase también
• Base de datos
• Modelo relacional
• Modelo entidad-relación
• Base de datos orientada a objetos
Referencias
[1] Communications of the ACM, volume=13, issue=6, pages=377-387 (http:/ / www. acm. org/ classics/ nov95/ toc. html) en inglés
Enlaces externos
• Articulo sobre Como ocupar menos espacio de disco duro en bases de datos relacionales (http://www.
nuevastecnologias.com.ar/2010/04/como-ahorrar-espacio-en-una-base-de.html)
• Comunidad de profesionales Oracle hispanoparlantes (http://comunidadoraclehispana.ning.com)
• Artículo sobre Base de datos relacional (http://objetoide.blogspot.com/2008/02/base-de-datos-relacional.
html)
• Blog sobre base de datos Oracle y alta disponibilidad (http://oracleracnotes.wordpress.com/)
Reglas de Codd
En 1985 el Dr. Edgar Frank Codd publicó 12 reglas para evaluar si un DBMS (DataBase Management System)
puede considerarse un RDBMS (Relational DataBase Management System), o dicho más concisamente, si un
sistema de bases de datos puede considerarse o no relacional, y mas.
Propósito
El propósito general de los sistemas de gestión de bases de datos es el de manejar de manera clara, sencilla y
ordenada un conjunto de datos que posteriormente se convertirán en información relevante para una organización.
Objetivos
Existen distintos objetivos que deben cumplir los SGBD:
• Abstracción de la información. Los SGBD ahorran a los usuarios detalles acerca del almacenamiento físico de
los datos. Da lo mismo si una base de datos ocupa uno o cientos de archivos, este hecho se hace transparente al
usuario. Así, se definen varios niveles de abstracció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.
• Consistencia. En aquellos casos en los que no se ha logrado eliminar la redundancia, será necesario vigilar que
aquella información que aparece repetida se actualice de forma coherente, es decir, que todos los datos repetidos
se actualicen de forma simultánea. Por otra parte, la base de datos representa una realidad determinada que tiene
determinadas condiciones, por ejemplo que los menores de edad no pueden tener licencia de conducir. El sistema
no debería aceptar datos de un conductor menor de edad. En los SGBD existen herramientas que facilitan la
programación de este tipo de condiciones.
• Seguridad. La información almacenada en una base de datos puede llegar a tener un gran valor. Los SGBD deben
garantizar que esta información se encuentra segura de permisos a usuarios y grupos de usuarios, que permiten
otorgar diversas categorías de permisos.
• Manejo de transacciones. Una transacción es un programa que se ejecuta como una sola operación. Esto quiere
decir que luego de una ejecución en la que se produce una falla es el mismo que se obtendría si el programa no se
hubiera ejecutado. Los SGBD proveen mecanismos para programar las modificaciones de los datos de una forma
mucho más simple que si no se dispusiera de ellos.
• Tiempo de respuesta. Lógicamente, es deseable minimizar el tiempo que el SGBD demora en proporcionar la
información solicitada y en almacenar los cambios realizados.
Ventajas
• Proveen facilidades para la manipulación de grandes volúmenes de datos (ver objetivos). Entre éstas:
• Simplifican la programación de equipos de consistencia.
• Manejando las políticas de respaldo adecuadas, garantizan que los cambios de la base serán siempre
consistentes sin importar si hay errores correctamente, etc.
• Organizan los datos con un impacto mínimo en el código de los programas.
• Disminuyen drásticamente los tiempos de desarrollo y aumentan la calidad del sistema desarrollado si son bien
explotados por los desarrolladores.
• Usualmente, proveen interfaces y lenguajes de consulta que simplifican la recuperación de los datos.
Sistema de gestión de bases de datos 15
Inconvenientes
1. Típicamente, es necesario disponer de una o más personas que administren de la base de datos, en la misma
forma en que suele ser necesario en instalaciones de cierto porte disponer de una o más personas que administren
los sistemas operativos. Esto puede llegar a incrementar los costos de operación en una empresa. Sin embargo hay
que balancear este aspecto con la calidad y confiabilidad del sistema que se obtiene.
2. Si se tienen muy pocos datos que son usados por un único usuario por vez y no hay que realizar consultas
complejas sobre los datos, entonces es posible que sea mejor usar una planilla de cálculo.
3. Complejidad: los software muy complejos y las personas que vayan a usarlo deben tener conocimiento de las
funcionalidades del mismo para poder aprovecharlo al máximo.
4. Tamaño: la complejidad y la gran cantidad de funciones que tienen hacen que sea un software de gran tamaño,
que requiere de gran cantidad de memoria para poder correr.
5. Coste del hardware adicional: los requisitos de hardware para correr un SGBD por lo general son relativamente
altos, por lo que estos equipos pueden llegar a costar gran cantidad de dinero.
SGBD libres
• PostgreSQL (http://www.postgresql.org Postgresql) Licencia BSD
• Firebird basada en la versión 6 de InterBase, Initial Developer's PUBLIC LICENSE Version 1.0.
• SQLite (http://www.sqlite.org SQLite) Licencia Dominio Público
• DB2 Express-C (http://www.ibm.com/software/data/db2/express/)
• Apache Derby (http://db.apache.org/derby/)
SGBD no libres
• MySQL: Licencia Dual, depende del uso. No se sabe hasta cuándo permanecerá así, ya que ha sido comprada por
Oracle. Sin embargo, existen 2 versiones: una gratuita que sería equivalente a la edición "express" SQL server de
Microsoft Windows, y otra más completa de pago.
• Advantage Database
• dBase
• FileMaker
• Fox Pro
• gsBase
• IBM DB2: Universal Database (DB2 UDB)
• IBM Informix
• Interbase de CodeGear, filial de Borland
• MAGIC
• Microsoft Access
• Microsoft SQL Server
• NexusDB
• Open Access
• Oracle
• Paradox
• PervasiveSQL
• Progress (DBMS)
• Sybase ASE
• Sybase ASA
Sistema de gestión de bases de datos 16
• Sybase IQ
• WindowBase
• IBM IMS Base de Datos Jerárquica
• CA-IDMS
Véase también
• Base de datos
• Comparación de sistemas administradores de bases de datos relacionales
Clave primaria
En el diseño de bases de datos relacionales, se llama clave primaria a un campo o a una combinación de campos
que identifica de forma única a cada fila de una tabla. Una clave primaria comprende de esta manera una columna o
conjunto de columnas. No pueden haber dos filas en una tabla que tengan la misma clave primaria.
Una clave primaria debe identificar unívocamente a todas las posibles filas de una tabla y no solo a las filas que se
encuentran en un momento determinado. Ejemplos de claves primarias son DNI (asociado a una persona) o ISBN
(asociado a un libro). Las guias telefónicas y diccionarios no pueden usar nombres o palabras o números del sistema
decimal de Dewey como claves candidatas, porque identifican unívocamente números de teléfono o palabras.
Una clave primaria es un caso especial de clave única. La mayor diferencia es que para claves únicas, no se impone
automáticamente la restricción implícita NOT NULL, mientras que para claves primarias, sí. Así, los valores en
columnas de clave única pueden o no ser NULL. Otra diferencia es que las claves primarias deben definirse por
medio de otra sintaxis.
El modelo relacional, según se lo expresa mediante cálculo relacional y álgebra relacional, no distingue entre clave
primaria y otros tipos de claves. Las claves primarias fueron agregadas al estándar SQL principalmente para
conveniencia del programador.
Tanto claves únicas como claves primarias pueden referenciarse con claves foráneas.
La clave primaria puede especificarse directamente en el momento de la creación de la tabla también. En el estándar
SQL, las claves primarias pueden estar compuestas por una o más columnas. Cada columna que forme parte de la
clave primaria queda implícitamente definida como NOT NULL. Nótese que algunos sistemas de bases de datos
requieren que se marque explícitamente a las columnas de clave primaria como NOT NULL.
Clave primaria 17
En el caso en que la clave primaria sea una sola columna, ésta puede marcarse como tal por medio de la siguiente
sintaxis:
De la misma manera, las claves únicas pueden definirse como parte de la sentencia de SQL CREATE TABLE.
Enlaces
• Ejemplos de uso ALTER TABLE [1]
Clave primaria 18
Referencias
[1] http:/ / www. linuxtotal. com. mx/ index. php?cont=info_otros_005
Clave foránea
En el contexto de bases de datos relacionales, una clave foránea (o Foreign Key FK) es una limitación referencial
entre dos tablas. La clave foránea identifica una columna o grupo de columnas en una tabla (tabla hija o referendo)
que se refiere a una columna o grupo de columnas en otra tabla (tabla maestra o referenciada). Las columnas en la
tabla referendo deben ser la clave primaria u otra clave candidata en la tabla referenciada.
Los valores en una fila de las columnas referendo deben existir solo en una fila en la tabla referenciada. Así, una fila
en la tabla referendo no puede contener valores que no existen en la tabla referenciada. De esta forma, las referencias
pueden ser creadas para vincular o relacionar información. Esto es una parte esencial de la normalización de base de
datos. Múltiples filas en la tabla referendo pueden hacer referencia, vincularse o relacionarse a la misma fila en la
tabla referenciada. Mayormente esto se ve reflejado en una relación uno (tabla maestra o referenciada) a muchos
(tabla hija o referendo).
La tabla referendo y la tabla referenciada pueden ser la misma, esto es, la clave foránea remite o hace referencia a la
misma tabla. Esta clave externa es conocida en SQL:2003 como auto-referencia o clave foránea recursiva. Una tabla
puede tener múltiples claves foráneas y cada una puede tener diferentes tablas referenciadas. Cada clave foránea es
forzada independientemente por el sistema de base de datos. Por tanto, las relaciones en cascada entre tablas pueden
realizarse usando claves foráneas. Configuraciones impropias de las claves foráneas o primarias o no forzar esas
relaciones son frecuentemente la fuente de muchos problemas para la base de datos o para el modelamiento de los
mismos.
Columna 1 Columna 2
Referencias
[1] The term "column" also has equivalent application in other, more generic contexts. See e.g., Flat file database, Table (information).
Véase también
• Tabla
• Fila
• Índice
Registro (base de datos) 20
Véase también
• Base de datos relacional
• Tabla
• Columna
• Índice
Null (SQL)
Null (nulo) es un marcador especial usado en el lenguaje de consulta estructurado (SQL) para indicar que no existe
un valor dentro de una base de datos.
Introducido por el creador del modelo relacional de bases de datos E. F. Codd, su
función es la de solventar el requisito de que los sistemas de gestión relacionales de
base de datos (en inglés: Database management system, abreviado DBMS)
verdaderos puedan representar información “desconocida” o “no aplicable”.
Asimismo, Codd también introdujo el uso de la letra griega omega (ω) en minúscula para representar el Null en la
teoría de la teoría de las bases de datos. NULL es también una palabra reservada en el lenguaje SQL para identificar
el marcador especial Null.
Null ha sido un foco de controversia y una fuente de debate debido a su asociación a la lógica ternaria (en inglés:
Three-Valued Logic, abreviado 3VL), a sus restricciones de uso en SQL y a la dificultad de su manejo en SQL.
Aunque las funciones especiales y predicados sirven para manejar eficazmente el Nulls, la competencia opina que
resolver este tipo de cuestiones añade complejidades y contradicciones innecesarias dentro del modelo relacional de
bases de datos.
Null (SQL) 21
Historia
Null fue introducido por E. F. Codd como un método de representación de datos que faltan en el modelo relacional.
Codd más tarde reforzó su llamamiento para que todos los RDBMS’ incluyeran la función null para indicar los datos
que faltan en un doble artículo publicado en la revista ComputerWorld. Codd también introdujo la lógica ternaria,
consistente en la veracidad de los valores True (verdadero), False (falso), y Desconocido (Unknown), los cuales
están estrechamente relacionados con el concepto de Null. El valor Desconocido verdadero es generado cuando Null
es comparado con cualquier dato, o con otro Null.
Codd indicó en su libro “The Relational Model for Database Management publicado en 1990, Version 2” que un solo
mandato Null a través del estándar SQL era inadecuado, y debería ser reemplazado por dos marcadores Null
separados para indicar la razón de por qué los datos faltan. Estos dos tipos de marcadores Null son llamados
comúnmente “Valores A” y “Valores I”, representando “datos que faltan pero aplicables” y “datos que faltan pero no
aplicables”, respectivamente. La recomendación de Codd debería haber requerido una expansión del sistema lógico
del SQL para acomodar el sistema lógico cuaternario. Debido a su adicional complejidad, la idea de los múltiples
valores Null no ha logrado un reconocimiento general.
De todas formas, ciertas operaciones con Null pueden devolver valores si el valor Null no es relevante ante el
resultado de la operación. Es el caso del siguiente ejemplo, considerando que la declaración OR es evaluada en
forma de giro corto:
En este caso, el hecho de que el valor a la derecha de OR es desconocido es irrelevante, porque el resultado de la
operación debería ser Verdadera a pesar del valor de la derecha. SQL aplica resultados lógicos ternarios, luego las
aplicaciones de SQL deben proporcionar unos valores lógicos ternarios especializados. Las reglas que gobiernan los
valores lógicos ternarios en SQL se muestran en las siguientes tablas (p y q representan estados lógicos):
p AND q p
p OR q p
p NOT p
Verdadero Falso
Falso Verdadero
Desconocido Desconocido
p=q p
Las comparaciones operarias básicas en SQL resultan Desconocidas comparando cualquier cosa con Null, luego el
estándar de SQL estipula cálculos predicados cotejados especiales para las dos funciones específicas Null.
El test ES NULL y NO ES NULL determina si el dato es, o no es, Null.
Tipos de datos
Null no está diseñado como un número entero, caracter u otro tipo de dato específico. Debido a esto, es a veces
deseable convertir explícitamente Null en un tipo de dato específico. Por ejemplo, si las funciones sobrecargadas son
sostenidas por el SGBD (Sistema de Gestión de Base de Datos), SQL quizás no podría ser capaz de decidir la
función correcta sin conocer los tipos de datos de todos los parámetros, incluidos aquellos para los cuales Null ha
actuado.
SELECT *
FROM t
WHERE i = NULL;
El ejemplo arriba planteado siempre devuelve lógicamente ceros a las filas debido a que la comparación entre la
columna i con Null siempre devuelve un valor Desconocido, incluso para aquellas filas en las que i es Null. El
resultado Desconocido causa la declaración SELECT para desechar todas y cada una de las filas (De todas formas,
Null (SQL) 23
en la práctica, las herramientas SQL recuperarán las filas utilizando la comparación con Null).
Expresiones CASE
Las expresiones CASE de SQL funcionan conforme a las mismas reglas que las del DMS WHERE para Null.
Debido a que puede ser evaluado como una serie de condiciones de comparación de igualdad, una expresión de
CASE simple no puede comprobar la existencia de Null directamente. Una comprobación de la existencia de Null en
una expresión CASE simple siempre resulta Desconocida, como a continuación:
SELECT CASE i WHEN NULL THEN 'Es Null' -- Esto nunca será devuelto.
WHEN 0 THEN 'Es Cero' -- Esto nunca será devuelto
cuando i = 0
WHEN 1 THEN 'Es uno' -- Esto nunca será devuelto
cuando i = 1
END
FROM t;
Como la expresión i = NULL evalúa a Desconocido sin importar el valor que la columna i contenga (incluso si
contiene el Null), el resultado ' ES NULL ' nunca será devuelto. Una expresión de CASE buscada también devuelve
el primer valor para el cual el resultado de la comparación predicada evalúa la Verdad, incluyendo comparaciones
predicadas que usan el “ES NULL” Y “NO ES NULL”. El ejemplo siguiente muestra cómo usar una expresión CASE
buscada para comprobar el Null:
SELECT CASE WHEN i ES NULL THEN 'Es Null' -- Esto nunca será devuelto
cuando i es NULL
WHEN i = 0 THEN 'Cero' -- Esto nunca será
devuelto i = 0
WHEN i = 1 THEN 'Uno' -- Esto nunca será
devuelto i = 1
END
FROM t;
En la expresión CASE buscada, ' el Resultado Null ' es devuelta para todas las filas en las cuales i es Null.
CREATE TABLE t (
i INTEGER,
CONSTRAINT ck_i CHECK ( i < 0 AND i = 0 AND i > 0 ) );
Con el objetivo de que una columna rechace Nulls, la coacción NOT NULL puede ser aplicada, como abajo se
muestra en el ejemplo. La coacción NOT NULL es semánticamente equivalente a una comprobación de las
Null (SQL) 24
Extensiones de procedimientos
SQL/PSM (SQL Módulos Persistentes Almacenados) define extensiones procesales para SQL, como la declaración
IF. Sin embargo, las principales comercializaciones de SQL, históricamente han incluido sus extensiones procesales
propias. Las extensiones procesales para la formación de bucles y comparaciones funcionan bajo las reglas de
comparación Null, similares a las declaraciones DML e interrogaciones. El siguiente fragmento de código, en
formato estándar ISO SQL, demuestra el empleo del Null 3VL en una declaración IF.
IF i = NULL THEN
SELECT 'Result is True'
ELSEIF NOT(i = NULL) THEN
SELECT 'Result is False'
ELSE
SELECT 'Result is Unknown';
La declaración IF realiza acciones sólo para aquellas comparaciones que evalúan la Verdad. Para las declaraciones
que evalúan la Falsedad o Desconocimiento, la declaración IF pasa el control de la cláusula ELSEIF, y finalmente la
cláusula ELSE. El resultado de éste código, siempre será el mensaje 'Resultado es Desconocido' ya que las
comparaciones con Null siempre evalúan el Desconocimiento.
Sentencias JOIN
La sentencia JOIN en SQL permite la combinación de registros de dos o más tablas dentro de una misma base de
datos relacional. En SQL existen tres tipos de JOIN: interno, externo, y cruzado. Las sentencias JOIN externas
(Outer Joins), incluyendo las de tabla izquierda, derecha y de combinación completa, automáticamente producen
Nulls como marcadores (placeholders) de para los valores que faltan en tablas relacionadas. Para combinaciones
externas de tabla izquierda, por ejemplo, los Nulls son producidos en lugar de las filas ausentes de la tabla
apareciendo en el lado derecho del operador JOIN externo de tabla izquierda. El siguiente ejemplo utiliza dos tablas
para demostrar que la producción del marcador Null en la combinación externa izquierda. La primera tabla
(Empleado) contiene los números y nombres del empleado ID, mientras la segunda tabla (Número de teléfono)
contiene números de teléfono relacionados con el empleado ID, como se muestra abajo.
3 Alfonso Katia
|+ Número de
4 Barbadillo Guillermo teléfono
|+ Empleado
La siguiente muestra SQL desarrolla una combinación externa de tabla izquierda entre las dos tablas anteriores.
El resultado generado en esta serie de cuestiones demuestra cómo SQL usa el Null como un marcador para valores
que faltan en la parte derecha de la tabla (Números de teléfono), como se muestra a continuación:
|+ Resultado de la encuesta
Las combinaciones internas (Inner Joins) y las cruzadas (Cross Joins), también están disponibles en el estándar SQL,
y no generan marcadores Null para valores ausentes en tablas relacionadas.
Es necesario tener cuidado a la hora de utilizar columnas en las que pueda operar Null en criterios de unificación de
SQL. Como un Null no es igual a ninguna otro Null, los Nulls que se encuentren en una columna de una tabla no se
unirán a Nulls de columnas relacionadas de otra tabla que usa los operadores de comparación de igualdad estándar.
La función SQL COALESCE o expresiones CASE pueden ser usadas para "simular" una igualdad Null en criterios
de unificación, y los predicados ‘ES NULO’ Y ‘NO ES NULL’ pueden ser utilizados en los criterios de unificación
también.
El predicado siguiente prueba para la igualdad de los valores A y B y trata a Null como si fuera igual. Se requiere el
operador IFNULL ya que A = B devuelve un valor Null si al menos uno de los valores (A o B) es Null y NULL O
FALSO es Nulo en sí mismo.
Esto puede conducir a resultados inesperados. Por ejemplo, cuando una tentativa es hecha para dividir Null entre
cero, las plataformas pueden devolver Null en vez de lanzar una esperado "excepción de datos - la división entre
cero". Aunque este comportamiento no sea definido por la estándar SQL ISO muchos productos comercializados
DBMS tratan esta operación de modo similar. Por ejemplo, las plataformas Oracle, PostgreSQL, MySQL Server, y
Microsoft SQL Server devuelven el resultado Null para la operación:
NULL / 0
La serie de operaciones concadenadas, que son comunes en SQL, también resultan Null cuando uno de los
operándoos es Null. El siguiente ejemplo demuestra el resultado Null devuelto por el uso de Null con el SQL ||
operador de una serie concadenada.
Esto no es verdadero para todas las puestas en práctica de base de datos. En Oracle RDBMS por ejemplo NULL y
serie vacía son consideradas la misma cosa y por lo tanto ‘ Tortilla ‘ la NULL || || ‘Patata’ resulta ‘Tortilla Patata’.
Null (SQL) 26
Funciones agregadas
SQL define las funciones agregadas para simplificar cálculos agregados de datos del servidor. Casi todas las
funciones agregadas realizan un paso de eliminación Null, de modo que los valores Null no sean incluidos en el
resultado final del cálculo. Esta eliminación implícita Null, sin embargo, puede influir en los resultados de funciones
agregadas. La tabla ejemplificada a continuación deriva resultados diferentes siendo devueltos a cada columna
cuando la función agregada SQL AVG (media) es aplicada:
i j
150 150
200 200
350 350
NULL 0
|+ Tabla
La función agregada SQL AVG devuelve 233 cuando se aplica a la columna i, pero vuelve 175 cuando es aplicado a
la columna j. El paso de eliminación de la función agregada Null explica la diferencia en estos resultados. La única
función agregada que no elimina implícitamente la Null es la función COUNT.
Agrupación y clasificación
Como SQL:2003 define todos los marcadores Null como desiguales entre sí, requirieron una definición especial para
agrupar las Null en la realización de ciertas operaciones. SQL define "cualquiera de los dos valores que sean iguales
el uno al otro, o cualquier pareja de Nulls", como "no distinto". Esta definición de no distinto permite a SQL agrupar
y clasificar los Nulls cuando la cláusula GROUP BY (y otras palabras clave que realizan la agrupación) es usada.
Otras operaciones SQL, cláusulas, y palabras clave usan "no distinto" en su tratamiento de Nulls. Estos incluyen lo
siguiente:
• La cláusula de clasificación PARTITION BY y funciones de enventanado (windowing) como ROW_NUMBER.
• UNION, INTERSECT y el operador EXCEPT, que tratan los NULLs igual para las determinaciones de
comparación/eliminación en filas.
• La palabra clave DISTINCT es usada en preguntas SELECT.
• Coacciones Únicas sobre columnas en las que pueda encontrarse la función Null, que permiten sólo a un valor
solo Nulo ser almacenado en la columna.
El estándar SQL no define explícitamente por defecto la clase de orden para los Null. En cambio, sobre sistemas
conformados, los Nulls pueden ser clasificados antes o después de todos los valores de datos mediandte el uso de las
cláusulas NULLS FIRST o NULLS LAST de la lista ORDER BY, respectivamente. No todos los vendedores de
DBMS ponen en práctica esta funcionalidad pese a todo. Los vendedores que no ponen en práctica esta
funcionalidad pueden especificar tratamientos diferentes para la clasificación de Null en el DBMS.
Null (SQL) 27
COALESCE
La función COALESCE acepta una lista de parámetros, devolviendo el primer valor no Null de la lista:
Algún DBMSs SQL pone en práctica funciones específicas de vendedor similares para COALESCE. Algunos
sistemas ponen en práctica una función de ISNULL, u otras funciones parecidas que son funcionalmente similares a
COALESCE.
NULLIF
La función de NULLIF acepta dos parámetros. Si el primer parámetro es igual al segundo, NULLIF devuelve Null.
De otra manera, el valor del primer parámetro es devuelto.
NULLIF(valor1, valor2)
Véase también
• SQL
• SQL:2003
• Lenguaje de Manipulación de Datos
• 12 reglas de Codd
• Sistema de gestión de base de datos
• Join
Null (SQL) 28
Enlaces externos
• NULLs de Oracle [1]
• Referencia Transact-SQL Null [2]
• Tratamiento de los valores NULL en sentencias SQL [3]
Referencias
[1] http:/ / www. psoug. org/ reference/ null. html
[2] http:/ / technet. microsoft. com/ es-es/ library/ ms188795. aspx
[3] http:/ / www. bbr. cat/ index. php?option=com_myblog& show=Tratamiento-de-los-NULL-en-sentencias-SQL. html& Itemid=53
Usos
Son usados para mejorar la administración de la Base de datos, sin necesidad de contar con que el usuario ejecute la
sentencia de SQL.
Además, pueden generar valores de columnas, previene errores de datos, sincroniza tablas, modifica valores de una
vista, etc.
Permite implementar programas basados en paradigma lógico (sistemas expertos, deducción).
Componentes principales
La estructura básica de un trigger es:
• Llamada de activación: es la sentencia que permite "disparar" el código a ejecutar.
• Restricción: es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de
tipo nulidad.
• Acción a ejecutar: es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones
iniciales.
Tipos
Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:
• Row Triggers (o Disparadores de fila): son aquellas que se ejecutaran n-veces si se llama n-veces desde la tabla
asociada al trigger
• Statement Triggers (o Disparadores de secuencia): son áquellos que sin importar la cantidad de veces que se
cumpla con la condición, su ejecución es única.
Pueden ser de sesión y almacenados; pero no son de fiar[cita requerida].
Trigger (base de datos) 29
Efectos y características
• No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales)
• No pueden ejecutar las operaciones COMMIT o ROLLBACK por que estas son parte de la sentencia SQL del
disparador (únicamente a través de transacciones autónomas)
• Pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente.
Ejemplo
Un sencillo ejemplo sería crear un Trigger para insertar un pedido de algún producto cuando la cantidad de éste, en
nuestro almacén, sea inferior a un valor dado.
Disparadores en MySQL
Los disparadores son soportados en MySQL a partir de la versión 5.0.2. Algunos de los soportes existentes son los
disparadores para las sentencias INSERT, UPDATE y DELETE
El estándar SQL:2003 requiere que los disparadores den a los programadores acceso a las variables de un registro
utilizando una sintaxis como REFERENCING NEW AS n. Por ejemplo, si un disparador está monitoreando los
cambios en la columna salario, podría escribirse un disparador como:
Como en MySQL las sentencias se ejecutan luego de escribir el signo punto y coma (;), cabe destacar que para crear
un disparador en MySQL, antes se escribe la sentencia DELIMITER seguida de un carácter tal como |, la cual asigna
la función del punto y coma (;) a otro carácter permitiendo que el disparador sea escrito usando los punto y comas
sin que se ejecute mientras se escribe; después de escrito el disparador se escribe nuevamente la sentencia
DELIMITER ; para asignar al punto y coma su función habitual.
Trigger (base de datos) 30
Disparadores en PostgresQL
Desde 1997 PostgresQL soporta el uso de disparadores, estos pueden anexarse a las tablas pero no a las vistas;
aunque a las vistas se les pueden crear reglas.
Al igual que en MySQL los disparadores de PostgresQL se pueden activar luego de sentencias INSERT, UPDATE o
DELETE
Cuando hay varios disparadores, se activan en orden alfabético.
Además de permitir el uso de funciones en el lenguaje nativo de PostgresQL, PL/PgSQL, los disparadores también
permiten invocar funciones escritas en otros lenguajes como PL/Perl.
En Postgres un disparador ejecuta una función la cual contiene el código de lo que se requiere, esto difiere del
método expuesto anteriormente para MySQL que escribe el código a ejecutarse dentro del mismo disparador.
El siguiente es un ejemplo de disparador creado con su respectiva función:
Enlaces externos
• Disparadores en MySQL (documentación oficial) [1]
• Microsoft SQL Server CREATE TRIGGER [2] (en inglés)
• Microsoft SQL Server DROP TRIGGER [3] (en inglés)
• Sentencia DB2 CREATE TRIGGER [4]
• Oracle CREATE TRIGGER [5]
• Trigger en PostgreSQL [6] (en inglés)
• Sedna XQuery Triggers [7]
Referencias
[1] http:/ / dev. mysql. com/ doc/ refman/ 5. 0/ es/ using-triggers. html
[2] http:/ / msdn. microsoft. com/ es-es/ library/ aa258254(en-us,SQL. 80). aspx
[3] http:/ / msdn. microsoft. com/ es-es/ library/ aa258846(en-us,SQL. 80). aspx
[4] http:/ / publib. boulder. ibm. com/ infocenter/ db2luw/ v9/ topic/ com. ibm. db2. udb. admin. doc/ doc/ r0000931. htm
[5] http:/ / download. oracle. com/ docs/ cd/ B19306_01/ server. 102/ b14200/ statements_7004. htm#sthref7885
[6] http:/ / www. postgresql. org/ docs/ 8. 2/ static/ triggers. html
[7] http:/ / www. modis. ispras. ru/ sedna/ progguide/ ProgGuidesu9. html#x15-520002. 6
Vista (base de datos) 31
SQL
El lenguaje de consulta estructurado o SQL (por sus siglas en inglés structured query language) es un lenguaje
declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en éstas.
Una de sus características es el manejo del álgebra y el cálculo relacional permitiendo efectuar consultas con el fin
de recuperar -de una forma sencilla- información de interés de una base de datos, así como también hacer cambios
sobre ella.
Orígenes y evolución
Los orígenes del SQL están ligados a las de las bases de datos relacionales. En 1970 E. F. Codd propone el modelo
relacional y asociado a éste un sublenguaje de acceso a los datos basado en el cálculo de predicados. Basándose en
estas ideas, los laboratorios de IBM definen el lenguaje SEQUEL (Structured English QUEry Language) que más
tarde sería ampliamente implementado por el sistema de gestión de bases de datos (SGBD) experimental System R,
desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera vez en 1979 en un
programa comercial.
El SEQUEL terminaría siendo el predecesor de SQL, siendo éste una versión evolucionada del primero. El SQL pasa
a ser el lenguaje por excelencia de los diversos sistemas de gestión de bases de datos relacionales surgidos en los
años siguientes y es por fin estandarizado en 1986 por el ANSI, dando lugar a la primera versión estándar de este
lenguaje, el "SQL-86" o "SQL1". Al año siguiente este estándar es también adoptado por la ISO.
Sin embargo, este primer estándar no cubre todas las necesidades de los desarrolladores e incluye funcionalidades de
definición de almacenamiento que se consideraron suprimir. Así que en 1992 se lanza un nuevo estándar ampliado y
revisado del SQL llamado "SQL-92" o "SQL2".
En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los SGBD comerciales. Y, aunque la
diversidad de añadidos particulares que incluyen las distintas implementaciones comerciales del lenguaje es amplia,
el soporte al estándar SQL-92 es general y muy amplio.
El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:
1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por ISO en 1987.
1999 SQL:1999 SQL2000 Se agregaron expresiones regulares, consultas recursivas (para relaciones jerárquicas), triggers y algunas
características orientadas a objetos.
2003 SQL:2003 Introduce algunas características de XML, cambios en las funciones, estandarización del objeto sequence y de las
[1]
columnas autonumericas. (Ver Eisenberg et al.: SQL:2003 Has Been Published .)
2006 SQL:2006 ISO/IEC 9075-14:2006 Define las maneras en las cuales el SQL se puede utilizar conjuntamente con XML. Define
maneras importar y guardar datos XML en una base de datos SQL, manipulándolos dentro de la base de datos y
publicando el XML y los datos SQL convencionales en forma XML. Además, proporciona facilidades que permiten
a las aplicaciones integrar dentro de su código SQL el uso de XQuery, lenguaje de consulta XML publicado por el
W3C (World Wide Web Consortium) para acceso concurrente a datos ordinarios SQL y documentos XML.
SQL 33
2008 SQL:2008 Permite el uso de la cláusula ORDER BY fuera de las definiciones de los cursores. Incluye los disparadores del tipo
INSTEAD OF. Añade la sentencia TRUNCATE. (Ver [2].)
Optimización
Como ya se dijo arriba, y suele ser común en los lenguajes de acceso a bases de datos de alto nivel, el SQL es un
lenguaje declarativo. O sea, que especifica qué es lo que se quiere y no cómo conseguirlo, por lo que una sentencia
no establece explícitamente un orden de ejecución.
El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia del SGBD, por lo que se
hace necesario que éste lleve a cabo una optimización antes de su ejecución. Muchas veces, el uso de índices acelera
una instrucción de consulta, pero ralentiza la actualización de los datos. Dependiendo del uso de la aplicación, se
priorizará el acceso indexado o una rápida actualización de la información. La optimización difiere sensiblemente en
cada motor de base de datos y depende de muchos factores.
Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difuso) que permite el acceso a bases de
datos difusas, usando la lógica difusa. Este lenguaje ha sido implementado a nivel experimental y está evolucionando
rápidamente.
CREATE
Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, índice, trigger, función,
procedimiento o cualquier otro objeto que el motor de la base de datos soporte.
--por Ejemplo:
DELETE FROM con_empleado WHERE id_empleado = 'ANY' (ids);
end;
$BODY$
LANGUAGE 'plpgsql';
ALTER
Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar
el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.
DROP
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger, función,
procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia
ALTER.
Ejemplo
ALTER TABLE ''TABLA_NOMBRE''
(
DROP COLUMN ''CAMPO_NOMBRE1''
)
TRUNCATE
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, es que si se quiere borrar
todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande. La desventaja es que
TRUNCATE sólo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula
WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en
realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta
ninguna transacción.
Ejemplo
TRUNCATE TABLE ''TABLA_NOMBRE1''
Definición
Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje
proporcionado por el sistema de gestión de base de datos que permite a los usuarios llevar a cabo las tareas de
consulta o manipulación de los datos, organizados por el modelo de datos adecuado.
El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una
base de datos relacional.
SQL 35
INSERT
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.
Forma básica
INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES
(''valor1'', [''valor2,...''])
Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor
por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las
restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y
se devuelve un error.
Ejemplo
INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto
Jeldrez', 4886850);
Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):
Formas avanzadas
Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2.
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas en la tabla 'agenda_telefonica'):
Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y
puede tener diferente rendimiento que la sentencia de inserción múltiple.
Para insertar varias filas en MS SQL puede utilizar esa construcción:
Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003), debido a
la cláusula subselect incompleta.
Para hacer lo mismo en Oracle se usa DUAL TABLE, siempre que se trate de solo una simple fila:
Una implementación conforme al estándar de esta lógica se muestra el siguiente ejemplo, o como se muestra arriba
(no aplica en Oracle):
SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
Una variación es necesaria cuando algunos de los datos de la tabla fuente se está insertando en la nueva tabla, pero
no todo el registro. (O cuando los esquemas de las tablas no son iguales.)
El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la
tabla donde los datos son insertados.
SQL 37
UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una
tabla.
Forma básica
UPDATE ''tabla''
SET ''columna1'' = ''valor1'' ,''columna2'' = ''valor2'',...
WHERE ''columnaN = ''valorN''
Ejemplo
UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';
DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla,
Forma básica
DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''
Ejemplo
DELETE FROM My_table WHERE field2 = 'N';
Recuperación de clave
Los diseñadores de base de datos que usan una clave suplente como la clave principal para cada tabla, se ejecutará en
el ocasional escenario en el que es necesario recuperar automáticamente la base de datos, generando una clave
primaria de una sentencia SQL INSERT para su uso en otras sentencias SQL. La mayoría de los sistemas no
permiten sentencias SQL INSERT para retornar fila de datos. Por lo tanto, se hace necesario aplicar una solución en
tales escenarios.
Implementaciones comunes incluyen:
• Utilizando un procedimiento almacenado especifico de base de datos que genera la clave suplente, realice la
operación INSERT, y finalmente devuelve la clave generada.
• Utilizando una sentencia SELECT específica de base de datos, sobre una tabla temporal que contiene la última
fila insertada. DB2 implementa esta característica de la siguiente manera:
SELECT *
FROM NEW TABLE ( INSERT INTO phone_book VALUES ( 'Cristobal
Jeldrez','0426.817.10.30' ) ) AS t
• Utilizando una sentencia SELECT después de la sentencia INSERT con función específica de base de datos, que
devuelve la clave primaria generada por el registro insertado más recientemente.
• Utilizando una combinación única de elementos del original SQL INSERT en una posterior sentencia SELECT.
• Utilizando un GUID en la sentencia SQL INSERT y la recupera en una sentencia SELECT.
• Utilizando la función de PHP mysql_insert_id() de MySQL después de la sentencia INSERT.
• Utilizando un INSERT con la cláusula RETURNING para Oracle, que sólo se puede utilizar dentro de un
PL/SQL bloque, en el caso de PostgreSQL se puede usar también tanto con SQL como con PL/SQL.
Disparadores
Los disparadores, también conocidos como desencadenantes (triggers en inglés) son definidos sobre la tabla en la
que opera la sentencia INSERT, los desencadenantes son evaluados en el contexto de la operación. Desencadenantes
BEFORE INSERT permiten la modificación de los valores que se insertará en la tabla. Desencadenantes AFTER
INSERT no puede modificar los datos de ahora en adelante, pero se puede utilizar para iniciar acciones en otras
tablas, por ejemplo para aplicar mecanismos de auditoría.
Véase también
• SQL injection
• FSQL
• AQL
• Modelo de base de datos
Referencias
[1] http:/ / www. acm. org/ sigmod/ record/ issues/ 0403/ index. html#standards
[2] http:/ / iablog. sybase. com/ paulley/ 2008/ 07/ sql2008-now-an-approved-iso-international-standard/
[3] http:/ / VoltDB
MySQL 39
MySQL
dsaMySQL
Información general
Género RDBMS
Escrito en C, C++
Licencia [2]
GPL o Uso comercial
En español ?
MySQL es un sistema de gestión de base de datos relacional, multihilo y multiusuario con más de seis millones de
instalaciones.[3] MySQL AB —desde enero de 2008 una subsidiaria de Sun Microsystems y ésta a su vez de Oracle
Corporation desde abril de 2009— desarrolla MySQL como software libre en un esquema de licenciamiento dual.
Por un lado se ofrece bajo la GNU GPL para cualquier uso compatible con esta licencia, pero para aquellas empresas
que quieran incorporarlo en productos privativos deben comprar a la empresa una licencia específica que les permita
este uso. Está desarrollado en su mayor parte en ANSI C.
Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pública y el copyright
del código está en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el
copyright de la mayor parte del código.
Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Además de la venta de licencias
privativas, la compañía ofrece soporte y servicios. Para sus operaciones contratan trabajadores alrededor del mundo
que colaboran vía Internet. MySQL AB fue fundado por David Axmark, Allan Larsson y Michael Widenius.
MySQL 40
Lenguajes de programación
Existen varias APIs que permiten, a aplicaciones escritas en diversos lenguajes de programación, acceder a las bases
de datos MySQL, incluyendo C, C++, C#, Pascal, Delphi (via dbExpress), Eiffel, Smalltalk, Java (con una
implementación nativa del driver de Java), Lisp, Perl, PHP, Python, Ruby,Gambas, REALbasic (Mac y Linux),
(x)Harbour (Eagle1), FreeBASIC, y Tcl; cada uno de estos utiliza una API específica. También existe una interfaz
ODBC, llamado MyODBC que permite a cualquier lenguaje de programación que soporte ODBC comunicarse con
las bases de datos MySQL. También se puede acceder desde el sistema SAP, lenguaje ABAP.
Aplicaciones
MySQL es muy utilizado en aplicaciones web, como Drupal o
phpBB, en plataformas
(Linux/Windows-Apache-MySQL-PHP/Perl/Python), y por
herramientas de seguimiento de errores como Bugzilla. Su
popularidad como aplicación web está muy ligada a PHP, que a
menudo aparece en combinación con MySQL. MySQL es una
base de datos muy rápida en la lectura cuando utiliza el motor no
transaccional MyISAM, pero puede provocar problemas de
integridad en entornos de alta concurrencia en la modificación. En Toma de pantalla programa de Monitoreo Mtop.
aplicaciones web hay baja concurrencia en la modificación de
datos y en cambio el entorno es intensivo en lectura de datos, lo que hace a MySQL ideal para este tipo de
aplicaciones. Sea cual sea el entorno en el que va a utilizar MySQL, es importante adelantar monitoreos sobre el
desempeño para detectar y corregir errores tanto de SQL como de programacion. [5]
MySQL 41
Versiones de MySQL
Especificaciones
Plataformas
MySQL funciona sobre múltiples plataformas, incluyendo:
• AIX
• BSD
• FreeBSD
• HP-UX
• GNU/Linux
• Mac OS X
• NetBSD
• Novell Netware
• OpenBSD
• OS/2 Warp
• QNX
• SGI IRIX
• Solaris
• SunOS
• SCO OpenServer
• SCO UnixWare
• Tru64
• eBD
• Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Vista, Windows 7 y Windows
Server (2000, 2003 y 2008).
• OpenVMS[12]
MySQL 42
Características adicionales
• Usa GNU Automake, Autoconf, y Libtool para portabilidad
• Uso de multihilos mediante hilos del kernel.
• Usa tablas en disco b-tree para búsquedas rápidas con compresión de índice
• Tablas hash en memoria temporales
• El código MySQL se prueba con Purify (un detector de memoria perdida comercial) así como con Valgrind, una
herramienta GPL
• Completo soporte para operadores y funciones en cláusulas select y where.
• Completo soporte para cláusulas group by y order by, soporte de funciones de agrupación
• Seguridad: ofrece un sistema de contraseñas y privilegios seguro mediante verificación basada en el host y el
tráfico de contraseñas está cifrado al conectarse a un servidor.
• Soporta gran cantidad de datos. MySQL Server tiene bases de datos de hasta 50 millones de registros.
• Se permiten hasta 64 índices por tabla (32 antes de MySQL 4.1.2). Cada índice puede consistir desde 1 hasta 16
columnas o partes de columnas. El máximo ancho de límite son 1000 bytes (500 antes de MySQL 4.1.2).
• Los clientes se conectan al servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas
Windows se pueden conectar usando named pipes y en sistemas Unix usando ficheros socket Unix.
• En MySQL 5.0, los clientes y servidores Windows se pueden conectar usando memoria compartida.
• MySQL contiene su propio paquete de pruebas de rendimiento proporcionado con el código fuente de la
distribución de MySQL.
MySQL 43
Mejoras futuras
El mapa de ruta de MySQL 5.1 [13] indica soporte para:
• Particionado de la base de datos.
• Backup en línea para todos los motores de almacenamiento.
• Replicación segura
• Restricciones a nivel de columna.
• Planificación de eventos.
• Funciones XML
MySQL 44
Características distintivas
Las siguientes características son implementadas únicamente por MySQL:
• Múltiples motores de almacenamiento (MyISAM, Merge, InnoDB, BDB, Memory/heap, MySQL Cluster,
Federated, Archive, CSV, Blackhole y Example en 5.x), permitiendo al usuario escoger la que sea más adecuada
para cada tabla de la base de datos.
• Agrupación de transacciones, reuniendo múltiples transacciones de varias conexiones para incrementar el número
de transacciones por segundo.
Industria relacionada
La industria radica en la venta de productos software y de algunos servicios relacionados a numerosas empresas que
utilizan estos productos.
MySQL AB clasifica los productos así:
• MySQL Enterprise: incluye MySQL Enterprise Server , Monitoreo de la red MySQL, servicios de consulta y
soporte de producción MySQL.
• MySQL Cluster
• MySQL Embedded Database.
• MySQL Drivers: para JDBC, ODBC y .Net
• MySQL Tools: MySQL Administrator, MySQL Query Browser, and the MySQL Migration Toolkit.
• MaxDB: MaxDB es una base de datos de código abierto certificada para SAP/R3.
Los ingresos de esta empresa por la venta de licencias privativas de sus productos y los servicios suma los U$12
millones.
MySQL en cifras
• Según las cifras del fabricante, existirían más de seis millones de copias de MySQL funcionando en la actualidad,
lo que supera la base instalada de cualquier otra herramienta de bases de datos.
• El tráfico del sitio web de MySQL AB superó en 2004 al del sitio de IBM.
Licencia
La licencia GNU GPL de MySQL obliga a que la distribución de cualquier producto derivado (aplicación) se haga
bajo esa misma licencia. Si un desarrollador desea incorporar MySQL en su producto pero desea distribuirlo bajo
otra licencia que no sea la GNU GPL, puede adquirir una licencia comercial de MySQL que le permite hacer
justamente eso.
Estado actual
La serie en desarrollo de MySQL Server actualmente, es la 5.1 a la cual se añaden nuevas características en relación
a la serie 5.0. La serie de producción actual de MySQL es 5.0, cuya penúltima versión estable es la 5.0.26 lanzada en
octubre de 2006. Actualmente, se puede descargar la serie 5.0.27. La serie de producción anterior fue la 4.1, cuya
versión estable es 4.1.7 lanzada en octubre de 2004. A estas versiones de producción sólo se arreglan problemas, es
decir, ya no se añaden nuevas características. Y a las versiones anteriores solamente se les corrigen bugs críticos.
MySQL 46
Usuarios destacados
Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías,
prensa diaria o páginas de Internet fidedignas.
[20]
Puedes añadirlas así o avisar al autor principal del artículo en su página de discusión pegando: {{subst:Aviso referencias|MySQL}}
~~~~
• Amazon.com
• Cox Communications - La cuarta televisión por cable más importante de EEUU, tienen más de 3.600 tablas y
aproximadamente dos millones de inserciones cada hora.
• Craigslist
• CNET Networks
• Digg - Sitio de noticias.
• Flickr, usa MySQL para gestionar millones de fotos y usuarios.
• Google - Para el motor de búsqueda de la aplicación AdWords.
• Joomla!, con millones de usuarios.
• phpBB, Uno de los más famosos sitios de foros, con miles de instalaciones y con millones de usuarios.
• LiveJournal - Cerca de 300 millones de páginas servidas cada día.[21]
• NASA
• NetQOS, usa MySQL para la gestión de algunas de las redes más grandes del mundo como las de Chevron,
American Express y Boeing.
• Nokia, usa un cluster MySQL para mantener información en tiempo real sobre usuarios de redes de móviles.
• Omniture
• Sabre, y su sistema de reserva de viajes Travelocity.
• Slashdot - con cerca de 50 millones de páginas servidas [22] cada día.
• Wikipedia, sirve más de 200 millones de consultas y 1,2 millones de actualizaciones cada día, con picos de
11.000 consultas por segundo.
• WordPress, con cientos de blogs alojados en él.
• Yahoo! - para muchas aplicaciones críticas.
Tools
• Database Master - MySQL Manager [23]
Referencias
[1] http:/ / www. mysql. com
[2] http:/ / www. mysql. com/ company/ legal/ licensing/ commercial-license. html
[3] MySQL :: Dispelling the Myths (http:/ / dev. mysql. com/ tech-resources/ articles/ dispelling-the-myths. html)
[4] MySQL 5.5 Manual: History of MySQL (http:/ / dev. mysql. com/ doc/ refman/ 5. 5/ en/ history. html)
[5] mtop: monitoreo de carga en MySQL (http:/ / tecnocacharrero. blogspot. com/ 2009/ 10/ mtop-monitoreo-de-carga-en-mysql. html)
[6] « B.3. Changes in Release 3.23.x (Lifecycle Support Ended) (http:/ / dev. mysql. com/ doc/ refman/ 4. 1/ en/ news-3-23-x. html)». Oracle.
Consultado el 24-08-2010.
[7] « B.2. Changes in Release 4.0.x (Lifecycle Support Ended) (http:/ / dev. mysql. com/ doc/ refman/ 4. 1/ en/ news-4-0-x. html)». Oracle.
Consultado el 24-08-2010.
[8] « B.1. Changes in Release 4.1.x (Lifecycle Support Ended) (http:/ / dev. mysql. com/ doc/ refman/ 4. 1/ en/ news-4-1-x. html)». Oracle.
Consultado el 24-08-2010.
[9] « C.1. Changes in Release 5.0.x (Production) (http:/ / dev. mysql. com/ doc/ refman/ 5. 0/ en/ news-5-0-x. html#news-5-0-x)». Oracle.
Consultado el 24-08-2010.
[10] « C.1. Changes in Release 5.1.x (Production) (http:/ / dev. mysql. com/ doc/ refman/ 5. 1/ en/ news-5-1-x. html#news-5-1-x)». Oracle.
Consultado el 24-08-2010.
MySQL 47
[11] « C.1. Changes in Release 5.5.x (Development) (http:/ / dev. mysql. com/ doc/ refman/ 5. 5/ en/ news-5-5-x. html#news-5-5-x)». Oracle.
Consultado el 24-08-2010.
[12] (http:/ / www. pi-net. dyndns. org/ anonymous/ kits/ )
[13] http:/ / dev. mysql. com/ doc/ refman/ 5. 1/ en/ roadmap. html
[14] http:/ / dev. MySQL. com/ doc/
[15] http:/ / dev. MySQL. com/ doc/ MySQL/ en/ News. html
[16] http:/ / bugs. MySQL. com/
[17] http:/ / lists. MySQL. com/
[18] http:/ / forums. MySQL. com
[19] http:/ / www. elpais. com/ articulo/ internet/ Oracle/ adquiere/ Sun/ Microsystems/ 5710/ millones/ elpeputec/ 20090420elpepunet_3/ Tes
[20] http:/ / en. wikipedia. org/ wiki/ Mysql?action=history
[21] Alexa Internet - Website Information (http:/ / www. alexa. com/ data/ details/ traffic_details?& compare_sites=& y=p& q=&
url=livejournal. com)
[22] http:/ / www. alexa. com/ data/ details/ traffic_details?& compare_sites=& y=p& q=& url=slashdot. org
[23] http:/ / www. nucleonsoftware. com
Véase también
• PostgreSQL Otra base de datos basada en software libre.
• PHP Lenguaje en web comúnmente usado con MySQL.
• Base de datos
• Bonsai cvs
• Appserv
• Firebird SQL (http://www.firebirdsql.org) sistema de administración de base de datos relacional de código
abierto y multiplataforma.
Enlaces externos
• Wikimedia Commons alberga contenido multimedia sobre MySQL. Commons
• Sitio web oficial de MySQL (http://www.mysql.com) (en inglés)
• MySQL Developer Zone (http://dev.mysql.com) (en inglés)
• Misqli (http://es.php.net/mysqli) - Extensión de MySQL para PHP (en inglés y otros idiomas)
• Benetl (http://www.benetl.net) - ETL utilizando MySQL (en inglés)
• Crear una base de datos MySQL (http://am-gc.blogspot.com/2010/07/crear-una-base-de-datos-mysql.html) -
Tutorial en el que se explica cómo crear una base de datos mediante MySQL Workbench.
Oracle 48
Oracle
Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías,
prensa diaria o páginas de Internet fidedignas.
[1]
Puedes añadirlas así o avisar al autor principal del artículo en su página de discusión pegando: {{subst:Aviso referencias|Oracle}}
~~~~
Oracle Database
Desarrollador
Oracle Corporation
[2]
www.oracle.com
Información general
Género RDBMS
Licencia Privativa
En español ?
Oracle es un sistema de gestión de base de datos relacional (o RDBMS por el acrónimo en inglés de Relational Data
Base Management System), desarrollado por Oracle Corporation.
Se considera a Oracle como uno de los sistemas de bases de datos más completos,[cita requerida] destacando:
• soporte de transacciones,
• estabilidad,
• escalabilidad y
• Soporte multiplataforma.
Su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco, recientemente sufre la
competencia del Microsoft SQL Server de Microsoft y de la oferta de otros RDBMS con licencia libre como
PostgreSQL, MySql o Firebird. Las últimas versiones de Oracle han sido certificadas para poder trabajar bajo
GNU/Linux.
Historia
Oracle surge en 1977 bajo el nombre de Software Development Laboratories (SDL), luego en 1979 SDL cambia su
nombre por Relational Software, Inc. (RSI). La fundación de Software Development Laboratories (SDL) fue
motivada principalmente a partir de un estudio sobre los .SGBD (Sistemas Gestores de Base de Datos) de George
Koch. Computer World definió este estudio como uno de los más completos jamás escritos sobre bases de datos.
Este artículo incluía una comparativa de productos que erigía a Relational Software como el más completo desde el
punto de vista técnico. Esto se debía a que usaba la filosofía de las bases de datos relacionales, algo que por aquella
época era todavía desconocido.
En la actualidad, Oracle (Nasdaq: ORCL) todavía encabeza la lista. La tecnología Oracle se encuentra prácticamente
en todas las industrias alrededor del mundo y en las oficinas de 98 de las 100 empresas Fortune 100. Oracle es la
primera compañía de software que desarrolla e implementa software para empresas 100 por ciento activado por
Internet a través de toda su línea de productos: base de datos, aplicaciones comerciales y herramientas de desarrollo
Oracle 49
de aplicaciones y soporte de decisiones. Oracle es el proveedor mundial líder de software para administración de
información, y la segunda empresa de software.
Oracle a partir de la versión 10g Release 2, cuenta con 6 ediciones:
• Oracle Database Enterprise Edition (EE).
• Oracle Database Standard Edition (SE).
• Oracle Database Standard Edition One (SE1).
• Oracle Database Express Edition (XE).
• Oracle Database Personal Edition (PE).
• Oracle Database Lite Edition (LE).
La única edición gratuita es la Express Edition, que es compatible con las demás ediciones de Oracle Database
10gR2 y Oracle Database 11g. Recientemente la empresa oracle adquirio a Sun microsystems
Enlaces externos
• Wikimedia Commons alberga contenido multimedia sobre Oracle. Commons
• Oracle Corporation [3] (inglés)
• Oracle España [4]
• Documentacion y Tips Oracle en español [5]
• Comunidad de profesionales Oracle hispanoparlantes [6]
• Wiki con Documentación en Castellano De Oracle [7]
• Todo sobre Oracle RAC [8] (español)
• Documentación en Castellano para Administrar Oracle 9i/10g [9]
Referencias
[1] http:/ / en. wikipedia. org/ wiki/ Oracle?action=history
[2] http:/ / www. oracle. com/
[3] http:/ / www. oracle. com
[4] http:/ / www. oracle. com/ global/ es
[5] http:/ / www. zonaoracle. com
[6] http:/ / comunidadoraclehispana. ning. com
[7] http:/ / www. wikioracle. es
[8] http:/ / oracleracnotes. wordpress. com
[9] http:/ / cursos. atica. um. es/ cursosdba/ dba10g1. php
PostgreSQL 50
PostgreSQL
PostgreSQL
Desarrollador
Información general
Género RDBMS
Licencia BSD
En español
PostgreSQL es un sistema de gestión de base de datos relacional orientada a objetos y libre, publicado bajo la
licencia BSD.
Como muchos otros proyectos de código abierto, el desarrollo de PostgreSQL no es manejado por una empresa y/o
persona, sino que es dirigido por una comunidad de desarrolladores que trabajan de forma desinteresada, altruista,
libre y/o apoyados por organizaciones comerciales. Dicha comunidad es denominada el PGDG (PostgreSQL Global
Development Group).
Historia
PostgreSQL ha tenido una larga evolución, la cual se inicia en 1982 con el proyecto Ingres en la Universidad de
Berkeley. Este proyecto, liderado por Michael Stonebraker, fue uno de los primeros intentos en implementar un
motor de base de datos relacional. Después de haber trabajado un largo tiempo en Ingres y de haber tenido una
experiencia comercial con él mismo, Michael decidió volver a la Universidad en 1985 para trabajar en un nuevo
proyecto sobre la experiencia de Ingres, dicho proyecto fue llamado post-ingres o simplemente POSTGRES.
El proyecto post-ingres pretendía resolver los problemas con el modelo de base de datos relacional que habían sido
aclarados a comienzos de los años 1980. El principal de estos problemas era la incapacidad del modelo relacional de
comprender "tipos", es decir, combinaciones de datos simples que conforman una única unidad. Actualmente estos
son llamados objetos. Se esforzaron en introducir la menor cantidad posible de funcionalidades para completar el
soporte de tipos. Estas funcionalidades incluían la habilidad de definir tipos, pero también la habilidad de describir
relaciones - las cuales hasta ese momento eran ampliamente utilizadas pero mantenidas completamente por el
usuario. En Postgres la base de datos «comprendía» las relaciones y podía obtener información de tablas relacionadas
utilizando reglas. Postgres usó muchas ideas de Ingres pero no su código.
La siguiente lista muestra los hitos más importantes en la vida del proyecto Postgres.
• 1986: se publicaron varios papers que describían las bases del sistema.
• 1988: ya se contaba con una versión utilizable.
• 1989: el grupo publicaba la versión 1 para una pequeña comunidad de usuarios.
• 1990: se publicaba la versión 2 la cual tenía prácticamente reescrito el sistema de reglas.
• 1991: publicación de la versión 3, esta añadía la capacidad de múltiples motores de almacenamiento.
• 1993: crecimiento importante de la comunidad de usuarios, la cual demandaba más características.
• 1994: después de la publicación de la versión 4, el proyecto terminó y el grupo se disolvió.
Después de que el proyecto POSTGRES terminara, dos graduados de la universidad, Andrew Yu y Jolly Chen,
comenzaron a trabajar sobre el código de POSTGRES, esto fue posible dado que POSTGRES estaba licenciado bajo
la BSD, y lo primero que hicieron fue añadir soporte para el lenguaje SQL a POSTGRES, dado que anteriormente
contaba con un intérprete del lenguaje de consultas QUEL (basado en Ingres), creando así el sistema al cual
denominaron Postgres95.
Para el año 1996 se unieron al proyecto personas ajenas a la Universidad como Marc Fournier de Hub.Org
Networking Services, Bruce Momjian y Vadim B. Mikheev quienes proporcionaron el primer servidor de desarrollo
no universitario para el esfuerzo de desarrollo de código abierto y comenzaron a trabajar para estabilizar el código de
Postgres95.
En el año 1996 decidieron cambiar el nombre de Postgres95 de tal modo que refleje la característica del lenguaje
SQL y lo terminaron llamando PostgreSQL, cuya primera versión de código abierto fue lanzada el 1 de agosto de
1996. La primera versión formal de PostgreSQL (6.0) fue liberada en enero de 1997. Desde entonces, muchos
desarrolladores entusiastas de los motores de base de datos se unieron al proyecto, coordinaron vía Internet y entre
todos comenzaron a incorporar muchas características al motor.
Aunque la licencia permitía la comercialización de PostgreSQL, el código no se desarrolló en principio con fines
comerciales, algo sorprendente considerando las ventajas que PostgreSQL ofrecía. La principal derivación se originó
cuando Paula Hawthtorn (un miembro del equipo original de Ingres que se pasó a Postgres) y Michael Stonebraker
conformaron Illustra Information Technologies para comercializar Postgres.
En 2000, ex inversionistas de Red Hat crearon la empresa Great Bridge para comercializar PostgreSQL y competir
contra proveedores comerciales de bases de datos. Great Bridge auspició a varios desarrolladores de PostgreSQL y
donó recursos de vuelta a la comunidad, pero a fines de 2001 cerró debido a la dura competencia de compañías como
Red Hat y pobres condiciones del mercado.
PostgreSQL 52
En 2001, Command Prompt, Inc. lanzó Mammonth PostgreSQL, la más antigua distribución comercial de
PostgreSQL. Continúa brindando soporte a la comunidad PostgreSQL a través del auspicio de desarrolladores y
proyectos, incluyendo PL/Perl, PL/php y el alojamiento de proyectos de comunidades como PostgreSQL Build
Farm.
En enero de 2005, PostgreSQL recibió apoyo del proveedor de base de datos Pervasive Software, conocido por su
producto Btrieve que se utilizaba en la plataforma Novell Netware. Pervasive anunció soporte comercial y
participación comunitaria y logró algo de éxito. Sin embargo, en julio de 2006 dejó el mercado de soporte de
PostgreSQL.
A mediados de 2005 otras dos compañías anunciaron planes para comercializar PostgreSQL con énfasis en nichos
separados de mercados. EnterpriseDB añadió funcionalidades que le permitían a las aplicaciones escritas para
trabajar con Oracle ser más fáciles de ejecutar con PostgreSQL. Greenplum contribuyó mejoras directamente
orientadas a aplicaciones de Data Warehouse e Inteligencia de negocios, incluyendo el proyecto BizGres.
En octubre de 2005, John Loiacono, vicepresidente ejecutivo de software en Sun Microsystems comentó: "No
estamos yendo tras el OEM de Microsoft pero estamos viendo a PostgreSQL ahora", aunque no se dieron
especificaciones en ese momento. Para noviembre de 2005, Sun Solaris 10 (lanzamiento 6/06) incluía PostgreSQL.
En agosto de 2007 EnterpriseDB anunció el Postgres Resource Center y EnterpriseDB Postgres, diseñados para ser
una completamente configurada distribución de PostgreSQL incluyendo muchos módulos contribuidos y agregados.
EnterpriseDB Postgres fue renombrado Postgres Plus en marzo de 2008.
El proyecto PostgreSQL continúa haciendo lanzamientos principales anualmente y lanzamientos menores de
reparación de bugs, todos disponibles bajo la licencia BSD, y basados en contribuciones de proveedores comerciales,
empresas aportantes y programadores de código abierto mayormente.
Características
Algunas de sus principales características son, entre otras:
Alta concurrencia
Mediante un sistema denominado MVCC (Acceso concurrente multiversión, por sus siglas en inglés) PostgreSQL
permite que mientras un proceso escribe en una tabla, otros accedan a la misma tabla sin necesidad de bloqueos.
Cada usuario obtiene una visión consistente de lo último a lo que se le hizo commit. Esta estrategia es superior al uso
de bloqueos por tabla o por filas común en otras bases, eliminando la necesidad del uso de bloqueos explícitos.
Otras características
• Claves ajenas también denominadas Llaves ajenas o Claves Foráneas (foreign keys).
• Disparadores (triggers): Un disparador o trigger se define como una acción específica que se realiza de acuerdo a
un evento, cuando éste ocurra dentro de la base de datos. En PostgreSQL esto significa la ejecución de un
procedimiento almacenado basado en una determinada acción sobre una tabla específica. Ahora todos los
disparadores se definen por seis características:
• El nombre del disparador o trigger
• El momento en que el disparador debe arrancar
• El evento del disparador deberá activarse sobre...
• La tabla donde el disparador se activará
• La frecuencia de la ejecución
• La función que podría ser llamada
Entonces combinando estas seis características, PostgreSQL le permitirá crear una amplia funcionalidad a través de
su sistema de activación de disparadores (triggers).
• Vistas.
• Integridad transaccional.
• Herencia de tablas.
• Tipos de datos y operaciones geométricas.
• Soporte para transacciones distribuidas. Permite a PostgreSQL integrase en un sistema distribuido formado por
varios recursos (p.ej, una base de datos PostgreSQL, otra Oracle, una cola de mensajes IBM MQ JMS y un ERP
SAP) gestionado por un servidor de aplicaciones donde el éxito ("commit") de la transacción goblal es el
resultado del éxito de las transacciones locales. Más información en inglés en http://www.theserverside.com/
discussions/thread.tss?thread_id=21385#95297 y en http://java.sun.com/javaee/technologies/jta/index.jsp.
Funciones
Bloques de código que se ejecutan en el servidor. Pueden ser escritos en varios lenguajes, con la potencia que cada
uno de ellos da, desde las operaciones básicas de programación, tales como bifurcaciones y bucles, hasta las
complejidades de la programación orientada a objetos o la programación funcional.
Los disparadores (triggers en inglés) son funciones enlazadas a operaciones sobre los datos.
Algunos de los lenguajes que se pueden usar son los siguientes:
• Un lenguaje propio llamado PL/PgSQL (similar al PL/SQL de oracle).
• C.
• C++.
• Java PL/Java web [2].
• PL/Perl.
• plPHP [3].
• PL/Python [4].
• PL/Ruby [5].
• PL/sh [6].
• PL/Tcl [7].
• PL/Scheme [8].
• Lenguaje para aplicaciones estadísticas R por medio de PL/R [9].
PostgreSQL soporta funciones que retornan "filas", donde la salida puede tratarse como un conjunto de valores que
pueden ser tratados igual a una fila retornada por una consulta (query en inglés).
PostgreSQL 54
Las funciones pueden ser definidas para ejecutarse con los derechos del usuario ejecutor o con los derechos de un
usuario previamente definido. El concepto de funciones, en otros DBMS, son muchas veces referidas como
"procedimientos almacenados" (stored procedures en inglés).
Alternativas Comerciales
Gracias a su licencia BSD, se permite la utilización del código para ser comercializado. Uno de los casos ejemplo es
la de Enterprise DB (Postgresql Plus), la cual incluye varios agregados y una interfaz de desarrollo basada en Java.
Entre otras empresas que utilizan Postgresql para comercializar se encuentra CyberTech (alemania), con su producto
CyberCluster.
GIS
PostGIS
Extensión que añade soporte de objetos geográficos a PostgreSQL y permite realizar análisis mediante
consultas SQL espaciales o mediante conexión a aplicaciones GIS (Sistema de Información Geográfica).
Replicación
PgCluster
Replicación multi maestro.
Slony-I
Replicación maestro esclavo.
PyReplica
Replicación maestro esclavo y multi maestro asincrónica.
Herramientas de administración
PgAdmin3
Entorno de escritorio visual.
PgAccess
Entorno de escritorio visual.
PhpPgAdmin
Entorno web.
psql
Cliente de consola.
Database Master [23]
Entorno de escritorio visual.
PostgreSQL 55
Búsqueda de texto
Full text search
Incluido en el núcleo a partir de la versión 8.3.
Via Tsearch2 [10] y OpenFTS para versiones anteriores a la 8.3.
XML
XML/XSLT soporte
Via XPath extensiones en la sección contrib [11].
Usuarios destacados
• .org, .info, .mobi y .aero registros de dominios por Afilias.[12]
• La American Chemical Society.
• BASF.
• IMDb.
• Skype.
• TiVo.
• Penny Arcade.
• Sony Online.[13]
• U.S. Departamento de Trabajo.
• USPS.
• VeriSign.
• Pictiger.com
• Wisconsin Circuit Court Access con 6 * 180GB DBs replicados en tiempo real.
• OpenACS y .LRN.
• INEGI.
Premios
PostgreSQL ha recibido los siguientes reconocimientos:[14]
• 1999 LinuxWorld Editor's Choice Award for Best Database
• 2000 Linux Journal Editors' Choice Awards for Best Database
• 2002 Linux New Media Editors Choice Award for Best Database
• 2003 Linux Journal Editors' Choice Awards for Best Database
• 2004 Linux New Media Award For Best Database
• 2004 Linux Journal Editors' Choice Awards for Best Database
• 2004 ArsTechnica Best Server Application Award
• 2005 Linux Journal Editors' Choice Awards for Best Database
• 2006 Linux Journal Editors' Choice Awards for Best Database
• 2008 Developer.com Product of the Year, Database Tool
PostgreSQL 56
Referencias
[1] http:/ / www. postgresql. org/
[2] http:/ / gborg. postgresql. org/ project/ pljava/ projdisplay. php
[3] http:/ / plphp. commandprompt. com/
[4] http:/ / www. postgresql. org/ docs/ current/ interactive/ plpython. html
[5] http:/ / raa. ruby-lang. org/ project/ pl-ruby
[6] http:/ / plsh. projects. postgresql. org/
[7] http:/ / www. postgresql. org/ docs/ current/ interactive/ pltcl. html
[8] http:/ / plscheme. projects. postgresql. org/
[9] http:/ / www. joeconway. com/ plr/
[10] http:/ / www. sai. msu. su/ ~megera/ postgres/ gist/ tsearch/ V2/
[11] http:/ / www. throwingbeans. org/ postgresql_and_xml. html
[12] PostgreSQL affiliates.ORG domain (http:/ / www. computerworld. com. au/ index. php?id=760310963)
[13] Sony Online opts for open-source database over Oracle (http:/ / www. computerworld. com/ databasetopics/ data/ software/ story/
0,10801,109722,00. html)
[14] « PostgreSQL, Award Winning Software (http:/ / www. postgresql. org/ about/ awards)». postgresql.org (19-01-2008). Consultado el
31-01-2008.
Enlaces externos
• Wikimedia Commons alberga contenido multimedia sobre PostgreSQL. Commons
• Asistencia técnica profesional para PostgreSQL (http://www.postgresql.org/support/professional_support)
• Sitio web oficial de PostgreSQL (http://www.postgresql.org)
• Guía de administración básica de PostgreSQL bajo Linux (http://wiki.woop.es/PostgreSQL)
• Base de datos basada en PostgreSQL (http://www.pervasivepostgres.com/)
• PostgreSQL-es.org (http://www.postgresql-es.org/) - Portal en español sobre PostgreSQL
• Comunidad de usuarios y sitio de PostgreSQL de Argentina (http://www.arpug.com.ar)
• Comunidad de usuarios y sitio de PostgreSQL de Perú (http://www.postgresql.org.pe/)
• Comunidad de usuarios de PostgreSQL de Chile (http://www.postgresql.cl/)
• Cliente escrito en PHP (http://phppgadmin.sourceforge.net/)
Firebird 57
Firebird
Para el navegador Mozilla Firebird, vea Mozilla Firefox
Firebird
Logo de Firebird
Desarrollador
[1]
Firebird Project
[2]
www.firebirdsql.org
Información general
Género RDBMS
En español
Firebird es un sistema de administración de base de datos relacional (o RDBMS) (Lenguaje consultas: SQL) de
código abierto, basado en la versión 6 de Interbase, cuyo código fue liberado por Borland en 2000. Su código fue
reescrito de C a C++. El proyecto se desarrolla activamente, el 18 de abril de 2008 fue liberada la versión 2.1 y el 26
de diciembre de 2009 fue liberada la versión 2.5.0 RC1.
FirebirdSQL Fundation
Los objetivos de la Fundación FirebirdSQL son:
• Apoyar y lograr el avance del manejador de base de datos relacional Firebird
• Proveer los mecanismos e infraestructura no comerciales para aceptar y administrar los fondos recaudados, e
invertir tales fondos para promover el esfuerzo del desarrollo de esta base de datos
• Fomentar la cooperación y la afiliación de individuos, organizaciones sin fines de lucro y compañías
comerciales involucradas o que estén planeando estar involucradas en el desarrollo, apoyo y promoción de los
proyectos de software de Firebird y sus productos y actividades asociadas.
Historia
A finales de la década de 1990, Borland decidió liberar el código de Interbase. Diversos integrantes de la plantilla
crearon una nueva empresa denominada IBPhoenix, y junto a otros desarrolladores independientes, crearon el fork
ahora conocido como Firebird. Más tarde, Borland decidiría volver a privatizar Interbase y comercializar sus
licencias. Sin embargo, Firebird sigue siendo un proyecto de código abierto bajo una licencia similar a la MPL
(Mozilla Public License).
Firebird 58
Características
• Es multiplataforma, y actualmente puede ejecutarse en los sistemas operativos: Linux, HP-UX, FreeBSD, Mac
OS, Solaris y Microsoft Windows.
• Ejecutable pequeño, con requerimientos de hardware bajos.
• Arquitectura Cliente/Servidor sobre protocolo TCP/IP y otros (embedded).
• Soporte de transacciones ACID y claves foráneas.
• Es medianamente escalable.
• Buena seguridad basada en usuarios/roles.
• Diferentes arquitecturas, entre ellas el Servidor Embebido[5] (embedded server) que permite ejecutar aplicaciones
monousuario en ordenadores sin instalar el software Firebird.
• Bases de datos de sólo lectura, para aplicaciones que corran desde dispositivos sin capacidad de escritura, como
cd-roms.
• Existencia de controladores ODBC, OLEDB, JDBC, PHP, Perl, .net, etc.
• Requisitos de administración bajos, siendo considerada como una base de datos libre de mantenimiento, al
margen de la realización de copias de seguridad.
• Pleno soporte del estándar SQL-92, tanto de sintaxis como de tipos de datos.
• Completo lenguaje para la escritura de disparadores y procedimientos almacenados denominado PSQL.
• Capacidad de almacenar elementos BLOB (Binary Large OBjects).
• Soporte de User-Defined Functions (UDFs).
• Versión autoejecutable, sin instalación, excelente para la creación de catálogos en CD-Rom y para crear versiones
de evaluación de algunas aplicaciones.
Tipos de servidor
Existen dos tipos de servidor Firebird para ser instalados: Classic y Super server. Si bien tienen varias diferencias
menores entre sí, la principal consiste en que el super server maneja hilos de ejecución individuales para cada
conexión. Por lo tanto para un número reducido de conexiones el recomendado sería el classic porque consumirá
menor cantidad de recursos.
En caso de arquitecturas SMP, se debe utilizar el servidor classic porque el Supersever no tiene soporte para este
tipo de arquitectura.
Los propios desarrolladores de Firebird recomiendan lo siguiente a la hora de decidirse por uno de estos servidores:
• En plataformas Windows seleccionar el Superserver.
• En Linux simplemente elegir cualquiera, según las conexiones estimadas. En la mayoría de las situaciones no
se notará diferencias en la ejecución.
Podría considerarse un tercer tipo, el Embedded. Éste consiste en una única bibliotéca de enlace dinámico DLL (de
unos 2 MB de tamaño) que contiene todo el servidor. De esta forma se puede tener un DBMS completo disponible y
distribuíble junto con aplicaciones de usuario sin requerir que este se instale por separado.
Metas
Debido a que el proyecto original no aprovecha adecuadamente las máquinas con varios procesadores o SMP, se
espera que después de la estabilización de la versión 2 se integre con el proyecto Vulcan (un brazo de desarrollo
nacido de firebird), añadiendo soporte para esta característica, lanzando así la versión de Firebird 3.0.
Véase también
• Portal:Software libre. Contenido relacionado con Software libre.
• Vulcan
Referéncias
[1] http:/ / www. firebirdsql. org
[2] http:/ / www. firebirdsql. org/
[3] http:/ / www. firebirdsql. org/ index. php?op=doc& id=ipl
[4] http:/ / www. firebirdsql. org/ index. php?op=doc& id=idpl
[5] La palabra embebido se utiliza en este caso para denotar que un servidor está encapsulado, vea la cuarta acepción de la definición que nos da
la Real Academia Española de la Lengua del verbo embeber: http:/ / buscon. rae. es/ draeI/ SrvltConsulta?TIPO_BUS=3& LEMA=embeber
Tools
• Database Master - FireBird Management Software (http://www.nucleonsoftware.com)
Enlaces externos
• Página web oficial (http://www.firebirdsql.org/)
• FirebirdSQL Foundation (http://www.firebirdsql.org/index.php?op=ffoundation&id=main_es)
• Página no oficial en español (http://www.firebird.com.mx)
• Página no oficial en inglés (http://www.ibphoenix.com)
• Foro de firebird del clubdelphi (http://www.clubdelphi.com/foros/forumdisplay.php?f=19) en español
• Sitio Chileno dedicado a Firebird (http://www.firebird.cl) en español- Chile(.cl)
• Cómo instalar firebird exitosamente en debian (http://jachguate.wordpress.com/2007/12/07/
instalar-firebird-debian/)
• Sitio con artículos sobre Firebird (En español) (http://jhonny.clubdelphi.com/category/firebird/)
• Manual de Firebird (en español): (http://infoback.com.ar/buhardilla/firebird/firebird.htm) Manual bastante
completo acerca de Firebird en la lengua de Cervantes.
• Revista Síntesis (En español): (http://www.grupoalbor.com/foro/index.php/board,16.0.html) Enlace a los 20
números de la revista Síntesis (desde Feb-2001 a Jun-2006). Contienen muchos artículos acerca de programación
y manejo de bases de datos. Los números 2, 3, 4, 5, 7, 8, 9, 10, 11, 13, 14, 17 y 18 contienen artículos
relacionados, directa o indirectamente, con Interbase (hermana gemela de Firebird) que supuestamente pueden ser
aplicables casi al 100% a Firebird. También en los números 3, 4, 5, 7, 8, 17 y 18 hablan de técnicas para utilizar el
entorno de programación Delphi con Interbase.
• La potencia de los ClientDataSet (En español): (http://delphiallimite.blogspot.com/search/label/componentes)
5 artículos sobre la programación de los componentes IBX de Delphi para acceder a Firebird. También incluye
otros artículos sobre Delphi.
• Conoce Firebird en 2 minutos (En español): (http://www.firebirdnews.org/docs/fb2min_es.html) Información
sobre Firebird y muchos enlaces que simplifican mucho la búsqueda de información, utilidades, manuales, etc.
Parte de los enlaces son a páginas web en inglés.
• Página web con interesantes tutoriales avanzados, en formato pdf (http://www.intitec.com/documentos.htm)
Microsoft SQL Server 60
Desarrollador
Microsoft
[1]
www.microsoft.com/sql/
Información general
Género RDBMS
En español ?
Microsoft SQL Server es un sistema para la gestión de bases de datos producido por Microsoft basado en el modelo
relacional. Sus lenguajes para consultas son T-SQL y ANSI SQL. Microsoft SQL Server constituye la alternativa
de Microsoft a otros potentes sistemas gestores de bases de datos como son Oracle o PostgreSQL o MySQL.
Historia de versiones
Versión Año Nombre de la versión Nombre clave
• Soporte de transacciones.
• Escalabilidad, estabilidad y seguridad.
• Soporta procedimientos almacenados.
Microsoft SQL Server 61
• Incluye también un potente entorno gráfico de administración, que permite el uso de comandos DDL y DML
gráficamente.
• Permite trabajar en modo cliente-servidor, donde la información y datos se alojan en el servidor y los terminales o
clientes de la red sólo acceden a la información.
• Además permite administrar información de otros servidores de datos.
Este sistema incluye una versión reducida, llamada MSDE con el mismo motor de base de datos pero orientado a
proyectos más pequeños, que en sus versiónes 2005 y 2008 pasa a ser el SQL Express Edition, que se distribuye en
forma gratuita.
Es común desarrollar completos proyectos complementando Microsoft SQL Server y Microsoft Access a través de
los llamados ADP (Access Data Project). De esta forma se completa la base de datos (Microsoft SQL Server), con el
entorno de desarrollo (VBA Access), a través de la implementación de aplicaciones de dos capas mediante el uso de
formularios Windows.
En el manejo de SQL mediante líneas de comando se utiliza el SQLCMD
Para el desarrollo de aplicaciones más complejas (tres o más capas), Microsoft SQL Server incluye interfaces de
acceso para varias plataformas de desarrollo, entre ellas .NET, pero el servidor sólo está disponible para Sistemas
Operativos Windows.
Programación
T-SQL
T-SQL (Transact-SQL) es el principal medio de programación y administración de SQL Server. Expone las palabras
clave para las operaciones que pueden realizarse en SQL Server, incluyendo creación y modificación de esquemas de
la base de datos, introducir y editar datos en la base de datos, así como supervisión y gestión del propio servidor. Las
aplicaciones cliente, ya sea que consuman datos o administren el servidor, aprovechan la funcionalidad de SQL
Server mediante el envío de consultas de T-SQL y declaraciones que son procesadas por el servidor y los resultados
(o errores) regresan a la aplicación cliente. SQL Server permite que sean administrados mediante T-SQL. Para esto,
expone tablas de sólo lectura con estadísticas del servidor. La funcionalidad para la administración se expone a
través de procedimientos almacenados definidos por el sistema que se pueden invocar desde las consultas de T-SQL
para realizar la operación de administración. También es posible crear servidores vinculados (Linked Servers)
mediante T-SQL. Los servidores vinculados permiten el funcionamiento entre múltiples servidores con una
consulta..
Microsoft SQL Server 62
Desventajas
• MSSQL usa Address Windowing Extensión (AWE) para hacer el direccionamiento de 64-bit. Esto le impide usar
la administración dinámica de memoria y sólo le permite alojar un máximo de 64GB de memoria compartida.
• MSSQL no maneja compresión de datos (en SQL Server 2005 y 2000, solamente la versión 2008 Enterprise
Edition incluye esta característica), por lo que ocupa mucho espacio en disco.
• MSSQL está atado a la plataforma del sistema operativo sobre la cual se instala.
Véase también
• base de datos relacional
• sistema de gestión de base de datos
• Oracle
• Sybase ASE
• PostgreSQL
• Interbase
• Firebird
• MySQL
Enlaces externos
• Página web de Microsoft SQL Server [2]
• Factsheet for SQL Server developers [3] (PDF)
• Libros en pantalla [4]
• Lo nuevo de SQL Server 2008 [5]
• La revista de base de datos database journal (en inglés) [6]
• Sistema para crear aplicaciones profesionales con MS SQL SERVER. [7]
Microsoft SQL Server 63
Referencias
[1] http:/ / www. microsoft. com/ sql/
[2] http:/ / www. microsoft. com/ spain/ sql/ default. mspx
[3] http:/ / www. dotnet4all. com/ snippets/ 2008/ 04/ factsheet-for-sql-server-developers. html
[4] http:/ / msdn. microsoft. com/ en-us/ library/ ms130214. aspx
[5] http:/ / elpaladintecnologico. blogspot. com/ 2009/ 02/ blog-post. html
[6] http:/ / www. databasejournal. com/ features/ article. php/ 3593466/ MS-SQL-Series. htm
[7] http:/ / www. softclarity. com. ar/ Builder/ indexFla. html
InterBase
Interbase es un Sistema de Administración y gestion de Base de Datos Relacionales (RDBMS) desarrollado y
comercializado por la compañía Borland Software Corporation y actualmente desarrollado por su ex-filial CodeGear.
Interbase se destaca de otros DBMS's por su bajo consumo de recursos, su casi nula necesidad de administración y
su arquitectura multi-generacional. InterBase corre en plataformas Linux, Microsoft Windows y Solaris.
Tecnología
Interbase es un RDBMS que acepta el estándar SQL-92 y soporta varias interfaces de acceso como JDBC, ODBC y
ADO.NET. Sin embargo, ciertas características técnicas lo distinguen de otros productos.
Administración mínima
Los servidores Interbase normalmente no requieren de administradores a tiempo completo.
Arquitectura multi-generacional
Control de concurrencia
Considere una simple aplicación bancaria en la que dos usuarios tienen acceso al dinero depositado en una cuenta
dada. Juan lee la cuenta y encuentra que hay depositado en ella 1000 dólares, entonces saca 500 para él. Pedro lee la
misma cuenta antes de que Juan la haya cambiado, él ve 1000 dólares, y saca 800 para su uso. Está de más decir que
cualquier sistema de base de datos que permita el acceso a múltiples usuarios, necesita algún tipo de sistema que
solucione este tipo de problemas.
Las técnicas usadas para resolver este y otros problemas por el estilo son conocidos en la industria de las bases de
datos como control de concurrencia.
Los productos tradicionales utilizan trancas las cuales conocen cuando una transacción en particular va a modificar
un registro dado. Una vez que se establece una tranca, ninguna otra transacción puede leer o modificar el dato hasta
que se quite la tranca. La tranca puede bloquear un registro, una página (un conjunto de registros almacenados juntos
en un mismo disco) de registros, o incluso todos los registros que necesite una transacción dada, dependiendo en la
granularidad de la tranca elegida. La granularidad de una tranca se maneja entre un buen desempeño y la precisión
(bloqueando toda una página de que sea actualizada, puede llevar a que se bloqueen algunos registros que otras
transacciones querían actualizar y que sin embargo no van a ser utilizados por la transacción que bloqueó la página,
InterBase 64
pero el desempeño será mucho mejor al logrado con trancas al nivel de registros).
Las trancas se transforman en un problema mayor cuando se combinan con otra característica común a todos los
sistemas, el aislamiento de transacciones. Esto ocurre debido a que las transacciones normalmente realizan tanto
lectura como escritura (en este ejemplo, para leer el valor de la cuenta y luego cambiarlo. Para poder mostrar una
vista aislada de los datos, toda la transacción, incluyendo los registros leídos pero nunca escritos, debe ser trancada
en muchos servidores de base de datos).
Recuperación
Interbase también utiliza su arquitectura multi-generacional para implementar la recuperación frente a fallas
(rollback). La mayoría de los DBMS's utilizan logs para realizar esta operación, lo que puede tomar mucho tiempo e
incluso necesitar de intervención manual. En cambio, la recuperación en Interbase es casi instantánea y nunca falla.
Desventajas
Ciertas operaciones son más difíciles de implementar en una arquitectura multi-generacional, y por lo tanto se
ejecutan más lentas en comparación a otros implementaciones tradicionales. Un ejemplo es la operación de SQL
COUNT. Aún cuando este disponible un indicie de la/las columnas incluidas en el COUNT, todos los registros
deben ser visitados para comprobar si son visibles para la transacción en ejecución.
Historia
Comienzos
Jim Starkey trabajaba en DEC en su producto “Datatrive network database” cuando tuvo la idea de un sistema que
manejara cambios hechos concurrentemente por varios usuarios. La idea simplificaba dramáticamente los problemas
existentes del control de concurrencia utilizando trancas (locking), los cuales representaban un serio problema para
los nuevos sistemas de base de datos relacionales que se estaban desarrollando en ese momento. Entonces comenzó a
trabajar en el sistema en DEC, pero en ese momento DEC comenzaba el desarrollo de una base de datos relacional
que resultó en el producto Rdb/VMS. Cuando se enteraron de su proyecto se desató un gran problema, y Starkey
eventualmente decidió desistir.
Starkey se enteró que el proveedor de plataformas locales Apollo Computer buscaba un base de datos para sus
máquinas Unix, y accedían a solventar su desarrollo. Con su apoyo, Starkey formó Groton Database Systems
(Groton, Massachusetts era el lugar donde se encontraban) en 1984 y comenzó a trabajar en lo que eventualmente
sería lanzado como Interbase en 1986. Apollo sufrió un inconveniente corporativo y decidió dejar el negocio del
software, pero en ese tiempo el producto ya estaba generando dinero.
Código libre
A principios del año 2000, la compañía Borland anunció que el código de Interbase sería liberado (código libre) en la
versión 6.0 y comenzó las negociaciones para que una empresa separada se encargara del nuevo producto. Cuando
los responsables de esta nueva empresa y Borland no llegaron a un acuerdo de separación, Interbase permaneció
como un producto de Borland y el código fuente de Interbase 6 se liberó bajo una variante de la “Mozilla Public
License” a mediados del 2000.
InterBase 65
Con la división de Interbase en Borland, la compañía liberó una versión propietaria de Interbase 6 y luego 6.5.
Borland liberó varias actualizaciones para la versión libre antes de anunciar que ya no participaría activamente en el
desarrollo de este proyecto. De aquí nació una nueva rama de desarrollo libre basada en el código abierto de
Interbase 6 conocida como Firebird, que aún se encuentra en desarrollo activo.
Últimos lanzamientos
A finales de 2002, Borland lanzó InterBase versión 7, incluyendo soporte para SMP, soporte mejorado para
monitorear y controlar los servidores, y más. Borland lanzó la versión 7.1 en junio de 2003, 7.5 en diciembre de
2004 y 7.5.1 el 1 de junio de 2005. Posteriormente fue el lanzamiento de InterBase 2007 (septiembre de 2006),
siendo la última versión Interbase 2009 (junio de 2008).
Véase también
• DBMS Firebird
Enlaces externos
• Sitio oficial de Interbase [1]
Referencias
[1] http:/ / www. borland. com/ interbase/
66
Otros
Software libre
El software libre (en inglés free
software, esta denominación también
se confunde a veces con gratis por la
ambigüedad del término en el idioma
inglés) es la denominación del
software que respeta la libertad de los
usuarios sobre su producto adquirido y,
por tanto, una vez obtenido puede ser
usado, copiado, estudiado, cambiado y
redistribuido libremente. Según la Free
Software Foundation, el software libre
se refiere a la libertad de los usuarios
para ejecutar, copiar, distribuir,
estudiar, modificar el software y
distribuirlo modificado. Mapa conceptual del software libre.
Tampoco debe confundirse software libre con "software de dominio público". Éste último es aquel software que no
requiere de licencia, pues sus derechos de explotación son para toda la humanidad, porque pertenece a todos por
igual. Cualquiera puede hacer uso de él, siempre con fines legales y consignando su autoría original. Este software
sería aquel cuyo autor lo dona a la humanidad o cuyos derechos de autor han expirado, tras un plazo contado desde
la muerte de este, habitualmente 70 años. Si un autor condiciona su uso bajo una licencia, por muy débil que sea, ya
no es del dominio público.
Software libre 67
Historia
Entre los años 1960 y 1970, el software no era
considerado un producto sino un añadido que los
vendedores de las grandes computadoras de la época
(las mainframes) aportaban a sus clientes para que éstos
pudieran usarlos. En dicha cultura, era común que los
programadores y desarrolladores de software
compartieran libremente sus programas unos con otros.
Este comportamiento era particularmente habitual en
algunos de los mayores grupos de usuarios de la época,
como DECUS (grupo de usuarios de computadoras
DEC). A finales de la década de 1970, las compañías
iniciaron el hábito de imponer restricciones a los
usuarios, con el uso de acuerdos de licencia. Richard Stallman, creador del concepto de software libre y fundador
de la Free Software Foundation.
En 1971, cuando la informática todavía no había
sufrido su gran boom, las personas que hacían uso de ella, en ámbitos universitarios y empresariales, creaban y
compartían el software sin ningún tipo de restricciones.
Con la llegada de los años 1980 la situación empezó a cambiar. Las computadoras más modernas comenzaban a
utilizar sistemas operativos privativos, forzando a los usuarios a aceptar condiciones restrictivas que impedían
realizar modificaciones a dicho software.
En caso de que algún usuario o programador encontrase algún error en la aplicación, lo único que podía hacer era
darlo a conocer a la empresa desarrolladora para que ésta lo solucionara. Aunque el programador estuviese
capacitado para solucionar el problema y lo desease hacer sin pedir nada a cambio, el contrato le impedía que
modificase el software.
El mismo Richard Stallman cuenta que por aquellos años, en el laboratorio donde trabajaba, habían recibido una
impresora donada por una empresa externa. El dispositivo, que era utilizado en red por todos los trabajadores,
parecía no funcionar a la perfección, dado que cada cierto tiempo el papel se atascaba. Como agravante, no se
generaba ningún aviso que se enviase por red e informase a los usuarios de la situación.
La pérdida de tiempo era constante, ya que en ocasiones, los trabajadores enviaban por red sus trabajos a imprimir y
al ir a buscarlos se encontraban la impresora atascada y una cola enorme de trabajos pendientes. Richard Stallman
decidió arreglar el problema, e implementar el envío de un aviso por red cuando la impresora se bloqueara. Para ello
necesitaba tener acceso al código fuente de los controladores de la impresora. Pidió a la empresa propietaria de la
impresora lo que necesitaba, comentando, sin pedir nada a cambio, qué era lo que pretendía realizar. La empresa se
negó a entregarle el código fuente. En ese preciso instante, Stallman se vio en una encrucijada: debía elegir entre
aceptar el nuevo software propietario firmando acuerdos de no revelación y acabar desarrollando más software
propietario con licencias restrictivas, que a su vez deberían ser más adelante aceptadas por sus propios colegas.
Con este antecedente, en 1984, Richard Stallman comenzó a trabajar en el proyecto GNU, y un año más tarde fundó
la Free Software Foundation (FSF). Stallman introdujo la definición de software libre y el concepto de "copyleft",
que desarrolló para otorgar libertad a los usuarios y para restringir las posibilidades de apropiación del software.[1]
Software libre 68
Libertad Descripción
2 la libertad de distribuir copias del programa, con lo cual puedes ayudar a tu prójimo.
3 la libertad de mejorar el programa y hacer públicas esas mejoras a los demás, de modo que
toda la comunidad se beneficie.
Las libertades 1 y 3 requieren acceso al código fuente porque estudiar y modificar software sin su código fuente es muy poco viable.
Ciertos teóricos usan este cuarto punto (libertad 3) para justificar parcialmente las limitaciones impuestas por la
licencia GNU GPL frente a otras licencias de software libre (ver Licencias GPL). Sin embargo el sentido original es
más libre, abierto y menos restrictivo que el que le otorga la propia situación de incompatibilidad, que podría ser
resuelta en la próxima versión 3.0 de la licencia GNU GPL, causa en estos momentos graves perjuicios a la
comunidad de programadores de software libre, que muchas veces no pueden reutilizar o mezclar códigos de dos
licencias distintas, pese a que las libertades teóricamente lo deberían permitir.
En el sitio web oficial de Open Source Initiative está la lista completa de las licencias de software libre actualmente
aprobadas y tenidas como tales.[3]
El término software no libre se emplea para referirse al software distribuido bajo una licencia de software más
restrictiva que no garantiza estas cuatro libertades. Las leyes de la propiedad intelectual reservan la mayoría de los
derechos de modificación, duplicación y redistribución para el dueño del copyright; el software dispuesto bajo una
licencia de software libre rescinde específicamente la mayoría de estos derechos reservados.
La definición de software libre no contempla el asunto del precio; un eslogan frecuentemente usado es "libre como
en libertad, no como en cerveza gratis" o en inglés "Free as in freedom, not as in free beer" (aludiendo a la
ambigüedad del término inglés "free"), y es habitual ver a la venta CD de software libre como distribuciones Linux.
Sin embargo, en esta situación, el comprador del CD tiene el derecho de copiarlo y redistribuirlo. El software gratis
puede incluir restricciones que no se adaptan a la definición de software libre —por ejemplo, puede no incluir el
código fuente, puede prohibir explícitamente a los distribuidores recibir una compensación a cambio, etc—.
Para evitar la confusión, algunas personas utilizan los términos "libre" (software libre) y "gratis" (software gratis)
para evitar la ambigüedad de la palabra inglesa "free". Sin embargo, estos términos alternativos son usados
únicamente dentro del movimiento del software libre, aunque están extendiéndose lentamente hacia el resto del
mundo. Otros defienden el uso del término open source software (software de código abierto). La principal
diferencia entre los términos "open source" y "free software" es que éste último tiene en cuenta los aspectos éticos y
filosóficos de la libertad, mientras que el "open source" se basa únicamente en los aspectos técnicos.
En un intento por unir los mencionados términos que se refieren a conceptos semejantes, se está extendiendo el uso
de la palabra "FLOSS" con el significado de free/libre and open source software e, indirectamente, también a la
comunidad que lo produce y apoya.
Software libre 69
Tipos de licencias
Una licencia es aquella autorización formal con carácter contractual que un autor de un software da a un interesado
para ejercer "actos de explotación legales". Pueden existir tantas licencias como acuerdos concretos se den entre el
autor y el licenciatario. Desde el punto de vista del software libre, existen distintas variantes del concepto o grupos
de licencias:
Licencias GPL
Una de las más utilizadas es la Licencia Pública General de GNU (GNU GPL). El autor conserva los derechos de
autor (copyright), y permite la redistribución y modificación bajo términos diseñados para asegurarse de que todas
las versiones modificadas del software permanecen bajo los términos más restrictivos de la propia GNU GPL. Esto
hace que sea imposible crear un producto con partes no licenciadas GPL: el conjunto tiene que ser GPL.
Es decir, la licencia GNU GPL posibilita la modificación y redistribución del software, pero únicamente bajo esa
misma licencia. Y añade que si se reutiliza en un mismo programa código "A" licenciado bajo licencia GNU GPL y
código "B" licenciado bajo otro tipo de licencia libre, el código final "C", independientemente de la cantidad y
calidad de cada uno de los códigos "A" y "B", debe estar bajo la licencia GNU GPL.
En la práctica esto hace que las licencias de software libre se dividan en dos grandes grupos, aquellas que pueden ser
mezcladas con código licenciado bajo GNU GPL (y que inevitablemente desaparecerán en el proceso, al ser el
código resultante licenciado bajo GNU GPL) y las que no lo permiten al incluir mayores u otros requisitos que no
contemplan ni admiten la GNU GPL y que por lo tanto no pueden ser enlazadas ni mezcladas con código gobernado
por la licencia GNU GPL.
En el sitio web oficial de GNU hay una lista de licencias que cumplen las condiciones impuestas por la GNU GPL y
otras que no.[4]
Aproximadamente el 60% del software licenciado como software libre emplea una licencia GPL.
Licencias AGPL
La Licencia Pública General de Affero (en inglés Affero General Public License, también Affero GPL o AGPL)
es una licencia copyleft derivada de la Licencia Pública General de GNU diseñada específicamente para asegurar la
cooperación con la comunidad en el caso de software que corra en servidores de red.
La Affero GPL es íntegramente una GNU GPL con una cláusula nueva que añade la obligación de distribuir el
software si éste se ejecuta para ofrecer servicios a través de una red de ordenadores.
La Free Software Foundation recomienda que el uso de la GNU AGPLv3 sea considerado para cualquier software
que usualmente corra sobre una red.[5]
Copyleft
Hay que hacer constar que el titular de los derechos de autor (copyright) de un software bajo licencia copyleft puede
también realizar una versión modificada bajo su copyright original, y venderla bajo cualquier licencia que desee,
además de distribuir la versión original como software libre. Esta técnica ha sido usada como un modelo de negocio
por una serie de empresas que realizan software libre (por ejemplo MySQL); esta práctica no restringe ninguno de
los derechos otorgados a los usuarios de la versión copyleft. También podría retirar todas las licencias de software
libre anteriormente otorgadas, pero esto obligaría a una indemnización a los titulares de las licencias en uso. En
España, toda obra derivada está tan protegida como una original, siempre que la obra derivada parta de una
autorización contractual con el autor. En el caso genérico de que el autor retire las licencias "copyleft", no afectaría
de ningún modo a los productos derivados anteriores a esa retirada, ya que no tiene efecto retroactivo. En términos
legales, el autor no tiene derecho a retirar el permiso de una licencia en vigencia. Si así sucediera, el conflicto entre
las partes se resolvería en un pleito convencional.
Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías,
prensa diaria o páginas de Internet fidedignas.
[6]
Puedes añadirlas así o avisar al autor principal del artículo en su página de discusión pegando: {{subst:Aviso referencias|Software
libre}} ~~~~
Aunque en la práctica el software de código abierto y el software libre comparten muchas de sus licencias, la Free
Software Foundation opina que el movimiento del software de código abierto es filosóficamente diferente del
movimiento del software libre. Apareció en 1998 con un grupo de personas, entre los que cabe destacar a Eric S.
Raymond y Bruce Perens, que formaron la Open Source Initiative (OSI). Ellos buscaban darle mayor relevancia a los
beneficios prácticos del compartir el código fuente, e interesar a las principales casas de software y otras empresas de
la industria de la alta tecnología en el concepto. Por otro lado, la Free Software Foundation y Richard Stallman
prefieren plantear el asunto en términos éticos empleando el término "software libre".
Los defensores del término "código abierto", en inglés open source, afirman que éste evita la ambigüedad del
término en ese idioma que es free en free software. El término "código abierto" fue acuñado por Christine Peterson
del think tank Foresight Institute, y se registró para actuar como marca registrada el término en inglés para los
productos de software libre.
Mucha gente reconoce el beneficio cualitativo del proceso de desarrollo de software cuando los desarrolladores
pueden usar, modificar y redistribuir el código fuente de un programa. (Véase también La Catedral y el Bazar). El
movimiento del software libre hace especial énfasis en los aspectos morales o éticos del software, viendo la
excelencia técnica como un producto secundario deseable de su estándar ético. El movimiento de código abierto ve
la excelencia técnica como el objetivo prioritario, siendo la compartición del código fuente un medio para dicho fin.
Por dicho motivo, la FSF se distancia tanto del movimiento de código abierto como del término "Código Abierto"
(en inglés Open Source).
Puesto que la OSI sólo aprueba las licencias que se ajustan a la Open Source Definition (definición de código
abierto), la mayoría de la gente lo interpreta como un esquema de distribución, e intercambia libremente "código
abierto" con "software libre". Aun cuando existen importantes diferencias filosóficas entre ambos términos,
especialmente en términos de las motivaciones para el desarrollo y el uso de tal software, raramente suelen tener
impacto en el proceso de colaboración.
Aunque el término "código abierto" elimina la ambigüedad de libertad frente a precio (en el caso del inglés),
introduce una nueva: entre los programas que se ajustan a la definición de código abierto, que dan a los usuarios la
libertad de mejorarlos, y los programas que simplemente tiene el código fuente disponible, posiblemente con fuertes
restricciones sobre el uso de dicho código fuente. Mucha gente cree que cualquier software que tenga el código
fuente disponible es de código abierto, puesto que lo pueden manipular (un ejemplo de este tipo de software sería el
popular paquete de software gratuito Graphviz, inicialmente no libre pero que incluía el código fuente, aunque luego
AT&T le cambió la licencia). Sin embargo, mucho de este software no da a sus usuarios la libertad de distribuir sus
modificaciones, restringe el uso comercial, o en general restringe los derechos de los usuarios.
Software libre 72
Implicaciones económico-políticas
Una vez que un producto de software libre ha empezado a circular, rápidamente está disponible a un costo muy bajo.
Al mismo tiempo, su utilidad no decrece. El software, en general, podría ser considerado un bien de uso inagotable,
tomando en cuenta que su costo marginal es pequeñísimo y que no es un bien sujeto a rivalidad (la posesión del bien
por un agente económico no impide que otro lo posea).
Puesto que el software libre permite el libre uso, modificación y redistribución, a menudo encuentra un hogar entre
usuarios para los cuales el coste del software no libre es a veces prohibitivo, o como alternativa a la piratería.
También es sencillo modificarlo localmente, lo que permite que sean posibles los esfuerzos de traducción a idiomas
que no son necesariamente rentables comercialmente.
La mayoría del software libre se produce por equipos internacionales que cooperan a través de la libre asociación.
Los equipos están típicamente compuestos por individuos con una amplia variedad de motivaciones, y pueden
provenir tanto del sector privado, del sector voluntario o del sector público. Existen muchas posturas acerca de la
relación entre el software libre y el actual sistema político-económico:
• Algunos consideran el software libre como un competidor contra el centralismo en empresas y gobiernos, una
forma de orden espontáneo o de anarquismo práctico.[7]
• Algunos consideran el software libre como una forma de trabajo colaborativo en un modelo de mercado, tal como
se había planteado el cooperativismo.
• Algunos comparan el software libre a una economía del regalo, donde el valor de una persona está basado en lo
que ésta da a los demás, sin que incurra valor monetario formal de por medio.
• Grupos como Oekonux e Hipatia consideran que todo debería producirse de esta forma y que este modelo de
producción no se limita a reemplazar el modelo no libre de desarrollo del software. La cooperación basada en la
libre asociación puede usarse y se usa para otros propósitos (tales como escribir enciclopedias, por ejemplo).
• Hay proyectos de desarrollo con impulso gubernamental que utilizan software libre, así como en proyectos de
voluntariado en países del tercer mundo.
Las implicaciones políticas y económicas del software libre, o su afinidad con el antiautoritarismo, es discutida.
Mientras para unos estas implicaciones son notorias y representan un factor importante a tomarse en cuenta, para
otros si bien podría existir una leve relación, no tiene suficiente relevancia.
Modelo de negocio
El negocio detrás del software libre se caracteriza por la oferta de servicios adicionales al software como: la
personalización y/o instalación del mismo, soporte técnico, donaciones, patrocinios; en contraposición al modelo de
negocio basado en licencias predominante en el software de código cerrado.[8]
Seguridad relativa
Existe una cierta controversia sobre la seguridad del software libre frente al software no libre (siendo uno de los
mayores asuntos la seguridad por oscuridad). Un método usado de forma habitual para determinar la seguridad
relativa de los productos es determinar cuántos fallos de seguridad no parcheados existen en cada uno de los
productos involucrados. Por lo general los usuarios de este método recomiendan que cuando un producto no
proporcione un método de parchear los fallos de seguridad, no se use dicho producto, al menos hasta que no esté
disponible un arreglo.
Software libre 73
Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías,
prensa diaria o páginas de Internet fidedignas.
[6]
Puedes añadirlas así o avisar al autor principal del artículo en su página de discusión pegando: {{subst:Aviso referencias|Software
libre}} ~~~~
• Bajo costo de adquisición: Se trata de un software económico ya que permite un ahorro de grandes cantidades en
la adquisición de las licencias.
• Innovación tecnológica: Esto se debe a que cada usuario puede aportar sus conocimientos y su experiencia y así
decidir de manera conjunta hacia donde se debe dirigir la evolución y el desarrollo del software. Este es un gran
avance en la tecnología mundial.
• Independencia del proveedor: Al disponer del código fuente, se garantiza una independencia del proveedor que
hace que cada empresa o particular pueda seguir contribuyendo al desarrollo y los servicios del software.
• Escrutinio público: Esto hace que la corrección de errores y la mejora del producto se lleven a cabo de manera
rápida y eficaz por cada uno de los usuarios que lleguen a utilizar el producto.
• Adaptación del software: Esta cualidad resulta de gran utilidad para empresas e industrias específicas que
necesitan un software personalizado para realizar un trabajo específico y con el software libre se puede realizar y
con costes mucho más razonables.
• Lenguas: Aunque el software se cree y salga al mercado en una sola lengua, el hecho de ser software libre facilita
en gran medida su traducción y localización para que usuarios de diferentes partes del mundo puedan aprovechar
Software libre 74
estos beneficios.
Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías,
prensa diaria o páginas de Internet fidedignas.
[6]
Puedes añadirlas así o avisar al autor principal del artículo en su página de discusión pegando: {{subst:Aviso referencias|Software
libre}} ~~~~
Los impactos del software libre, y las principales nuevas perspectivas que permite, son los siguientes:
• Aprovechamiento más adecuado de los recursos: Muchas aplicaciones utilizadas o promovidas por las
administraciones públicas son también utilizadas por otros sectores de la sociedad.
• Fomento de la industria local: Una de las mayores ventajas del software libre es la posibilidad de desarrollar
industria local de software.
• Independencia del proveedor: Es obvio que una organización preferirá depender de un mercado en régimen de
competencia que de un solo proveedor que puede imponer las condiciones en que proporciona su producto.
• Adaptación a las necesidades exactas: En el caso del software libre, la adaptación puede hacerse con mucha
mayor facilidad, y lo que es más importante, sirviéndose de un mercado con competencia, si hace falta
contratarla.
• Escrutinio público de seguridad: Para una administración pública poder garantizar que sus sistemas informáticos
hacen sólo lo que está previsto que hagan es un requisito fundamental y, en muchos estados, un requisito legal.
• Disponibilidad a largo plazo: Muchos datos que manejan las administraciones y los programas que sirven para
calcularlos han de estar disponibles dentro de decenas de años.
Algunos estudios apuntan al software libre como un factor clave para aumentar la competitividad en la Unión
Europea.[24]
Regulación
España
La Orden EDU/2341/2009, de 27 de agosto, por la que se crea el Centro Nacional de Desarrollo Curricular en
Sistemas no Propietarios, tiene como finalidad el diseño, el desarrollo y la promoción de contenidos educativos
digitales para colectivos educativos específicos, en el ámbito de las Tecnologías de la Información y la
Comunicación, que se centra en promocionar y aplicar estrategias dirigidas a poner a disposición de los centros
escolares recursos y contenidos digitales de calidad, desarrollados en software libre.
Referencias
[1] Ahmet Öztürk (July 2002). « Free Software (http:/ / cisn. metu. edu. tr/ 2002-6/ free. php)» (en inglés). Computing & Information Services
Newsletter, Metu Computer Center, Türkçe.
[2] Free Software Foundation (9 de diciembre de 2010). « La Definición de Software Libre (http:/ / www. gnu. org/ philosophy/ free-sw. es.
html)». Consultado el 14 de diciembre de 2010.
[3] Open Source Initiative. « OSI licenses (http:/ / www. opensource. org/ licenses)» (en inglés).
[4] Free Software Foundation, Inc.. « Licencias (http:/ / www. gnu. org/ licenses/ licenses. es. html)».
[5] Lista de licencias libres en el sitio de la FSF (http:/ / www. fsf. org/ licensing/ licenses/ index_html): “We recommend that developers
consider using the GNU AGPL for any software which will commonly be run over a network”.
[6] http:/ / en. wikipedia. org/ wiki/ Software_libre?action=history
[7] Eben Moglen. « Anarchism Triumphant: Free Software and the Death of Copyright (Anarquismo triunfante: el software libre y la muerte de
los derechos de autor) (http:/ / emoglen. law. columbia. edu/ publications/ anarchism. html)» (en inglés).
[8] « ¿Cómo genera dinero el software libre? - Guias en MilBits (http:/ / www. milbits. com/ 4253/ como-genera-dinero-el-software-libre. html)».
Software libre 75
[9] « DE: Foreign ministry: 'Cost of Open Source desktop maintenance is by far the lowest' — (http:/ / www. osor. eu/ news/
de-foreign-ministry-cost-of-open-source-desktop-maintenance-is-by-far-the-lowest)».
[10] « DiarioTi: Diario Tecnologías de la Información (http:/ / diarioti. com/ gate/ n. php?id=16446)».
[11] « Argentina eliminará la obligación estatal de usar Windows y recomendará Linux (http:/ / www. laflecha. net/ canales/ softlibre/
200403022)».
[12] « El gobierno de Lula levanta la bandera del 'software' libre · ELPAÍS.com (http:/ / www. elpais. com/ articulo/ internet/ gobierno/ Lula/
levanta/ bandera/ software/ libre/ elpeputec/ 20040626elpepunet_2/ Tes)».
[13] « Intel y Novell aplauden el avance de Linux en Brasil · ELPAÍS.com (http:/ / www. elpais. com/ articulo/ internet/ Intel/ Novell/ aplauden/
avance/ Linux/ Brasil/ elpeputec/ 20050517elpepunet_5/ Tes)».
[14] « Cuba abandona Windows y se pasa a Linux · ELPAÍS.com (http:/ / www. elpais. com/ articulo/ internet/ Cuba/ abandona/ Windows/ pasa/
Linux/ elpeputec/ 20050517elpepunet_10/ Tes)».
[15] « Regulador e IBM promueven Linux en el Gobierno, Chile, Tecnologías de Info., noticias (http:/ / www. bnamericas. com/ news/
tecnologia/ Regulador_e_IBM_promueven_Linux_en_el_Gobierno)».
[16] « China Earthquake Administration Chooses Linux - ChinaTechNews.com - The Technology Source for the Latest Chinese News on
Internet, Computers, Digital, Science, Electronics, La... (http:/ / www. chinatechnews. com/ 2006/ 06/ 06/
3954-china-earthquake-administration-chooses-linux)».
[17] « Implementación del Software libre en la Administración Pública Central del Ecuador (http:/ / www. informatica. gov. ec/ index. php/
software-libre/ estrategia-de-migracion/ implementacion-apc)».
[18] « Extremadura usará 'software' 'libre en los 10.000 ordenadores de la administración · ELPAÍS.com (http:/ / www. elpais. com/ articulo/
internet/ Extremadura/ usara/ software/ libre/ 10000/ ordenadores/ administracion/ elpportec/ 20060803elpepunet_5/ Tes)».
[19] « French police: we saved millions of euros by adopting Ubuntu - Ars Technica (http:/ / arstechnica. com/ open-source/ news/ 2009/ 03/
french-police-saves-millions-of-euros-by-adopting-ubuntu. ars)».
[20] « Michoacán ahorra muchos millones con software libre - El Universal - Finanzas (http:/ / www2. eluniversal. com. mx/ pls/ impreso/
noticia. html?id_nota=50094& tabla=finanzas)».
[21] « El Estado Dominicano se evitaría invertir los US$600 millones en el Gobierno Electrónico :: CLAVE digital móvil (http:/ / www.
clavedigital. com/ App_Pages/ Portada/ titulares. aspx?id_articulo=6123)».
[22] Gobierno de Venezuela. « Apoyo del Gobierno Venezolano al Software Libre (http:/ / www. gobiernoenlinea. ve/ docMgr/ sharedfiles/
Decreto3390. pdf)».
[23] Gonzáles Barahona Jesús, Seoane Pascual Joaquín, Robles Gregorio (2003). Introducción al software libre. Barcelona: Eurekamedia.
[24] FLOSSImpact (http:/ / www. flossimpact. eu)
Enlaces externos
• Wikimedia Commons alberga contenido multimedia sobre Software libre. Commons
• Wikisource contiene obras originales de o sobre Software libre.Wikisource
• Wikinoticias tiene noticias relacionadas con Software libre.Wikinoticias
• Wikiversidad alberga proyectos de aprendizaje sobre Software libre.Wikiversidad
• Definición de Open Source (http://www.opensource.org)(en inglés)
• Categorías de software libre y no libre (http://www.gnu.org/philosophy/categories.es.html)
• Licencias de software libre (EN) (http://www.gnu.org/licenses/license-list.html)
• Free Software Foundation (http://www.fsf.org/) (en inglés)
• Free Software Foundation (http://www.fsfla.org) (para Latinoamérica en español)
• Estudio sobre la valoración del software libre en la sociedad (http://www.portalprogramas.com/software-libre/
informe)
• Guía Práctica sobre Software Libre, su selección y aplicación local en América Latina y el Caribe, una
publicación de UNESCO (http://portal.unesco.org/ci/fr/ev.php-URL_ID=26399&
URL_DO=DO_PRINTPAGE&URL_SECTION=201.html)
• Calendario Hispano de Eventos Abiertos (http://www.libroblanco.com/calendario) (para Latinoamérica en
español)
• Centro Nacional de Referencia de Aplicación de las TIC basadas en Fuentes Abiertas (http://www.cenatic.es/)
(para España es español)
Normalización de bases de datos 76
X Y Z entonces X Z
FechaDeNacimiento Edad
Edad Conducir
FechaDeNacimiento Edad Conducir
Entonces tenemos que FechaDeNacimiento determina a Edad y la Edad determina a Conducir, indirectamente
podemos saber a través de FechaDeNacimiento a Conducir (En muchos países, una persona necesita ser mayor de
cierta edad para poder conducir un automóvil, por eso se utiliza este ejemplo).
Normalización de bases de datos 77
Propiedades deducidas
Unión
y entonces
Pseudo-transitiva
y entonces
Descomposición
y está incluido en entonces
Claves
Una clave primaria es aquella columna (pueden ser también dos columnas o más) que identifica únicamente a esa
fila. La clave primaria es un identificador que va a ser único para cada fila. Se acostumbra a poner la clave primaria
como la primera columna de la tabla pero esto no tiene que ser necesario, si no es más una conveniencia. Muchas
veces la clave primaria es autonumérica.
En una tabla puede que tengamos más de una clave, en tal caso se puede escoger una para ser la clave primaria, las
demás claves son las claves candidatas. Además es la posible clave primaria.
Una clave ajena (foreign key o clave foránea) es aquella columna que existiendo como dependiente en una tabla,
es a su vez clave primaria en otra tabla.
Una clave alternativa es aquella clave candidata que no ha sido seleccionada como clave primaria, pero que también
puede identificar de forma única a una fila dentro de una tabla. Ejemplo: Si en una tabla clientes definimos el
número de documento (id_cliente) como clave primaria, el número de seguro social de ese cliente podría ser una
clave alternativa. En este caso no se usó como clave primaria porque es posible que no se conozca ese dato en todos
los clientes.
Una clave compuesta es una clave que está compuesta por más de una columna.
Formas Normales
Las formas normales son aplicadas a las tablas de una base de datos. Decir que una base de datos está en la forma
normal N es decir que todas sus tablas están en la forma normal N.
En general, las primeras tres formas normales son suficientes para cubrir las necesidades de la mayoría de las bases
de datos. El creador de estas 3 primeras formas normales (o reglas) fue Edgar F. Codd.[1]
Reglas de Codd
Codd se percató de que existían bases de datos en el mercado las cuales decían ser relacionales, pero lo único que
hacían era guardar la información en las tablas, sin estar estas tablas literalmente normalizadas; entonces éste publicó
12 reglas que un verdadero sistema relacional debería tener, en la práctica algunas de ellas son difíciles de realizar.
Un sistema podrá considerarse "más relacional" cuanto más siga estas reglas.
Referencias
[1] A Relational Model of Data for Large Shared Data Banks Communications of the ACM, Vol. 13, No. 6, June 1970, pp. 377-387 (http:/ /
www. acm. org/ classics/ nov95/ toc. html)
[2] Fundamentals of DATABASE SYSTEMS Addison Wesley;, ISBN-10: 0321122267, ISBN-13: 978-0321122261,
• E.F.Codd (junio de 1970). "A Relational Model of Data for Large Shared Databanks". Communications of the
ACM.
• C.J.Date (1994). "An Introduction to Database Systems". Addison-Wesley.
Normalización de bases de datos 82
Véase también
• 1NF - 2NF - 3NF - BCNF - 4NF - 5NF - DKNF - 6NF - Denormalización
• Edgar Frank Codd
• Base de datos
Enlaces externos
• Bases de Datos: Formas Normales. Optimizar Tablas (http://www.scourdesign.com/articulos/BD-FN.php)
Fuentes y contribuyentes del artículo 83
Dato Fuente: http://es.wikipedia.org/w/index.php?oldid=43548228 Contribuyentes: AchedDamiman, Airunp, Alejandro bera, Aleposta, Alexquendi, Alhen, Alphabravotango, Ana wiki, Antur,
Açigni-Lovrij, Biasoli, Bigsus, CED, Cookie, Correogsk, Damifb, David0811, Dferg, Dianai, Diegusjaimes, Digigalos, Egaida, Emijrp, Farisori, Filipo, Gusgus, Hispa, Icvav, Interwiki,
Javierito92, Jesuja, JorgeGG, Jpodjarny, Klondike, KnightRider, Laura Fiorucci, Leugim1972, Locutus Borg, Maldoror, Manwë, Matdrodes, Moriel, Mr. Benq, Nicop, PACO, Pilaf, PoLuX124,
Porao, RoyFocker, SUL, Sauron, Siabef, Taichi, Tano4595, Tirithel, Vitamine, Wiki Wikardo, Wilfredor, 217 ediciones anónimas
Base de datos relacional Fuente: http://es.wikipedia.org/w/index.php?oldid=43539361 Contribuyentes: Alhen, Aloriel, Annihilator SP, Aurionfox, Caligari, Developer, Dferg, Diegusjaimes,
Dodo, Dreitmen, Elabra sanchez, Elalecampeon, Elsenyor, Gao.mza, GermanX, Gonzalogc, Guevonaso, Humbefa, Isha, Jesuja, Juan Cabral, Jynus, LU2JGP, Lancaster, Laura Fiorucci,
Leonel.canton, Leugim1972, Lungo, Matdrodes, Mixtli5, Nicop, RoyFocker, Rrupo, SPZ, Str0b0s, Superzerocool, Tirithel, Tomatejc, VARGUX, Vitorres, Zendel, 196 ediciones anónimas
Sistema administrador de bases de datos relacionales Fuente: http://es.wikipedia.org/w/index.php?oldid=36719197 Contribuyentes: Airunp, BlackBeast, Blue, Carmin, Diegusjaimes,
DixonD, Dodo, Elwikipedista, Gacpro, GermanX, Happygolucky, Isha, JMPerez, Jecanre, Josemiguel93, Lgm7, Matdrodes, Mushii, Ortisa, Rastrojo, Richy, Taichi, Tano4595, Tecnicoespaniol,
Unf, Walter closser, Xavigivax, Yrithinnd, 115 ediciones anónimas
Sistema de gestión de bases de datos Fuente: http://es.wikipedia.org/w/index.php?oldid=43181911 Contribuyentes: 4lex, Banfield, Biasoli, Diegusjaimes, Dodo, Eligna, Humbefa,
Leugim1972, Nioger, Olivares86, Poco a poco, Riviera, Robertorp, Savh, Super braulio, Tirithel, 72 ediciones anónimas
Clave primaria Fuente: http://es.wikipedia.org/w/index.php?oldid=42002455 Contribuyentes: Dusan, Hssoprano, Ignacioerrico, Leugim1972, Murphy era un optimista, Oxartum, 29 ediciones
anónimas
Clave foránea Fuente: http://es.wikipedia.org/w/index.php?oldid=39633427 Contribuyentes: Caroliina.peque.18, Dferg, Felipealvarez, GermanX, Jynus, Manuelt15, Mindmatrix, Muro de
Aguas, Nfcanessa, Smrolando, 12 ediciones anónimas
Columna (base de datos) Fuente: http://es.wikipedia.org/w/index.php?oldid=43287251 Contribuyentes: Asfarer, CommonsDelinker, Filipo, Gabriel Acquistapace, GermanX, Markoszarrate,
Spa karmona, 9 ediciones anónimas
Registro (base de datos) Fuente: http://es.wikipedia.org/w/index.php?oldid=43328522 Contribuyentes: Camilo, CommonsDelinker, Damifb, Diegusjaimes, Dodo, Draulius, Eligna, GermanX,
Humberto, Jesuja, Jkbw, Lucien leGrey, Manuel Trujillo Berges, Matdrodes, Ortisa, Platonides, Rrupo, Super braulio, Tirithel, Uruk, 55 ediciones anónimas
Null (SQL) Fuente: http://es.wikipedia.org/w/index.php?oldid=31943902 Contribuyentes: Julenarribas, Matdrodes, Matozqui, Platonides, Tirithel, 4 ediciones anónimas
Trigger (base de datos) Fuente: http://es.wikipedia.org/w/index.php?oldid=42495087 Contribuyentes: Almorca, BetoCG, Chico512, Cookie, Daganu, Donpipo, GermanX, Hobbitts, Jesuja,
Jorge c2010, Libertad y Saber, LordT, Matdrodes, Millars, Netito777, Oblongo, Pipepupo, PoLuX124, Siabef, Superzerocool, Taichi, Tirithel, Yrithinnd, 77 ediciones anónimas
Vista (base de datos) Fuente: http://es.wikipedia.org/w/index.php?oldid=42248887 Contribuyentes: Barct, Dianai, GermanX, Jileon, Lobillo, Matdrodes, Nicop, Ortisa, Savh, Snakeyes,
Udirnel, 20 ediciones anónimas
SQL Fuente: http://es.wikipedia.org/w/index.php?oldid=43167884 Contribuyentes: -jem-, AdeVega, Airunp, Aitormoreno, Alexav8, Alhen, Alvaro qc, Andre Engels, Andreasmperu,
AstroNomo, Bachi 2805, Balderai, Baldur71, Beto29, Biasoli, Calsbert, Cameri, Cinabrium, Clementito, Cobalttempest, Cosmico085, Cratón, Damifb, Diegazo, Diegusjaimes, Dnog, Dodo,
Dorieo, Edub, Ejmeza, ElWiau, Eloy, Elwikipedista, ErKURITA, Fache, Farm74, FrancoGG, Gacpro, Gcsantiago, GermanX, Grimpi, Gurgut, Götz, Hoo man, Hotpadrino, Hprmedina, Humbefa,
Icvav, Ingenioso Hidalgo, Isha, J.delanoy, JMPerez, Jac, Javierito92, Jesusosm, Jkbw, Jmmuguerza, Jmrubira, Johnbojaen, Jorge c2010, JorgeGG, Joseaperez, Jotagarzon, Jsanchev, Jstitch,
Juancmartinezh, Juanenriquez, Juank8041, Jugones55, Juliandt, Jvlivs, Kaser, Laura Fiorucci, LordT, Lourdes Cardenal, Lucien leGrey, Magomaitin, Mahadeva, Mansoncc, Marcelomasci,
Matdrodes, MatiasAB, McMalamute, Moriel, Muro de Aguas, Murphy era un optimista, Mushii, Mutari, Nelson.cruz, Netito777, No sé qué nick poner, Ofigue, Oscar ., PACO, Pan con queso,
Pieter, Pipepupo, PoLuX124, Porao, Qu3tzalc0atl5, Queninosta, R0MAN0, Racso, Resped, Rgfernandez, Roberpl, Rodrigouf, Rokemaster, Rosette, RoyFocker, Rrupo, Sabbut, Sanbec, Santiz,
Siabef, Subienkov, Superzerocool, Technopat, Template namespace initialisation script, Tirithel, Tomatejc, Triku, Ty25, Valyag, Vanbasten 23, Warlockzero, Wilfredor, WingMaster, Yrithinnd,
Zam, Ñuño Martínez, 523 ediciones anónimas
MySQL Fuente: http://es.wikipedia.org/w/index.php?oldid=43550743 Contribuyentes: 3coma14, Abakus, Abece, Akkan, Amgc56, Amitie 10g, Andreasmperu, Angel GN, Angel.F, Aparejador,
Artistadelpecado, Ascánder, Avh, Biasoli, BlackBeast, Camoralesm, Catalania, Ciges, Cookie, Cratón, DYN DaTa, Damifb, Dark512, Death Master, Dferg, Diegusjaimes, Dodo, Dzegarra, E b
moya, Edub, Elwikipedista, Epsilom, Er Komandante, Ezarate, Fidelmoquegua, Frontelo, Frutoseco, Furti, Gabriel Acquistapace, Gacq, Gbarrer, GermanX, Götz, Hashar, Hispa, Hobbitts, Huds,
Humberto, Icvav, Ignacio Icke, Ing amc, Isha, Ivancp, JAEAndTheBooks, JEDIKNIGHT1970, Jaimate, Jane Doe, Jarfil, Javierito92, Jesuja, Jisanche, JorgeGG, Josell2, Jucapac, Knocte, Levhita,
Locovich, Logoff, LordTomas, Lrojasm, M S, Macar, Mafores, Maldoror, Maleiva, Mandramas, ManoloKosh, Martingala, Matdrodes, Monta990, Monty oso, Mortadelo2005, Muro de Aguas,
Murphy era un optimista, Nihilo, Niqueco, OMenda, PabloStraub, PasabaPorAqui, Pipepupo, Platonides, Ppfk, Programador, Raiden32, Raysonho, Rbuj, RoyFocker, Rsg, Rutrus, Shaggy boy,
SpeedyGonzalez, Spirit-Black-Wikipedista, Stuz ocuB, Sumolari, Superzerocool, Tano4595, Taty2007, Terko, Texai, Tomatejc, Tony Rotondas, Txuspe, Ty25, Unf, VARGUX, Valyag,
Vitamine, Vitorres, Wilfredor, Wilinckx, Will vm, Willigulip, Xexito, Yachar, Zanaqo, Zufs, Ál, 345 ediciones anónimas
Oracle Fuente: http://es.wikipedia.org/w/index.php?oldid=43520637 Contribuyentes: .Sergio, Acifuentes, Aibdescalzo, Alexon Cevallos, Alhen, Alonsojpd, Belgrano, BlackBeast, Cinabrium,
Comae, Cratón, Crt, DYN DaTa, Dangertn, Dodo, El Megaloco, Enen, Eorbegozo, Esguibez, Frontelo, GermanX, Greek, ILoveSugar, Isra00, Jachguate, JorgeGG, Kabri, KnightRider, Kved,
Laura Fiorucci, Locovich, LordT, Lp-spain, Lucien leGrey, Mactropia, Maricela4, Martingala, Matdrodes, McMalamute, Mig21bp, Murphy era un optimista, Mushii, Máximo de Montemar,
Omella, Patomera, Patriciocs, PoLuX124, Queninosta, Rastrojo, SUL, Sergioperea, Snakeyes, Superzerocool, Taragui, Template namespace initialisation script, User888, User998, Warp,
Wricardoh, Zanaqo, Zanorte, 141 ediciones anónimas
PostgreSQL Fuente: http://es.wikipedia.org/w/index.php?oldid=43556329 Contribuyentes: Aadrover, Aruelo, ArwinJ, Avh, Biasoli, Carcediano, Casivaagustin, Chiunti, Comae, Danthux,
Daschapa, Dhidalgo, Diegusjaimes, Dodo, Dogor, Earizon, Elwikipedista, Emijrp, Er Komandante, Fanattiq, Gabrielperez, Gcsantiago, GermanX, Globalpegasus, Gronky, Jane Doe, Jsanchezes,
Macumbero86, Matdrodes, Miguelo on the road, Moleculax, Mstreet linux, Niqueco, Pacofelc, Pilaf, PoLuX124, Ralfm, Reingart, Robregonm, Rybueno, Sanbec, Shooke, Tavopc, Toad32767,
Tolano, Tony Rotondas, VARGUX, Vitorres, Vszjvll, Wastingmytime, Wikante, Willigulip, 140 ediciones anónimas
Firebird Fuente: http://es.wikipedia.org/w/index.php?oldid=37159450 Contribuyentes: Agua, Akkan, Armin76, Artistadelpecado, Ascánder, Axxgreazz, Azcu-Almada, Bedwyr, Cgarciagl,
Chico512, Clementito, Comae, Demetrio, Dianai, Farisori, Fernando Estel, GermanX, Gothmog, Gronky, Hari Seldon, Ivanics, Jachguate, JosePichardo, KnightRider, Matdrodes, Mushii,
Niuweme, Pilaf, Pipepupo, Psanz, Pybalo, Sergiosh, Txo, Un Mercenario, Vitorres, Xavigivax, Ysidoro, 65 ediciones anónimas
Microsoft SQL Server Fuente: http://es.wikipedia.org/w/index.php?oldid=43415049 Contribuyentes: Acbernal, Alexav8, Anam11, Artistadelpecado, Buzzedw, Calbimonte.daniel, Cheesy,
Cinabrium, Cojin, Cookie, DYN DaTa, Danielba894, Dbmaster125, Death Master, Diegusjaimes, Dodo, Dreitmen, Elen6m, Eval2de, Fanattiq, Ferenckv, Fremen, GeoAvila, GermanX,
Gotencool, Hobbitts, Hprmedina, Ialad, Javierito92, Jhoropopo, Jjdelperal, Joseneno, Juank8041, Juliosm, Jynus, LastCyborg, M S, Madrimx, Magister Mathematicae, Maldoror, Marim3e,
Matdrodes, Monta990, Montgomery, Muro de Aguas, Oscar ., Pandres95, Piero71, Retama, Roberzen, RoyFocker, SergiRiego, Sergioperea, Shooke, Sir Magician, Superzerocool, Symonblade,
VARGUX, Vitorres, Wilfredor, Xavi2m, Xosema, 131 ediciones anónimas
InterBase Fuente: http://es.wikipedia.org/w/index.php?oldid=41428451 Contribuyentes: Adrruiz, Azcu-Almada, Jjdelperal, Jynus, ManoloKosh, Mstreet linux, Tomatejc, Ysidoro, 12 ediciones
anónimas
Fuentes y contribuyentes del artículo 84
Software libre Fuente: http://es.wikipedia.org/w/index.php?oldid=43544524 Contribuyentes: -jem-, .Sergio, 4lex, Aibdescalzo, Airunp, AlGarcia, AlbertoDV, Aleposta, Alexav8, Alhen,
Almorca, Alstradiaan, Amadís, Angel GN, Annagul, Antiafd1, Antur, Aparejador, Arcibel, Arrobando, Artra, Ascánder, Asoliverez, Axxgreazz, Ayudoentodo 1, Bafomet, Baiji, Barbanegra,
Bcoto, Beto29, Biasoli, BlackBeast, Bombadil1986, C'est moi, Caiser, Cal Jac02, Camarlengo, Camontuyu, Camr, Caritademenu, CarlosRuiz, Carlosbz27, Chechurisk, Ciencia Al Poder,
Cinabrium, Clapp, ClaraDelRey, Clizarraga, Cmontero, ColdWind, Comae, CommonsDelinker, Coms23, Csoliverez, Ctrl Z, Cypress213, Cyxmedia, Dalton2, DamianFinol, Damifb, Danoex,
Darolu, David0811, Delatorre, Demiannnn, Der Kreole, Dferg, Diegusjaimes, Dodo, Dreitmen, Drini2, Dv ESP, Ecemaml, Edub, Ejmeza, El Pantera, Elabra sanchez, Electrodan, Elnegrojose,
Elsenyor, Elwikipedista, Enramos, Enric Naval, Equi, Eveliux, FAR, Fcldlibre, Fedaro, Fedeanton, FedericoMP, Flazcano, Fonsi80, Foundling, Frutoseco, Gabriel Acquistapace, Gacq, Gaius
iulius caesar, Gengiskanhg, Gerkijel, GermanX, Gonchibolso12, Greyes, Gronky, Gustavo.ovalle, HUB, Hack-Master, Hdanniel, Heavy, Hispa, Homo logos, House, Humberto, IVAN
SAUCEDO, Iarenaza, Ikonlabs, Insulae, Iranzop, Isela cv, Jamkaster, Jarke, JavierCantero, Javierito92, Jchildrens86, Jcsans, Jgb, Jjvaca, Jkbw, JorgeGG, JosebaAbaitua, Josell2, Josx, José
Daniel, Jrbiolinux, Jstitch, Juanje, Juantomas, Julie, Jynus, Kaka poop, Kalessin, Kansai, Kavor, Keppler es, Kronoss, Kved, Laocratis, Lasneyx, Laura Fiorucci, Leandropadula, Leonardo,
Leonardocaballero, Leonking, Lepoilu8, Leugim1972, Levhita, Libero, Libertad y Saber, Lmaguina, Locos epraix, LordT, Lucien leGrey, LyingB, Mac, Macruza, Magister Mathematicae,
ManuelGR, Marcela Cabrera Ruiz, Mario modesto, Marioxcc, Martini 001, Matdrodes, Mcanto, Meltryth, Mescalier, Mgarciasolipa, Mikefarrel, Montgomery, Morenisco, Moriel,
Mortadelo2005, Mr. Memo Cham, Muro de Aguas, Mutari, Negro4000, Nessye, Netito777, Nicoguaro, Nicop, Nihilo, Ninovolador, Nolan, Nopetro, Openmexico, Ortisa, PabloCastellano,
Pacovila, Paintman, Patriciadedo, Phirosiberia, PoLuX124, Poccms, Poco a poco, Popopopo4443, Prometheus, Queninosta, R1chard, Ramiropol, Retama, Rimac, Roberpl, Roberto.estrella,
Ronaldfpb, Rosarino, RoyFocker, Rsg, Rumpelstiltskin, Sanbec, Santiperez, Sauron, Savh, Seanver, Sebelk, Ser Ant, Sergio Yinyang, Shekatsu8er, ShinodaLop, Shooke, Slerena, Snakeyes,
Srengel, Super braulio, Superzerocool, Surfaz, Tano4595, Telma, Tirithel, Tlahtopil, Toniher, Tosin2627, Trebol6, Triku, Ugly, VARGUX, Valadrem, Varano, Veon, Vic Fede, Vitamine,
Vitorres, Wikipaco, Wilfredor, Worldman, Xatufan, Xavidp, Xavigivax, Xenoforme, Yakoo, Yesenia anai, Youssefsan, Yrithinnd, ZrzlKing, conversion script, Ál, 723 ediciones anónimas
Normalización de bases de datos Fuente: http://es.wikipedia.org/w/index.php?oldid=43545239 Contribuyentes: Airunp, Akhram, Alagoro, Alexav8, Almorca, Andreasmperu, Andvarp, Angus,
Antur, BL, Barct, Bedwyr, BlackBeast, C'est moi, Changa, Cumanacr, David0811, Deniel77, Dferg, Diego diaz espinoza, Diegusjaimes, Dodo, Dovidena, Ecelan, Edmenb, Edtruji, Egaida,
Elielsardanons, Eluseche, Elwikipedista, Er Komandante, FAR, Fama.arciniega, Felipecanol, Fgtez, Filipo, Gaeddal, Gatra, GermanX, Goofys, Grillitus, Gusgus, Hernan Beati, Hprmedina,
Humbefa, Humberto, Isha, Jago84, Javierito92, Jkarretero, Juandiegocano, Jugones55, Jynus, Kuanto, Libertad y Saber, Lucien leGrey, Maleiva, Mansoncc, ManuelMontiel, Manuelt15, Manwë,
Matdrodes, Mencey, Merlyn333, Miguelo on the road, Mortadelo2005, Mushii, Máximo de Montemar, Netito777, PabloCastellano, Pabloab, Paintman, Pan con queso, PoLuX124, Queninosta,
RafaRamirez, Rayleon, RoyFocker, Rrupo, Rsg, SHeLoo, Snakeyes, Spirit-Black-Wikipedista, Super braulio, Taichi, Tirithel, Tostadora, Truor, Tyrannosaurusreflex, U.gonzalez, Valyag,
Verajm, Vitorres, Walter closser, Xatufan, Yeza, 692 ediciones anónimas
Fuentes de imagen, Licencias y contribuyentes 85
Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/