You are on page 1of 88

Bases de Datos

Introducción por Wikipedia

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

Ejemplos de Software Disponible 32


SQL 32
MySQL 39
Oracle 48
PostgreSQL 50
Firebird 57
Microsoft SQL Server 60
InterBase 63

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).

Tipos de Base de Datos


Las bases de datos pueden clasificarse de varias maneras, de acuerdo al contexto que se este manejando, o la utilidad
de la misma:

Según la variabilidad de los datos almacenados

Bases de datos estáticas


Éstas son bases de datos de sólo lectura, utilizadas primordialmente para almacenar datos históricos que
posteriormente se pueden utilizar para estudiar el comportamiento de un conjunto de datos a través del tiempo,
realizar proyecciones y tomar decisiones.
Base de datos 2

Bases de datos dinámicas


Éstas son bases de datos donde la información almacenada se modifica con el tiempo, permitiendo operaciones como
actualización, borrado y adición de datos, además de las operaciones fundamentales de consulta. Un ejemplo de esto
puede ser la base de datos utilizada en un sistema de información de una tienda de abarrotes, una farmacia, un
videoclub.

Según el contenido

Bases de datos bibliográficas


Solo contienen un subrogante (representante) de la fuente primaria, que permite localizarla. Un registro típico de una
base de datos bibliográfica contiene información sobre el autor, fecha de publicación, editorial, título, edición, de una
determinada publicación, etc. Puede contener un resumen o extracto de la publicación original, pero nunca el texto
completo, porque si no, estaríamos en presencia de una base de datos a texto completo (o de fuentes primarias —ver
más abajo). Como su nombre lo indica, el contenido son cifras o números. Por ejemplo, una colección de resultados
de análisis de laboratorio, entre otras.

Bases de datos de texto completo


Almacenan las fuentes primarias, como por ejemplo, todo el contenido de todas las ediciones de una colección de
revistas científicas.

Directorios
Un ejemplo son las guías telefónicas en formato electrónico.

Bases de datos o "bibliotecas" de información química o biológica


Son bases de datos que almacenan diferentes tipos de información proveniente de la química, las ciencias de la vida
o médicas. Se pueden considerar en varios subtipos:
• Las que almacenan secuencias de nucleótidos o proteínas.
• Las bases de datos de rutas metabólicas.
• Bases de datos de estructura, comprende los registros de datos experimentales sobre estructuras 3D de
biomoléculas-
• Bases de datos clínicas.
• Bases de datos bibliográficas (biológicas, químicas, médicas y de otros campos): PubChem, Medline,
EBSCOhost.

Modelos de bases de datos


Además de la clasificación por la función de las bases de datos, éstas también se pueden clasificar de acuerdo a su
modelo de administración de datos.
Un modelo de datos es básicamente una "descripción" de algo conocido como contenedor de datos (algo en donde se
guarda la información), así como de los métodos para almacenar y recuperar información de esos contenedores. Los
modelos de datos no son cosas físicas: son abstracciones que permiten la implementación de un sistema eficiente de
base de datos; por lo general se refieren a algoritmos, y conceptos matemáticos.
Algunos modelos con frecuencia utilizados en las bases de datos:
Base de datos 3

Bases de datos jerárquicas


Éstas son bases de datos que, como su nombre indica, almacenan su información en una estructura jerárquica. En
este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde un nodo padre de
información puede tener varios hijos. El nodo que no tiene padres es llamado raíz, y a los nodos que no tienen hijos
se los conoce como hojas.
Las bases de datos jerárquicas son especialmente útiles en el caso de aplicaciones que manejan un gran volumen de
información y datos muy compartidos permitiendo crear estructuras estables y de gran rendimiento.
Una de las principales limitaciones de este modelo es su incapacidad de representar eficientemente la redundancia de
datos.

Base de datos de red


Éste es un modelo ligeramente distinto del jerárquico; su diferencia fundamental es la modificación del concepto de
nodo: se permite que un mismo nodo tenga varios padres (posibilidad no permitida en el modelo jerárquico).
Fue una gran mejora con respecto al modelo jerárquico, ya que ofrecía una solución eficiente al problema de
redundancia de datos; pero, aun así, la dificultad que significa administrar la información en una base de datos de red
ha significado que sea un modelo utilizado en su mayoría por programadores más que por usuarios finales.

Bases de datos transaccionales


Son bases de datos cuyo único fin es el envío y recepción de datos a grandes velocidades, estas bases son muy poco
comunes y están dirigidas por lo general al entorno de análisis de calidad, datos de producción e industrial, es
importante entender que su fin único es recolectar y recuperar los datos a la mayor velocidad posible, por lo tanto la
redundancia y duplicación de información no es un problema como con las demás bases de datos, por lo general para
poderlas aprovechar al máximo permiten algún tipo de conectividad a bases de datos relacionales.

Bases de datos relacionales


Éste es el modelo utilizado en la actualidad para modelar problemas reales y administrar datos dinámicamente. Tras
ser postulados sus fundamentos en 1970 por Edgar Frank Codd, de los laboratorios IBM en San José (California), no
tardó en consolidarse como un nuevo paradigma en los modelos de base de datos. Su idea fundamental es el uso de
"relaciones". Estas relaciones podrían considerarse en forma lógica como conjuntos de datos llamados "tuplas". Pese
a que ésta es la teoría de las bases de datos relacionales creadas por Codd, la mayoría de las veces se conceptualiza
de una manera más fácil de imaginar. Esto es pensando en cada relación como si fuese una tabla que está compuesta
por registros (las filas de una tabla), que representarían las tuplas, y campos (las columnas de una tabla).
En este modelo, el lugar y la forma en que se almacenen los datos no tienen relevancia (a diferencia de otros
modelos como el jerárquico y el de red). Esto tiene la considerable ventaja de que es más fácil de entender y de
utilizar para un usuario esporádico de la base de datos. La información puede ser recuperada o almacenada mediante
"consultas" que ofrecen una amplia flexibilidad y poder para administrar la información.
El lenguaje más habitual para construir las consultas a bases de datos relacionales es SQL, Structured Query
Language o Lenguaje Estructurado de Consultas, un estándar implementado por los principales motores o sistemas
de gestión de bases de datos relacionales.
Durante su diseño, una base de datos relacional pasa por un proceso al que se le conoce como normalización de una
base de datos.
Durante los años 80 la aparición de dBASE produjo una revolución en los lenguajes de programación y sistemas de
administración de datos. Aunque nunca debe olvidarse que dBase no utilizaba SQL como lenguaje base para su
gestión.
Base de datos 4

Bases de datos multidimensionales


Son bases de datos ideadas para desarrollar aplicaciones muy concretas, como creación de Cubos OLAP.
Básicamente no se diferencian demasiado de las bases de datos relacionales (una tabla en una base de datos
relacional podría serlo también en una base de datos multidimensional), la diferencia está más bien a nivel
conceptual; en las bases de datos multidimensionales los campos o atributos de una tabla pueden ser de dos tipos, o
bien representan dimensiones de la tabla, o bien representan métricas que se desean estudiar.

Bases de datos orientadas a objetos


Este modelo, bastante reciente, y propio de los modelos informáticos orientados a objetos, trata de almacenar en la
base de datos los objetos completos (estado y comportamiento).
Una base de datos orientada a objetos es una base de datos que incorpora todos los conceptos importantes del
paradigma de objetos:
• Encapsulación - Propiedad que permite ocultar la información al resto de los objetos, impidiendo así accesos
incorrectos o conflictos.
• Herencia - Propiedad a través de la cual los objetos heredan comportamiento dentro de una jerarquía de clases.
• Polimorfismo - Propiedad de una operación mediante la cual puede ser aplicada a distintos tipos de objetos.
En bases de datos orientadas a objetos, los usuarios pueden definir operaciones sobre los datos como parte de la
definición de la base de datos. Una operación (llamada función) se especifica en dos partes. La interfaz (o signatura)
de una operación incluye el nombre de la operación y los tipos de datos de sus argumentos (o parámetros). La
implementación (o método) de la operación se especifica separadamente y puede modificarse sin afectar la interfaz.
Los programas de aplicación de los usuarios pueden operar sobre los datos invocando a dichas operaciones a través
de sus nombres y argumentos, sea cual sea la forma en la que se han implementado. Esto podría denominarse
independencia entre programas y operaciones.
SQL:2003, es el estándar de SQL92 ampliado, soporta los conceptos orientados a objetos y mantiene la
compatibilidad con SQL92.

Bases de datos documentales


Permiten la indexación a texto completo, y en líneas generales realizar búsquedas más potentes. Tesaurus es un
sistema de índices optimizado para este tipo de bases de datos.

Bases de datos deductivas


Un sistema de base de datos deductiva, es un sistema de base de datos pero con la diferencia de que permite hacer
deducciones a través de inferencias. Se basa principalmente en reglas y hechos que son almacenados en la base de
datos. Las bases de datos deductivas son también llamadas bases de datos lógicas, a raíz de que se basa en lógica
matemática.

Gestión de bases de datos distribuida (SGBDD)


la base de datos y el software SGBD pueden estar distribuidos en múltiples sitios conectados por una red. Hay de dos
tipos:
1. Distribuidos homogéneos: utilizan el mismo SGBD en múltiples sitios.
2. Distribuidos heterogéneos: Da lugar a los SGBD federados o sistemas multibase de datos en los que los SGBD
participantes tienen cierto grado de autonomía local y tienen acceso a varias bases de datos autónomas preexistentes
almacenados en los SGBD, muchos de estos emplean una arquitectura cliente-servidor.
Base de datos 5

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.

Un dato por sí mismo no constituye información, es el procesamiento de los datos


lo que nos proporciona información.

Véase también: Archivo informático

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

Base de datos relacional


Una base de datos relacional es una base de datos que cumple con el
modelo relacional, el cual es el modelo más utilizado en la actualidad
para implementar bases de datos ya planificadas. Permiten establecer
interconexiones (relaciones) entre los datos (que están guardados en
tablas), y a través de dichas conexiones relacionar los datos de ambas
tablas, de ahí proviene su nombre: "Modelo Relacional". Tras ser
postuladas sus bases en 1970 por Edgar Frank Codd, de los laboratorios IBM en San José (California), no tardó en
consolidarse como un nuevo paradigma en los modelos de base de datos.[1]

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

Relaciones base y derivadas


En una base de datos relacional, todos los datos se almacenan y se accede a ellos por medio de relaciones. Las
relaciones que almacenan datos son llamadas "relaciones base" y su implementación es llamada "tabla". Otras
relaciones no almacenan datos, pero son calculadas al aplicar operaciones relacionales. Estas relaciones son llamadas
"relaciones derivadas" y su implementación es llamada "vista" o "consulta". Las relaciones derivadas son
convenientes ya que expresan información de varias relaciones actuando como si fuera una sola.
Base de datos relacional 7

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

Manejadores de base de datos relacionales


Existe software exclusivamente dedicado a tratar con bases de datos relacionales. Este software se conoce como
SGBD (Sistema de Gestión de Base de Datos relacional) o RDBMS (del inglés Relational Database Management
System).
Entre los gestores o manejadores actuales más populares encontramos: MySQL, PostgreSQL, Oracle,
DB2,INFORMIX, Interbase, FireBird, Sybase y Microsoft SQL Server.

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.

Diseño de las bases de datos relacionales


El primer paso para crear una base de datos, es planificar el tipo de información que se quiere almacenar en la
misma, teniendo en cuenta dos aspectos: la información disponible y la información que necesitamos.
La planificación de la estructura de la base de datos, en particular de las tablas, es vital para la gestión efectiva de la
misma. El diseño de la estructura de una tabla consiste en una descripción de cada uno de los campos que componen
el registro y los valores o datos que contendrá cada uno de esos campos.
Los campos son los distintos tipos de datos que componen la tabla, por ejemplo: nombre, apellido, domicilio. La
definición de un campo requiere: el nombre del campo, el tipo de campo, el ancho del campo, etc.
Los registros constituyen la información que va contenida en los campos de la tabla, por ejemplo: el nombre del
paciente, el apellido del paciente y la dirección de este. Generalmente los diferente tipos de campos que su pueden
almacenar son los siguientes: Texto (caracteres), Numérico (números), Fecha / Hora, Lógico (informaciones lógicas
si/no, verdadero/falso, etc.), imágenes.
En resumen, el principal aspecto a tener en cuenta durante el diseño de una tabla es determinar claramente los
campos necesarios, definirlos en forma adecuada con un nombre especificando su tipo y su longitud.
Base de datos relacional 10

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/)

Sistema administrador de bases de datos


relacionales
Un RDBMS es un Sistema Administrador de Bases de Datos Relacionales. RDBMS viene del acrónimo en inglés
Relational Data Base Management System.
Los RDBMS proporcionan el ambiente adecuado para gestionar una base de datos.

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.

Regla 1: regla de la información


Toda la información de la base de datos debe estar representada explícitamente en el esquema lógico. Es decir, todos
los datos están en las tablas.

Regla 2: regla del acceso garantizado


Para todos y cada uno de los datos (valores atómicos) de una Base de Datos Relacional (BDR) se garantiza que son
accesibles a nivel lógico utilizando una combinación de nombre de tabla, valor de clave primaria y nombre de
columna.
• Cualquier dato almacenado en una BDR tiene que poder ser direccionado unívocamente. Para ello hay que
indicar en qué tabla está, cuál es la columna y cuál es la fila (mediante la clave primaria).
• Por tanto se necesita el concepto de clave primaria, que no es soportado en muchas implementaciones. En estos
casos, para lograr un efecto similar se puede hacer lo siguiente:
• Hacer que los atributos clave primaria no puedan ser nulos (NOT NULL).
• Crear un índice único sobre la clave primaria.
Sistema administrador de bases de datos relacionales 11

• No eliminar nunca el índice.

Regla 3: tratamiento sistemático de valores nulos


Los valores nulos (que son distintos de la cadena vacía, blancos, 0, ...) se soportan en los SGBD totalmente
relacionales para representar información desconocida o no aplicable de manera sistemática, independientemente del
tipo de datos.
• Se reconoce la necesidad de la existencia de valores nulos, para un tratamiento sistemático de los mismos.
• Hay problemas para soportar los valores nulos en las operaciones relacionales, especialmente en las operaciones
lógicas.
• Lógica trivaluada. En una posible solución. Existen tres (no dos) valores de verdad: Verdadero, Falso y
Desconocido (null). Se crean tablas de verdad para las operaciones lógicas:
• null Y null = null
• Verdadero Y null = null
• Falso Y null = Falso
• Verdadero O null = Verdadero
• etc..
Un inconveniente es que de cara al usuario el manejo de los lenguajes relacionales se complica pues es más difícil de
entender.

Regla 4: diccionario dinámico en línea basado en el modelo relacional


La descripción de la base de datos se representa a nivel lógico de la misma manera que los datos normales, de modo
que los usuarios autorizados pueden aplicar el mismo lenguaje relacional a su consulta, igual que lo aplican a los
datos normales.
• Es una consecuencia de la regla 1 que se destaca por su importancia. Los metadatos se almacenan usando el
modelo relacional, con todas las consecuencias.

Regla 5: regla del sublenguaje de datos completo


Un sistema relacional debe soportar varios lenguajes y varios modos de uso de terminal (ej: rellenar formularios,
etc.). Sin embargo, debe existir al menos un lenguaje cuyas sentencias sean expresables, mediante una sintaxis bien
definida, como cadenas de caracteres y que sea completo, soportando:
• Definición de datos
• Definición de vistas
• Manipulación de datos (interactiva y por programa)
• Limitantes de integridad
• Limitantes de transacción (iniciar, realizar, deshacer) (Begin, commit, rollback).
• Además de poder tener interfaces más amigables para hacer consultas, etc. siempre debe de haber una manera de
hacerlo todo de manera textual, que es tanto como decir que pueda ser incorporada en un programa tradicional.
• Un lenguaje que cumple esto en gran medida es SQL.
Sistema administrador de bases de datos relacionales 12

Regla 6: regla de actualización de vistas


Todas las vistas que son teóricamente actualizables se pueden actualizar por el sistema.
• El problema es determinar cuáles son las vistas teóricamente actualizables, ya que no está muy claro.
• Cada sistema puede hacer unas suposiciones particulares sobre las vistas que son actualizables.

Regla 7: inserción, actualización y borrado de alto nivel


La capacidad de manejar una relación base o derivada como un solo operando se aplica no sólo a la recuperación de
los datos (consultas), si no también a la inserción, actualización y borrado de datos.
• Esto es, el lenguaje de manejo de datos también debe ser de alto nivel (de conjuntos). Algunas bases de datos
inicialmente sólo podían modificar las tuplas de la base de datos de una en una (un registro de cada vez).

Regla 8: independencia física de datos


Los programas de aplicación y actividades del terminal permanecen inalterados a nivel fisico cuando quiera que se
realicen cambios en las representaciones de almacenamiento o métodos de acceso.
• El modelo relacional es un modelo lógico de datos, y oculta las características de su representación física.
• es la capacidad de modificar el esquema interno sin tener que alterar el esquema conceptual (o los externos). Por
ejemplo, puede ser necesario reorganizar ciertos ficheros físicos con el fin de mejorar el rendimiento de las
operaciones de consulta o de actualización de datos. la independencia física se refiere sólo a la separación entre las
aplicaciones y las estructuras físicas de almacenamiento.
La capacidad de modificar el esquema conceptual sin obligar a rescribir los programas de aplicación.

Regla 9: independencia lógica de datos


Los programas de aplicación y actividades del terminal permanecen inalterados a nivel lógico cuando quiera que se
realicen cambios a las tablas base que preserven la información.
• Cuando se modifica el esquema lógico preservando información (no valdría p.ej. eliminar un atributo) no es
necesario modificar nada en niveles superiores.
• Ejemplos de cambios que preservan la información:
• Añadir un atributo a una tabla base.
• Sustituir dos tablas base por la unión de las mismas. Usando vistas de la unión puedo recrear las tablas
anteriores...
• depurar las vistas de diseños y contenerla estasble.

Regla 10: independencia de integridad


Los limitantes de integridad específicos para una determinada base de datos relacional deben poder ser definidos en
el sublenguaje de datos relacional, y almacenables en el catálogo, no en los programas de aplicación.
• El objetivo de las bases de datos no es sólo almacenar los datos, si no también sus relaciones y evitar que estas
(limitantes) se codifiquen en los programas. Por tanto en una BDR se deben poder definir limitantes de integridad.
• Cada vez se van ampliando más los tipos de limitantes de integridad que se pueden utilizar en los SGBDR,
aunque hasta hace poco eran muy escasos.
• Como parte de los limitantes inherentes al modelo relacional (forman parte de su definición) están:
• Una BDR tiene integridad de entidad. Es decir, toda tabla debe tener una clave primaria.
• Una BDR tiene integridad referencial. Es decir, toda clave externa no nula debe existir en la relación donde es
primaria.
Sistema administrador de bases de datos relacionales 13

Regla 11: independencia de distribución


Una BDR tiene independencia de distribución.
• Las mismas órdenes y programas se ejecutan igual en una BD centralizada que en una distribuida.
• Las BDR son fácilmente distribuibles:
• Las tablas se dividen en fragmentos que se distribuyen.
• Cuando se necesitan las tablas completas se recombinan usando operaciones relacionales con los fragmentos.
• Sin embargo se complica más la gestión interna de la integridad, etc.
• Esta regla es responsable de tres tipos de transparencia de distribución:
• Transparencia de localización. El usuario tiene la impresión de que trabaja con una BD local. (aspecto de la
regla de independencia física)
• Transparencia de fragmentación. El usuario no se da cuenta de que la relación con que trabaja está
fragmentada. (aspecto de la regla de independencia lógica de datos).
• Transparencia de replicación. El usuario no se da cuenta de que pueden existir copias (réplicas) de una misma
relación en diferentes lugares.

Regla 12: regla de la no subversión


Si un sistema relacional tiene un lenguaje de bajo nivel (un registro de cada vez), ese bajo nivel no puede ser usado
para saltarse (subvertir) las reglas de integridad y los limitantes expresados en los lenguajes relacionales de más alto
nivel (una relación (conjunto de registros) de cada vez)
• Algunos problemas no se pueden solucionar directamente con el lenguaje de alto nivel.
• Normalmente se usa SQL inmerso en un lenguaje anfitrión para solucionar estos problemas. Se utiliza el concepto
de cursor para tratar individualmente las tuplas de una relación. En cualquier caso no debe ser posible saltarse los
limitantes de integridad impuestos al tratar las tablas a ese nivel.
Sistema de gestión de bases de datos 14

Sistema de gestión de bases de datos


Los sistemas de gestión de bases de datos (en inglés database management system, abreviado DBMS) son un tipo
de software muy específico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la
utilizan.

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.

Productos SGBD disponibles en el mercado

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

SGBD no libres y gratuitos


• Microsoft SQL Server Compact Edition Basica
• Sybase ASE Express Edition para Linux (edición gratuita para Linux)
• Oracle Express Edition 10

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.

Definiendo claves primarias


Las claves primarias están definidas el estándar ANSI SQL, mediante la directiva PRIMARY KEY. La sintaxis para
aplicar tal directiva a una tabla existente está definida en SQL:2003 de esta manera:

ALTER TABLE <identificador_de_la_tabla>


ADD [ CONSTRAINT <identificador_de_la_directiva> ]
PRIMARY KEY ( <nombre_de_columna> {, <nombre_de_columna>}... )

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

CREATE TABLE nombre_de_la_tabla (


id_col INT,
col2 CHARACTER VARYING(20),
...
CONSTRAINT clapri_tabla PRIMARY KEY(id_col),
...
)

En el caso en que la clave primaria sea una sola columna, ésta puede marcarse como tal por medio de la siguiente
sintaxis:

CREATE TABLE nombre_de_la_tabla (


id_col INT PRIMARY KEY,
col2 CHARACTER VARYING(20),
...
)

Definiendo claves únicas


La definición de claves únicas es sintácticamente muy similar a la de clave primaria.

ALTER TABLE <identificador_de_la_tabla>


ADD [ CONSTRAINT <identificador_de_la_directiva> ]
UNIQUE ( <nombre_de_columna> {, <nombre_de_columna>}... )

De la misma manera, las claves únicas pueden definirse como parte de la sentencia de SQL CREATE TABLE.

CREATE TABLE nombre_de_la_tabla (


id_col INT,
col2 CHARACTER VARYING(20),
cla_col SMALLINT,
...
CONSTRAINT clave_única UNIQUE(cla_col),
...
)

CREATE TABLE nombre_de_la_tabla (


id_col INT PRIMARY KEY,
col2 CHARACTER VARYING(20),
...
cla_col SMALLINT UNIQUE,
...
)

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.

Definiendo claves foráneas


Las claves foráneas son definidas bajo el estandard SQL a través de la restricción FOREIGN KEY. La sintaxis para
agregar tal restricción a una tabla existente es definida en SQL:2003 según se muestra debajo. Si se omite la lista de
columnas en la cláusula REFERENCES implica que la clave foránea tendrá que referenciar o relacionarse con la
clave primaria de la tabla referenciada.

ALTER TABLE <nombre tabla>


ADD [ CONSTRAINT <nombre restricción> ]
FOREIGN KEY ( <expresión columna> [, <expresión columna>]... )
REFERENCES <nombre tabla> [ ( <expresión columna> [, <expresión columna>]... ) ]
[ ON UPDATE <acción> ]
[ ON DELETE <acción> ];
Columna (base de datos) 19

Columna (base de datos)


En el contexto de una tabla de base de datos relacional, una columna es un conjunto de valores de datos de un
simple tipo particular, uno por cada fila de la tabla.[1] Las columnas proporcionan la estructura según la cual se
componen las filas.
El término campo es frecuentemente intercambiable con el de columna, aunque muchos consideran más correcto
usar el término campo (o valor de campo) para referirse específicamente al simple elemento que existe en la
intersección entre una fila y una columna.
Por ejemplo, una tabla que representa compañías pudo tener las siguientes columnas:
• ID(identificador entero, único a cada fila)
• Nombre (texto)
• Dirección 1 (texto)
• Dirección 2 (texto)
• Ciudad (identificador entero, proviene de una tabla separada de ciudades, de la que cualquier información del
estado o del país puede ser tomada)
• Código postal (texto)
• Industria (identificador entero, Proviene de una tabla separada de industrias)
• etc.
Cada fila proporcionaría un valor de los datos para cada columna y después sería entendida como solo simple valor
de datos estructurado, en este caso representando a una compañía. Más formalmente, cada fila puede ser interpretada
como una variable relacional, compuesta por un conjunto de tuplas, con cada tupla consistiendo en los dos
elementos: el nombre de la columna relevante y el valor que esta fila proporciona para esa columna.

Columna 1 Columna 2

Fila 1 Fila 1 Columna 1 Fila 1 Columna 2

Fila 2 Fila 2 Columna 1 Fila 2 Columna 2

Fila 3 Fila 3 Columna 1 Fila 3 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

Registro (base de datos)


En informática, y concretamente en el contexto de una base de datos relacional, un registro (también llamado fila o
tupla) representa un objeto único de datos implícitamente estructurados en una tabla. En términos simples, una tabla
de una base de datos puede imaginarse formada de filas y columnas o campos. Cada fila de una tabla representa un
conjunto de datos relacionados, y todas las filas de la misma tabla tienen la misma estructura.
Un registro es un conjunto de campos que contienen los datos que pertenecen a una misma repetición de entidad. Se
le asigna automáticamente un número consecutivo (número de registro) que en ocasiones es usado como índice
aunque lo normal y práctico es asignarle a cada registro un campo clave para su búsqueda.
La estructura implícita de un registro y el significado de los valores de sus campos exige que dicho registro sea
entendido como una sucesión de datos, uno en cada columna de la tabla. La fila se interpreta entonces como una
variable relacional compuesta por un conjunto de tuplas, cada una de las cuales consta de dos ítems: el nombre de la
columna relevante y el valor que esta fila provee para dicha columna.
Cada columna espera un valor de un tipo concreto.

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.

Lógica ternaria (Three-valued logic -3VL-)


Debido a que no pertenece a ningún dominio de datos, Null no está considerado propiamente un “valor”, pero
realmente sí que es un marcador que indica la ausencia de un valor. Debido a esto, las comparaciones con Null nunca
resultan ciertas o falsas, pero si como un resultado lógico ternario, desconocidas (unknown). El resultado lógico de la
siguiente expresión, la cual compara el valor 10 con Null, es Desconocido:

10 = NULL -- Resultados en Desconocido (Unknown)

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:

TRUE OR NULL -- Resultados en Verdadero (True)

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

Verdadero Falso Desconocido

q Verdadero Verdadero Falso Desconocido

Falso Falso Falso Falso

Desconocido Desconocido Falso Desconocido


Null (SQL) 22

p OR q p

Verdadero Falso Desconocido

q Verdadero Verdadero Verdadero Verdadero

Falso Verdadero Falso Desconocido

Desconocido Verdadero Desconocido Desconocido

p NOT p

Verdadero Falso

Falso Verdadero

Desconocido Desconocido

p=q p

Verdadero Falso Desconocido

q Verdadero Verdadero Falso Desconocido

Falso Falso Verdadero Desconocido

Desconocido Desconocido Desconocido Desconocido

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.

Lenguaje de manipulación de datos


Los valores lógicos ternarios de SQL se encuentran en el Lenguaje de Manipulación de Datos (LMD) en
comparaciones predicadas de afirmaciones LMD y dudas frecuentes. La proposición WHERE (DONDE) propicia
que la declaración LMD actúe sólo en aquellas filas para las cuales los cálculos de predicados evalúan la Verdad. Las
filas para las cuales estos cálculos evalúan si son Falsas o Desconocidas no derivan de declaraciones DML como
INSERT, UPDATE o DELETE, y son desechados a partir de preguntas SELECT. Interpretando Desconocido y
Falso como el mismo resultado lógico es un error común encontrado cuando tratamos con Nulls. El siguiente
ejemplo lo demuestra:

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.

Revisión de las limitaciones


El lugar primario en el cual la lógica ternaria SQL se entrecruza con la Lengua de Definición de Datos SQL (DDL)
es en forma de revisión de las limitaciones. Una revisión o comprobación de las limitaciones colocada sobre una
columna opera bajo una serie de reglas ligeramente diferentes de aquellas para la cláusula DML WHERE. Mientras
que una cláusula DML WHERE debe evaluar la Verdad para una fila, una comprobación no debe evaluar la
Falsedad. Esto quiere decir que una revisión tendrá éxito si el resultado de la comprobación es Verdadero o
Desconocido. El ejemplo siguiente muestra una tabla con una comprobación que prohibirá a cualquier valor de
número entero ser insertado en la columna i, pero permitirá a la Null ser insertada ya que el resultado de la
comprobación siempre evaluará se es Desconocido para la 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

limitaciones con un predicado IS NOT NULL.

CREATE TABLE t ( i INTEGER NOT NULL );

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.

ID Apellido Nombre ID Número

1 Izquierdo Roberto 1 555-2323

2 Ambrosio Alberto 3 555-9876

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.

SELECT e.ID, e.Apellido, e.Nombre, pn.Número


FROM Empleado e
LEFT OUTER JOIN Número de teléfono pn
ON e.ID = pn.ID;
Null (SQL) 25

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:

ID Apellido Nombre Número

1 Izquierdo Roberto 555-2323

2 Ambrosio Alberto NULL

3 Alfonso Katia 555-9876

4 Barbadillo Guillermo NULL

|+ 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.

IFNULL( A = B, FALSO ) OR ( A IS NULL AND B IS NULL )

Concadenación matemática y de caracteres


Como Null no es un valor de datos, pero un marcador para un valor desconocido, usando operadores matemáticos
sobre Null resulta un valor desconocido, que es representado por Null. En el ejemplo siguiente, multiplicando 10 por
Null resulta Null:

10 * NULL -- Resultado es NULL

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.

'Tortilla' || NULL || 'Patatas’ - Resultado es NULL

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

Fuciones de tratamiento de Null


SQL define dos funciones para manejar explícitamente la Null: COALESCE y NULLIF. Ambas funciones son
abreviaturas para expresiones CASE buscadas.

COALESCE
La función COALESCE acepta una lista de parámetros, devolviendo el primer valor no Null de la lista:

COALESCE(value1, value2, value3, ...)

COALESCE está definida como la siguiente expresión SQL CASE:

CASE WHEN value1 IS NOT NULL THEN valor1


WHEN value2 IS NOT NULL THEN valor2
WHEN value3 IS NOT NULL THEN valor3
...
END

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)

Por lo tanto, NULLIF es una abreviatura de de la siguiente expresión CASE:

CASE WHEN valor1 = valor2 THEN NULL ELSE valor1 END

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

Trigger (base de datos)


Un trigger (o disparador) en una Base de datos , es un procedimiento que se ejecuta cuando se cumple una condición
establecida al realizar una operación de inserción (INSERT), actualización (UPDATE) o borrado (DELETE).

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.

BEFORE UPDATE ON tabla_almacen


FOR ALL records
IF :NEW.producto < 100 THEN
INSERT INTO tabla_pedidos(producto) VALUES ('1000');
END IF;
SELECT DBO.POLVE.TEST
END

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:

CREATE TRIGGER ver_salario


BEFORE UPDATE ON empleados
REFERENCING NEW ROW AS n, OLD ROW AS o
FOR EACH ROW
IF n.salario <> o.salario THEN
END IF;

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:

CREATE OR REPLACE FUNCTION actualizar() RETURNS TRIGGER AS $ejemplo$


BEGIN
NEW.nombre := NEW.nombres || ' ' || NEW.apellidos ;
RETURN NEW;
END;
$ejemplo$ LANGUAGE plpgsql;

CREATE TRIGGER ejemplo


BEFORE INSERT OR UPDATE ON tabla
FOR EACH ROW EXECUTE PROCEDURE actualizar();

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

Vista (base de datos)


Una vista de base de datos es un resultado de una consulta SQL de una o varias tablas; también se le puede
considerar una tabla virtual.
Las vistas tienen la misma estructura que una tabla: filas y columnas. La única diferencia es que sólo se almacena de
ellas la definición, no los datos. Los datos que se recuperan mediante una consulta a una vista se presentarán igual
que los de una tabla. De hecho, si no se sabe que se está trabajando con una vista, nada hace suponer que es así. Al
igual que sucede con una tabla, se pueden insertar, actualizar, borrar y seleccionar datos en una vista. Aunque
siempre es posible seleccionar datos de una vista, en algunas condiciones existen restricciones para realizar el resto
de las operaciones sobre vistas.
Una vista se especifica a través de una expresión de consulta (una sentencia SELECT) que la calcula y que puede
realizarse sobre una o más tablas. Sobre un conjunto de tablas relacionales se puede trabajar con un número
cualquiera de vistas.
La mayoría de los SGBD soportan la creación y manipulación de vistas.
32

Ejemplos de Software Disponible

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:

Año Nombre Alias Comentarios

1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por ISO en 1987.

1989 SQL-89 Revisión menor.

1992 SQL-92 SQL2 Revisión mayor.

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].)

Características generales del SQL


El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales
permitiendo gran variedad de operaciones en éstos últimos.
Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte base teórica y su
orientación al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en
codificación y la orientación a objetos. De esta forma una sola sentencia puede equivaler a uno o más programas que
se utilizarían en un lenguaje de bajo nivel orientado a registros.

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.

Lenguaje de definición de datos (DDL)


El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se encarga de la
modificación de la estructura de los objetos de la base de datos. Existen cuatro operaciones básicas: CREATE,
ALTER, DROP y TRUNCATE.

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.

Ejemplo (crear una tabla)


CREATE TABLE 'TABLA_NOMBRE' (ejemplo)
'CAMPO_1' INT,
'CAMPO_2' STRING

Ejemplo (crear una función)


CREATE OR REPLACE FUNCTION 'NOMBRE FUNCION'('PARAMETROS')
RETURNS 'TIPO RETORNO' AS
$BODY$
begin
'INSTRUCCIÓN SQL'
SQL 34

--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.

Ejemplo (agregar columna a una tabla)


ALTER TABLE 'TABLA_NOMBRE' (
ADD NUEVO_CAMPO INT UNSIGNED meel
)

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''

Lenguaje de manipulación de datos DML(Data Manipulation Language)

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:

INSERT INTO ''tabla'' VALUES (''valor1'', [''valor2,...''])

Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):

INSERT INTO agenda_telefonica VALUES ('Roberto Jeldrez', 4886850);

Formas avanzadas

Inserciones en múltiples filas


Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la vez,
con una sola sentencia SQL:

INSERT INTO ''tabla'' (''columna1'', [''columna2,... ''])


VALUES (''valor1a'', [''valor1b,...'']), (''value2a'',
[''value2b,...'']),...

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'):

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'),


('Alejandro Sosa', '4556550');

Que podía haber sido realizado por las sentencias

INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850');


INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550');

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:

INSERT INTO phone_book


SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';
SQL 36

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:

INSERT INTO phone_book


SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL

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):

INSERT INTO phone_book


SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c)

Copia de filas de otras tablas


Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla
directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento
intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT
puede contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los datos que se inserta.
Lógicamente, el SELECT se evalúa antes que la operación INSERT esté iniciada. Un ejemplo se da a continuación.

INSERT INTO phone_book2

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.)

INSERT INTO phone_book2 ( [name], [phoneNumber] )

SELECT [name], [phoneNumber]


FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')

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.

INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez','0426.817.10.30' )


RETURNING phone_book_id INTO v_pb_id
SQL 38

• En el caso de MS SQL se puede utilizar la siguiente instrucción:

Set NoCount On;


INSERT INTO phone_book VALUES ( 'Cristobal Jeldrez','0426.817.10.30' );
Select @@Identity as ID

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.

Sistemas de gestión de base de datos


Los sistemas de gestión de base de datos con soporte SQL más utilizados son, por orden alfabético:
• DB2
• Firebird
• Informix
• Interbase
• MySQL
• Oracle
• PostgreSQL
• Pervasive
• SQLite
• SQL Server
• Sybase ASE
• VoltDB [3]

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

Instalador de MySql Server 5.0


Desarrollador

Sun Microsystems (hasta febrero de 2008 MySQL


AB)
[1]
www.mysql.com

Información general

Última versión estable 5.1.48


2 de junio de 2010

Género RDBMS

Escrito en C, C++

Sistema operativo Multiplataforma

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

Historia del proyecto


SQL (Lenguaje de Consulta Estructurado) fue comercializado por primera vez en 1981 por IBM, el cual fue
presentado a ANSI y desde entonces ha sido considerado como un estándar para las bases de datos relacionales.
Desde 1986, el estándar SQL ha aparecido en diferentes versiones como por ejemplo: SQL:92, SQL:99, SQL:2003.
MySQL es una idea originaria de la empresa opensource MySQL AB establecida inicialmente en Suecia en 1995 y
cuyos fundadores son David Axmark, Allan Larsson, y Michael "Monty" Widenius. El objetivo que persigue esta
empresa consiste en que MySQL cumpla el estándar SQL, pero sin sacrificar velocidad, fiabilidad o usabilidad.
Michael "Monty" Widenius en la década de los 90 trató de usar mSQL para conectar las tablas usando rutinas de bajo
nivel ISAM, sin embargo, mSQL no era rápido y flexible para sus necesidades. Esto lo llevó a crear una API SQL
denominada MySQL para bases de datos muy similar a la de mSQL pero más portable.
El nombre de MySQL procede de la combinación de My, hija del cofundador Michael "Monty" Widenius, con el
acrónimo SQL (según la documentación de la última versión en inglés [4] ). Por otra parte, el directorio base y
muchas de las bibliotecas usadas por los desarrolladores tenían el prefijo My.
El nombre del delfín de MySQL es Sakila y fue seleccionado por los fundadores de MySQL AB en el concurso
“Name the Dolphin”. Este nombre fue enviado por Ambrose Twebaze, un desarrollador de software de código abierto
africano, derivado del idioma SiSwate, el idioma local de Swazilandia y corresponde al nombre de una ciudad en
Arusha, Tanzania, cerca de Uganda la ciudad origen de Ambrose.

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

[6] [7] [8] [9] [10] [11]

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 de la versión 5.0.22


• Un amplio subconjunto de ANSI SQL 99, y varias extensiones.
• Soporte a multiplataforma.
• Procedimientos almacenados
• Disparadores (triggers).
• Cursores
• Vistas actualizables.
• Soporte a VARCHAR
• INFORMATION_SCHEMA
• Modo Strict
• Soporte X/Open XA de transacciones distribuidas; transacción en dos fases como parte de esto, utilizando el
motor InnoDB de Oracle.
• Motores de almacenamiento independientes (MyISAM para lecturas rápidas, InnoDB para transacciones e
integridad referencial).
• Transacciones con los motores de almacenamiento InnoDB, BDB Y Cluster; puntos de recuperación (savepoints)
con InnoDB.
• Soporte para SSL.
• Query caching
• Sub-SELECTs (o SELECTs anidados).
• Réplica con un maestro por esclavo, varios esclavos por maestro, sin soporte automático para múltiples maestros
por esclavo.
• indexing y búsqueda de campos de texto completos usando el motor de almacenamiento MyISAM.
• Embedded database library
• Soporte completo para Unicode.
• Conforme a las reglas ACID usando los motores InnoDB, BDB y Cluster.
• Shared-nothing clustering through MySQL Cluster.

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

Características (versión 4.0)


Inicialmente, MySQL carecía de elementos considerados esenciales en las bases de datos relacionales, tales como
integridad referencial y transacciones. A pesar de ello, atrajo a los desarrolladores de páginas web con contenido
dinámico, justamente por su simplicidad.
Poco a poco los elementos de los que carecía MySQL están siendo incorporados tanto por desarrollos internos, como
por desarrolladores de software libre. Entre las características disponibles en las últimas versiones se puede destacar:
• Amplio subconjunto del lenguaje SQL. Algunas extensiones son incluidas igualmente.
• Disponibilidad en gran cantidad de plataformas y sistemas.
• Diferentes opciones de almacenamiento según si se desea velocidad en las operaciones o el mayor número de
operaciones disponibles.
• Transacciones y claves foráneas.
• Conectividad segura.
• Replicación.
• Búsqueda e indexación de campos de texto.
MySQL es un sistema de administración de bases de datos. Una base de datos es una colección estructurada de tablas
que contienen datos. Esta puede ser desde una simple lista de compras a una galería de pinturas o el vasto volumen
de información en una red corporativa. Para agregar, acceder a y procesar datos guardados en un computador, usted
necesita un administrador como MySQL Server. Dado que los computadores son muy buenos manejando grandes
cantidades de información, los administradores de bases de datos juegan un papel central en computación, como
aplicaciones independientes o como parte de otras aplicaciones.
MySQL es un sistema de administración relacional de bases de datos. Una base de datos relacional archiva datos en
tablas separadas en vez de colocar todos los datos en un gran archivo. Esto permite velocidad y flexibilidad. Las
tablas están conectadas por relaciones definidas que hacen posible combinar datos de diferentes tablas sobre pedido.
MySQL es software de fuente abierta. Fuente abierta significa que es posible para cualquier persona usarlo y
modificarlo. Cualquier persona puede bajar el código fuente de MySQL y usarlo sin pagar. Cualquier interesado
puede estudiar el código fuente y ajustarlo a sus necesidades. MySQL usa el GPL (GNU General Public License)
para definir que puede hacer y que no puede hacer con el software en diferentes situaciones. Si usted no se ajusta al
GPL o requiere introducir código MySQL en aplicaciones comerciales, usted puede comprar una versión comercial
licenciada.

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.

Tipos de compilación del servidor


Hay tres tipos de compilación del servidor MySQL:
• Estándar: Los binarios estándar de MySQL son los recomendados para la mayoría de los usuarios, e incluyen el
motor de almacenamiento InnoDB.
• Max (No se trata de MaxDB, que es una cooperación con SAP): Los binarios incluyen características adicionales
que no han sido lo bastante probadas o que normalmente no son necesarias.
• MySQL-Debug: Son binarios que han sido compilados con información de depuración extra. No debe ser usada
en sistemas en producción porque el código de depuración puede reducir el rendimiento.

Especificaciones del código fuente


MySQL está escrito en una mezcla de C y C++. Hay un documento que describe algunas de sus estructuras internas
en http://dev.mysql.com/doc/internals/en/(en inglés).

Desarrollo del proyecto


El desarrollo de MySQL se fundamenta en el trabajo de los desarrolladores contratados por la empresa MySQL AB
quienes se encargan de dar soporte a los socios comerciales y usuarios de la comunidad MySQL y dar solución a los
problemas encontrados por los usuarios. Los usuarios o miembros de la comunidad MySQL pueden reportar bugs
revisando el manual en línea [14] que contiene las soluciones a problemas encontrados; el historial de cambios [15];
la base de datos bugs [16] que contiene bugs reportados y solucionados y en las listas de correo MySQL [17].
A través de las listas de correo los usuarios pueden enviar preguntas y éstas serán contestadas por desarrolladores
brindándoles soporte.

Otras funcionalidades de las listas de correo


• Anuncios: informan sobre nuevas versiones de MySQL y programas relacionados.
• MySQL: lista principal de discusión de MySQL.
• Bugs: permite a la gente buscar y arreglar bugs.
• Temas internos: para gente que trabaja con el código de MySQL. Es el fórum para discutir sobre el desarrollo de
MySQL.
• MySQLdoc: para gente que trabaja en documentación.
• Pruebas de rendimiento: para gente interesada en temas de rendimiento no sólo de MySQL, sino de otros motores
de bases de datos.
• Empaquetadores: para discusiones sobre empaquetamiento y distribución de MySQL.
• Java: discusiones sobre MySQL Server y Java.
Otras listas de correo son: MyODBC, Herramientas GUI, Cluster, Dotnet, PlusPlus y Perl.
Adicional a las listas de correo, se encuentra el soporte de IRC de la comunidad MySQL. Además, hay soporte a
través de foros [18] agrupados en categorías tales como: Migración, Uso de MySQL, Conectores MySQL,
MySQL 45

Tecnología MySQL y Negocios.

Estructuras organizativas/asociativas o de decisión


La dirección y el patrocinio de los proyectos MySQL están a cargo de la empresa MySQL AB quien posee el
copyrigth del código fuente MySQL, su logo y marca registrada. MySQL, Inc. y MySQL GmbH son ejemplos de
empresas subsidiarias de MySQL AB. Están establecidas en los Estados Unidos y Alemania respectivamente.
MySQL AB, cuenta con más de 200 empleados en más de 20 países y funcionan bajo la estrategia de teletrabajo.
En enero del 2008 Sun Microsystems anuncia su compra.
En abril del 2009 Oracle anunció la compra de Sun Microsystems[19]

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

Última versión estable 11g Release 2:


11.2.0.1
01/09/2009

Género RDBMS

Sistema operativo Multiplataforma

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

PostgreSQL Global Development Group


[1]
www.postgresql.org

Información general

Última versión estable 9.0


20 de septiembre de 2010

Género RDBMS

Sistema operativo Multiplataforma

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).

Nombre del producto


El uso de caracteres en mayúscula en el nombre PostgreSQL puede confundir a algunas personas a primera vista. Las
distintas pronunciaciones de "SQL" pueden llevar a confusión. Los desarrolladores de PostgreSQL lo pronuncian
/poːst ɡɹɛs kjuː ɛl/;. Es también común oír abreviadamente como simplemente "Postgres", el que fue su nombre
original. Debido a su soporte del estándar SQL entre la mayor parte de bases de datos relacionales, la comunidad
consideró cambiar el nombre al anterior Postgres. Sin embargo, el PostgreSQL Core Team anunció en 2007 que el
producto seguiría llamándose PostgreSQL. El nombre hace referencia a los orígenes del proyecto como la base de
datos "post-Ingres", y los autores originales también desarrollaron la base de datos Ingres.
PostgreSQL 51

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.

Amplia variedad de tipos nativos


PostgreSQL provee nativamente soporte para:
• Números de precisión arbitraria.
• Texto de largo ilimitado.
• Figuras geométricas (con una varie
• Direcciones IP (IPv4 e IPv6).
• Bloques de direcciones estilo CIDR.
• Direcciones MAC.
• Arrays.
Adicionalmente los usuarios pueden crear sus propios tipos de datos, los que pueden ser por completo indexables
gracias a la infraestructura GiST de PostgreSQL. Algunos ejemplos son los tipos de datos GIS creados por el
proyecto PostGIS.
PostgreSQL 53

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).

Productos alrededor de PostgreSQL


El PGDG solo desarrolla el Motor de Datos y un número pequeño de utilidades, para potenciar el trabajo con
PostgreSQL suele ser necesario añadir utilidades externas creadas especialmente para este motor, algunas de estas
herramientas son:

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

Última versión estable 2.1.3


08 de septiembre de 2009

Género RDBMS

Sistema operativo Multiplataforma

Licencia [3] [4]


IPL , IDPL

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.

Choque de nombres con Mozilla Firefox


En abril de 2003, la Fundación Mozilla decidió renombrar su navegador web de Phoenix a Firebird. Esta decisión
causó gran preocupación en lo que se refería al proyecto para bases de datos Firebird, debido a que se asumía que los
usuarios se confundirían entre la base de datos y el navegador web porque estos llevarían el mismo nombre. La
disputa continuó hasta que los desarrolladores de Mozilla firmaron una constancia dejando en claro que el nombre
Firebird era en realidad Mozilla Firebird. La constancia también dejaba en claro que el nombre Mozilla Firebird era
el nombre código del proyecto. El 9 de febrero del 2004, Mozilla renombró a su navegador como Mozilla Firefox,
para así evitar cualquier tipo de confusión.
Firebird 59

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

Microsoft SQL Server


Microsoft SQL Server

Desarrollador

Microsoft
[1]
www.microsoft.com/sql/

Información general

Última versión estable 2008


(10.00.1600.22)
2 de Agosto de 2008

Género RDBMS

Sistema operativo Microsoft Windows

Licencia Microsoft EULA

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.

Características de Microsoft SQL Server

Historia de versiones
Versión Año Nombre de la versión Nombre clave

1.0 1989 SQL Server 1.0 SQL


(OS/2)

4.21 1993 SQL Server 4.21 SEQUEL


(WinNT)

6.0 1995 SQL Server 6.0 SQL95

6.5 1996 SQL Server 6.5 Hydra

7.0 1998 SQL Server 7.0 Sphinx

- 1999 SQL Server 7.0 Plato


OLAP Tools

8.0 2000 SQL Server 2000 Shiloh

8.0 2003 SQL Server 2000 Liberty


64-bit Edition

9.0 2005 SQL Server 2005 Yukon

10.0 2008 SQL Server 2008 Katmai

10.5 2010 SQL Server 2008 R2 Kilimanjaro

• 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.

Lo nuevo de SQL Server 2008


La nueva base de datos contiene mayor seguridad, integración con PowerShell, remueve la configuración del área
expuesta (consola para configurar seguridad), cifrado transparente de datos, auditoría de datos, compresión de datos,
tiene correctores de sintaxis del lenguaje Transact-SQL e IntelliSense (una carácteristica del visual studio que
permite a la base de datos sugerir objetos existentes mientras uno escribe la mitad de la palabra). Así mismo incluye
nuevos tipos de datos y funciones. Entre ellos, datos espaciales, nuevos datos de tiempo (datetime2 y
Datetimeoffset), tipos de datos jerárquicos.

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

Cliente Nativo de SQL


Cliente Nativo de SQL es la biblioteca de acceso a datos para los clientes de Microsoft SQL Server versión 2005 en
adelante. Implementa nativamente soporte para las características de SQL Server, incluyendo la ejecución de la
secuencia de datos tabular, soporte para bases de datos en espejo de SQL Server, soporte completo para todos los
tipos de datos compatibles con SQL Server, conjuntos de operaciones asincrónas, las notificaciones de consulta,
soporte para cifrado, así como recibir varios conjuntos de resultados en una sola sesión de base de datos. Cliente
Nativo de SQL se utiliza como extensión de SQL Server plug-ins para otras tecnologías de acceso de datos,
incluyendo ADO u OLE DB. Cliente Nativo de SQL puede también usarse directamente, pasando por alto las capas
de acceso de datos genéricos.

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.

Bajo consumo de recursos


Una instalación completa del servidor de Interbase 7 requiere aproximadamente 40Mb en disco. Esto es
significativamente mas pequeño que la instalación del cliente de muchos servidores de base de datos de otras
compañías. El servidor usa muy poca memoria mientras está ocioso. Una instalación mínima de un cliente InterBase
requiere aproximadamente 400Kb de espacio en disco.

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.

El camino hacia Borland


Entre 1986 y 1991 el producto fue gradualmente vendido a Ashton-Tate, creadores del famoso dBASE, quienes en
ese entonces se encontraban comprando varias compañías de base de datos con el fin de ampliar su catálogo. La
compañía cayó rápidamente y Borland la compró en 1991, adquiriendo Interbase como parte del trato.

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.

El software libre suele estar disponible


gratuitamente, o al precio de costo de la distribución a través de otros medios; sin embargo no es obligatorio que sea
así, por lo tanto no hay que asociar software libre a "software gratuito" (denominado usualmente freeware), ya que,
conservando su carácter de libre, puede ser distribuido comercialmente ("software comercial"). Análogamente, el
"software gratis" o "gratuito" incluye en ocasiones el código fuente; no obstante, este tipo de software no es libre en
el mismo sentido que el software libre, a menos que se garanticen los derechos de modificación y redistribución de
dichas versiones modificadas del programa.

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

Libertades del software libre


De acuerdo con tal definición, el software es "libre" garantiza las siguientes libertades:[2]

Libertad Descripción

0 la libertad de usar el programa, con cualquier propósito.

1 la libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a tus


necesidades.

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]

Licencias estilo BSD


Llamadas así porque se utilizan en gran cantidad de software distribuido junto a los sistemas operativos BSD. El
autor, bajo tales licencias, mantiene la protección de copyright únicamente para la renuncia de garantía y para
requerir la adecuada atribución de la autoría en trabajos derivados, pero permite la libre redistribución y
modificación, incluso si dichos trabajos tienen propietario. Son muy permisivas, tanto que son fácilmente absorbidas
al ser mezcladas con la licencia GNU GPL con quienes son compatibles. Puede argumentarse que esta licencia
asegura “verdadero” software libre, en el sentido que el usuario tiene libertad ilimitada con respecto al software, y
que puede decidir incluso redistribuirlo como no libre. Otras opiniones están orientadas a destacar que este tipo de
licencia no contribuye al desarrollo de más software libre (normalmente utilizando la siguiente analogía: "una
licencia BSD es más libre que una GPL si y sólo si se opina también que un país que permita la esclavitud es más
libre que otro que no la permite").
Software libre 70

Licencias estilo MPL y derivadas


Esta licencia es de Software Libre y tiene un gran valor porque fue el instrumento que empleó Netscape
Communications Corp. para liberar su Netscape Communicator 4.0 y empezar ese proyecto tan importante para el
mundo del Software Libre: Mozilla. Se utilizan en gran cantidad de productos de software libre de uso cotidiano en
todo tipo de sistemas operativos. La MPL es Software Libre y promueve eficazmente la colaboración evitando el
efecto "viral" de la GPL (si usas código licenciado GPL, tu desarrollo final tiene que estar licenciado GPL). Desde
un punto de vista del desarrollador la GPL presenta un inconveniente en este punto, y lamentablemente mucha gente
se cierra en banda ante el uso de dicho código. No obstante la MPL no es tan excesivamente permisiva como las
licencias tipo BSD. Estas licencias son denominadas de copyleft débil. La NPL (luego la MPL) fue la primera
licencia nueva después de muchos años, que se encargaba de algunos puntos que no fueron tenidos en cuenta por las
licencias BSD y GNU. En el espectro de las licencias de software libre se la puede considerar adyacente a la licencia
estilo BSD, pero perfeccionada.

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.

Comparación con el software de código abierto

Mapa conceptual del software libre y de código abierto.


Software libre 71

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

Software libre en la administración pública


Existe una serie de países en los cuales, sus administraciones públicas, han mostrado apoyo al software libre, sea
migrando total o parcialmente sus servidores y sistemas de escritorio, sea subvencionándolo. Como ejemplos de ello
se tiene a Alemania,[9] [10] Argentina,[11] Brasil,[12] [13] Cuba,[14] Chile,[15] China,[16] Ecuador[17] España,[18]
Francia,[19] México,[20] República Dominicana[21] y Venezuela.[22]
Además de lo anterior, la Administración Publica tiene una cierta función de escaparate y/o guía de la industria que
la hace tener un gran impacto, que debería dirigirse a la creación de un tejido tecnológico generador de riqueza
nacional. Ésta puede crearse fomentando empresas, cuyo negocio sea en parte el desarrollo de nuevo software libre
para la administración, el mantenimiento y la adaptación del existente asimismo auditar el software existente.
Actualmente (2009) el Centro Nacional de Referencia de Aplicación de las TIC basadas en Fuentes Abiertas
(CENATIC), ha elaborado un informe junto a la Universidad Rey Juan Carlos (Grupo GsyC/LibreSoft) y Telefónica
I+D, con el fin de analizar el estado en que se encuentra el proceso de implantación del software de fuentes abiertas
en la Administración Pública española.

Motivaciones del software libre


• La motivación ética, abanderada por la Free Software Foundation, heredera de la cultura hacker, y partidaria del
apelativo libre, que argumenta que el software es conocimiento y debe poderse difundir sin trabas. Su ocultación
es una actitud antisocial y la posibilidad de modificar programas es una forma de libertad de expresión.
• La motivación pragmática, abanderada por la Open Source Initiative y partidaria del apelativo abierto, que
argumenta ventajas técnicas y económicas, con respecto a evitar una tragedia de los anticomunes mejorando los
incentivos.
Aparte de estas dos grandes motivaciones, la gente que trabaja en software libre suele hacerlo por muchas otras
razones, que van desde la diversión a la mera retribución económica, que es posible debido a modelos de negocio
sustentables.[23]

Ventajas del software libre

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.

Impacto del software libre

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

Normalización de bases de datos


Definición general
El modelo entidad relación se basa
como un sitio web en red aprobado por
la IEEE. Originalmente era un
concepto para estudiantes de la
Universidad Harvard, pero actualmente
está abierto a cualquier persona que
tenga un proyecto de base de datos
Figura 1.0: Trabajo (Código, Nombre, Posición, Salario), donde Código es la Clave
abierto (SQL, MySQL, Oracle).
Primaria.
Se rige por las 3 Formas Normales.
• Primera forma normal:
Debe ser una base de datos real, que represente un objeto del mundo y contener tablas basadas en el modelo
entidad-relación.
• Segunda forma normal:
Debe cumplir la primera forma normal y además hacer referencia con una llave foránea.
• Tercera forma normal:
Debe cumplir la segunda forma normal y además contener una clave primaria.

Dependencia funcional Aumentativa


entonces
DNI nombre
DNI,dirección nombre,dirección
Si con el DNI se determina el nombre de una persona, entonces con el DNI más la dirección también se determina el
nombre o su dirección.

Dependencia funcional transitiva

Sean X, Y, Z tres atributos (o grupos de


atributos) de la misma entidad. Si Y
depende funcionalmente de X y Z de Y,
pero X no depende funcionalmente de
Y, se dice entonces que Z depende Dependencia funcional transitiva.
transitivamente de X. Simbólicamente
sería:

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]

Primera Forma Normal (1FN)


Una tabla está en Primera Forma Normal si:
• Todos los atributos son atómicos. Un atributo es atómico si los elementos del dominio son indivisibles, mínimos.
• La tabla contiene una clave primaria.
• La clave primaria no contiene atributos nulos.
• No debe de existir variación en el número de columnas.
• Los Campos no clave deben identificarse por la clave (Dependencia Funcional)
Una tupla no puede tener múltiples valores en cada columna. Los datos son atómicos. (Si a cada valor de X le
pertenece un valor de Y y viceversa)
Esta forma normal elimina los valores repetidos dentro de una BD
Normalización de bases de datos 78

Segunda Forma Normal (2FN)


Dependencia Funcional. Una relación está en 2FN si está en 1FN y si los atributos que no forman parte de ninguna
clave dependen de forma completa de la clave principal. Es decir que no existen dependencias parciales. (Todos los
atributos que no son clave principal deben depender únicamente de la clave principal).
En otras palabras podríamos decir que la segunda forma normal está basada en el concepto de dependencia
completamente funcional. Una dependencia funcional es completamente funcional si al eliminar los
atributos A de X significa que la dependencia no es mantenida, esto es que . Una
dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser
eliminados de X y la dependencia todavía se mantiene, esto es .
Por ejemplo {DNI, ID_PROYECTO} HORAS_TRABAJO (con el DNI de un empleado y el ID de un proyecto
sabemos cuántas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente
dado que ni DNI HORAS_TRABAJO ni ID_PROYECTO HORAS_TRABAJO mantienen la dependencia.
Sin embargo {DNI, ID_PROYECTO} NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI
NOMBRE_EMPLEADO mantiene la dependencia.

Tercera Forma Normal (3FN)


La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos
que no son clave.
Un ejemplo de este concepto sería que, una dependencia funcional X->Y en un esquema de relación R es una
dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R, donde se
mantiene X->Z y Z->Y.
Por ejemplo, la dependencia SSN->DMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura.
Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva vía DNUMBER porque las
dependencias SSN→DNUMBER y DNUMBER→DMGRSSN son mantenidas, y DNUMBER no es un subconjunto
de la clave de EMP_DEPT. Intuitivamente, podemos ver que la dependencia de DMGRSSN sobre DNUMBER es
indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT.
Formalmente, un esquema de relacion está en 3 Forma Normal Elmasri-Navathe,[2] si para toda dependencia
funcional , se cumple al menos una de las siguientes condiciones:
1. es superllave o clave.
2. es atributo primo de ; esto es, si es miembro de alguna clave en .
Además el esquema debe cumplir necesariamente, con las condiciones de segunda forma normal.

Forma normal de Boyce-Codd (FNBC)


La tabla se encuentra en FNBC si cada determinante, atributo que determina completamente a otro, es clave
candidata. Deberá registrarse de forma anillada ante la presencia de un intervalo seguido de una formalizacion
perpetua, es decir las variantes creadas, en una tabla no se llegaran a mostrar, si las ya planificadas, dejan de existir.
Formalmente, un esquema de relación está en FNBC, si y sólo si, para toda dependencia funcional
válida en , se cumple que
1. es superllave o clave.
De esta forma, todo esquema que cumple FNBC, está además en 3FN; sin embargo, no todo esquema que
cumple con 3FN, está en FNBC.
Normalización de bases de datos 79

Cuarta Forma Normal (4FN)


Una tabla se encuentra en 4FN si, y sólo si, para cada una de sus dependencias múltiples no funcionales X->->Y,
siendo X una super-clave que, X es o una clave candidata o un conjunto de claves primarias.

Quinta Forma Normal (5FN)


Una tabla se encuentra en 5FN si:
• La tabla está en 4FN
• No existen relaciones de dependencias no triviales que no siguen los criterios de las claves.
Una tabla que se encuentra en la 4FN se dice que está en la 5FN si, y sólo si, cada relación Diagrama de
de dependencia se encuentra definida por las claves candidatas. inclusión de todas
las formas normales.

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.

Regla No. 1 - La Regla de la información


Toda la información en un RDBMS está explícitamente representada de una sola manera por valores en una tabla.
Cualquier cosa que no exista en una tabla no existe del todo. Toda la información, incluyendo nombres de tablas,
nombres de vistas, nombres de columnas, y los datos de las columnas deben estar almacenados en tablas dentro de
las bases de datos. Las tablas que contienen tal información constituyen el Diccionario de Datos. Esto significa que
todo tiene que estar almacenado en las tablas.
Toda la información en una base de datos relacional se representa explícitamente en el nivel lógico exactamente de
una manera: con valores en tablas. Por tanto los metadatos (diccionario, catálogo) se representan exactamente igual
que los datos de usuario. Y puede usarse el mismo lenguaje (ej. SQL) para acceder a los datos y a los metadatos
(regla 4)

Regla No. 2 - La regla del acceso garantizado


Cada ítem de datos debe ser lógicamente accesible al ejecutar una búsqueda que combine el nombre de la tabla, su
clave primaria, y el nombre de la columna.
Esto significa que dado un nombre de tabla, dado el valor de la clave primaria, y dado el nombre de la columna
requerida, deberá encontrarse uno y solamente un valor. Por esta razón la definición de claves primarias para todas
las tablas es prácticamente obligatoria.
Normalización de bases de datos 80

Regla No. 3 - Tratamiento sistemático de los valores nulos


La información inaplicable o faltante puede ser representada a través de valores nulos
Un RDBMS (Sistema Gestor de Bases de Datos Relacionales) debe ser capaz de soportar el uso de valores nulos en
el lugar de columnas cuyos valores sean desconocidos.

Regla No. 4 - La regla de la descripción de la base de datos


La descripción de la base de datos es almacenada de la misma manera que los datos ordinarios, esto es, en tablas y
columnas, y debe ser accesible a los usuarios autorizados.
La información de tablas, vistas, permisos de acceso de usuarios autorizados, etc, debe ser almacenada exactamente
de la misma manera: En tablas. Estas tablas deben ser accesibles igual que todas las tablas, a través de sentencias de
SQL (o similar).

Regla No. 5 - La regla del sub-lenguaje Integral


Debe haber al menos un lenguaje que sea integral para soportar la definición de datos, manipulación de datos,
definición de vistas, restricciones de integridad, y control de autorizaciones y transacciones.
Esto significa que debe haber por lo menos un lenguaje con una sintaxis bien definida que pueda ser usado para
administrar completamente la base de datos.

Regla No. 6 - La regla de la actualización de vistas


Todas las vistas que son teóricamente actualizables, deben ser actualizables por el sistema mismo.
La mayoría de las RDBMS permiten actualizar vistas simples, pero deshabilitan los intentos de actualizar vistas
complejas.

Regla No. 7 - La regla de insertar y actualizar


La capacidad de manejar una base de datos con operandos simples aplica no sólo para la recuperación o consulta
de datos, sino también para la inserción, actualización y borrado de datos'.
Esto significa que las cláusulas para leer, escribir, eliminar y agregar registros (SELECT, UPDATE, DELETE e
INSERT en SQL) deben estar disponibles y operables, independientemente del tipo de relaciones y restricciones que
haya entre las tablas.

Regla No. 8 - La regla de independencia física


El acceso de usuarios a la base de datos a través de terminales o programas de aplicación, debe permanecer
consistente lógicamente cuando quiera que haya cambios en los datos almacenados, o sean cambiados los métodos
de acceso a los datos.
El comportamiento de los programas de aplicación y de la actividad de usuarios vía terminales debería ser predecible
basados en la definición lógica de la base de datos, y éste comportamiento debería permanecer inalterado,
independientemente de los cambios en la definición física de ésta.
Normalización de bases de datos 81

Regla No. 9 - La regla de independencia lógica


Los programas de aplicación y las actividades de acceso por terminal deben permanecer lógicamente inalteradas
cuando quiera que se hagan cambios (según los permisos asignados) en las tablas de la base de datos.
La independencia lógica de los datos especifica que los programas de aplicación y las actividades de terminal deben
ser independientes de la estructura lógica, por lo tanto los cambios en la estructura lógica no deben alterar o
modificar estos programas de aplicación.

Regla No. 10 - La regla de la independencia de la integridad


Todas las restricciones de integridad deben ser definibles en los datos, y almacenables en el catalogo, no en el
programa de aplicación.

Las reglas de integridad


1. Ningún componente de una clave primaria puede tener valores en blanco o nulos (ésta es la norma básica de
integridad).
2. Para cada valor de clave foránea deberá existir un valor de clave primaria concordante. La combinación de estas
reglas aseguran que haya integridad referencial.

Regla No. 11 - La regla de la distribución


El sistema debe poseer un lenguaje de datos que pueda soportar que la base de datos esté distribuida físicamente en
distintos lugares sin que esto afecte o altere a los programas de aplicación.
El soporte para bases de datos distribuidas significa que una colección arbitraria de relaciones, bases de datos
corriendo en una mezcla de distintas máquinas y distintos sistemas operativos y que esté conectada por una variedad
de redes, pueda funcionar como si estuviera disponible como en una única base de datos en una sola máquina.

Regla No. 12 - Regla de la no-subversión


Si el sistema tiene lenguajes de bajo nivel, estos lenguajes de ninguna manera pueden ser usados para violar la
integridad de las reglas y restricciones expresadas en un lenguaje de alto nivel (como SQL).
Algunos productos solamente construyen una interfaz relacional para sus bases de datos No relacionales, lo que hace
posible la subversión (violación) de las restricciones de integridad. Esto no debe ser permitido.

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

Fuentes y contribuyentes del artículo


Base de datos  Fuente: http://es.wikipedia.org/w/index.php?oldid=43526490  Contribuyentes: .Sergio, 3coma14, Achicoria, AdeVega, Airunp, Aleator, Alexav8, Alhen, Alphabravotango,
Andreasmperu, Angus, Armando-Martin, Armin76, Arrt-932, Ascánder, Baiji, Baldur71, Biasoli, Bigsus, BlackBeast, BuenaGente, Carrillo1, Cesar4545, ChaTo, Chanchicto, Cinabrium, Claudio
Elias, Comae, Damián del Valle, Daniel G., Dferg, Diegusjaimes, Diotime, Dodo, Dpr, Dreitmen, Drini2, Ecemaml, Eddanlo, Ediazrod, Eduardosalg, Edub, Eli22, Elisardojm, Elwikipedista,
Equi, Er Komandante, Er javi 93, FAR, Fabio.morales, Fcr, Foundling, FrancoGG, Furti, Gaabriieelaa, Gabriel Acquistapace, Gacq, GermanX, Gizmo II, Globalphilosophy, Gonis, Grivadeneira,
HUEVOCHIPS, Hispa, Humbefa, Humberto, Irbian, JMPerez, Jesuja, Jgalgarra, Jkbw, Jonik, JorgeGG, Jsanchezes, Jugones55, Klondike, Kokoo, Lazamazu, Leonardo, Levhita, Lourdes
Cardenal, Magister Mathematicae, Maldoror, Mansoncc, ManuelGR, Matdrodes, Mel 23, Mikelo, Moriel, Mortadelo2005, Muro de Aguas, Murven, Máximo de Montemar, Napoleón333,
Nelauxiliadora, No sé qué nick poner, Nonick, Nubecosmica, OMenda, Olivares86, Opinador, Orgullomoore, Otermin, PACO, Pablin3, Pabloab, Pablotorres, Pacolope, PeiT, Petruss, Pieter,
PoLuX124, Ppfk, Renacimiento, RoyFocker, Rsg, Rumpelstiltskin, Sabbut, Sanbec, Sauron, Savh, Sergio Andres Segovia, Shasa, Sramco, Superzerocool, Taichi, Tano4595, Taragui, Tirithel,
Tomatejc, Tostadora, Wesisnay, Xenoforme, Xpel1, Yamaneko, Yrithinnd, ZackBsAs, Zanorte, Zuirdj, conversion script, 777 ediciones anónimas

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

Fuentes de imagen, Licencias y contribuyentes


Archivo:OOo-2.0-Base-ca.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:OOo-2.0-Base-ca.png  Licencia: GNU Lesser General Public License  Contribuyentes: German,
Iradigalesc
Image:ProcesamientoDatos.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:ProcesamientoDatos.png  Licencia: Public Domain  Contribuyentes: Muro de Aguas, Porao,
Rocket000
Archivo:Emp Tables (Database).PNG  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Emp_Tables_(Database).PNG  Licencia: Public Domain  Contribuyentes: User:Jamesssss
Archivo:Nullmassigno.jpg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Nullmassigno.jpg  Licencia: GNU Free Documentation License  Contribuyentes: Marcos Atozqui
Archivo:Mysql.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Mysql.svg  Licencia: GNU General Public License  Contribuyentes: Frédéric Bellaiche
Archivo:Mysql9.JPG  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Mysql9.JPG  Licencia: Creative Commons Attribution-Sharealike 2.5  Contribuyentes: Ncsadmin, Raysonho, 1
ediciones anónimas
Archivo:Mtop.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Mtop.png  Licencia: Creative Commons Attribution-Sharealike 3.0  Contribuyentes: User:Gbarrer
Imagen:Question book.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Question_book.svg  Licencia: GNU Free Documentation License  Contribuyentes: Diego Grez, Javierme,
Loyna, Remember the dot, Victormoz, Wouterhagens, 5 ediciones anónimas
Archivo:Commons-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Commons-logo.svg  Licencia: logo  Contribuyentes: User:3247, User:Grunt
Archivo:Pg logo.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Pg_logo.png  Licencia: BSD  Contribuyentes: Jeff MacDonald
Archivo:Yes check.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Yes_check.svg  Licencia: Public Domain  Contribuyentes: User:Gmaxwell, User:WarX
Archivo:Ds-firebird-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Ds-firebird-logo.svg  Licencia: desconocido  Contribuyentes: Stefan Heymann for the Firebird Project
Archivo:X mark.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:X_mark.svg  Licencia: GNU Free Documentation License  Contribuyentes: Abnormaal, DieBuche, Gmaxwell,
Kilom691, Kwj2772, MGA73, Mardetanha, Penubag, Pseudomoi, WikipediaMaster, 1 ediciones anónimas
Imagen:Heckert GNU white.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Heckert_GNU_white.svg  Licencia: Free Art License  Contribuyentes: Aurelio A. Heckert
<aurium@gmail.com>
Archivo:Mapa conceptual del software libre.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Mapa_conceptual_del_software_libre.svg  Licencia: GNU Free Documentation
License  Contribuyentes: René Mérou
Archivo:Richard Matthew Stallman.jpeg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Richard_Matthew_Stallman.jpeg  Licencia: GNU Free Documentation License
 Contribuyentes: BrokenSegue, DCEvoCE, Dbenbenn, Durin, Emijrp, Guety, Niqueco, Porao, Sj, Solon, Ævar Arnfjörð Bjarmason, 2 ediciones anónimas
Archivo:MapaConceptualFLOSS.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:MapaConceptualFLOSS.png  Licencia: Creative Commons Attribution 3.0  Contribuyentes:
User:VARGUX
Archivo:Wikisource-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikisource-logo.svg  Licencia: logo  Contribuyentes: Nicholas Moreau
Archivo:Wikinews-logo.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikinews-logo.svg  Licencia: logo  Contribuyentes: User:Simon, User:Time3000
Imagen:Wikiversity-logo-Snorky.svg  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:Wikiversity-logo-Snorky.svg  Licencia: desconocido  Contribuyentes: -
Archivo:TablaRelacional2.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:TablaRelacional2.png  Licencia: Creative Commons Attribution 3.0  Contribuyentes: User:Edtruji
Archivo:DependenciaFunional2.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:DependenciaFunional2.png  Licencia: GNU Free Documentation License  Contribuyentes:
User:Edtruji
Archivo:FormasNormales.png  Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:FormasNormales.png  Licencia: Public Domain  Contribuyentes: User:Diego diaz espinoza
Licencia 86

Licencia
Creative Commons Attribution-Share Alike 3.0 Unported
http:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/

You might also like