Está en la página 1de 48

Computacin II

Unidad 2. Bases de datos

Universidad Abierta y a Distancia de Mxico

Licenciatura en Matemticas

9 cuatrimestre

Computacin II

Unidad 2: Bases de datos

Clave:
050930936

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
ndice
Unidad 2. Bases de datos .................................................................................................. 4
Presentacin de la unidad.................................................................................................. 4
Propsitos de la unidad...................................................................................................... 4
Competencia especfica ..................................................................................................... 4
2.1. Fundamentos .............................................................................................................. 4
2.1.1. Conceptos Bsicos ................................................................................................. 4
2.1.2. Panorama en los modelos de datos........................................................................ 6
2.1.3. Modelo Relacional .................................................................................................. 7
2.1.4. Elementos Entidad-Relacin................................................................................... 7
2.1.5. Convenciones de Diseo ........................................................................................ 8
2.1.6. Limitaciones ........................................................................................................... 9
2.1.7. Proyecto MySQL .................................................................................................. 10
2.2 SQL ........................................................................................................................... 16
2.2.1. lgebra y Clculo Relacional ................................................................................ 17
2.2.2. Estructura ............................................................................................................. 24
2.2.3. Consultas y Subconsultas .................................................................................... 28
2.2.4. Actualizaciones y Borrado .................................................................................... 33
Actividad 1. Paradigma Entidad - Relacin ...................................................................... 36
2.2.5. Vistas ................................................................................................................... 37
Actividad 2. Clculo relacional ......................................................................................... 40
2.3. Normalizacin ........................................................................................................... 40
2.3.1. Dependencia Funcional ........................................................................................ 41
2.3.2. 1 Forma Normal .................................................................................................. 42
2.3.3. 2 Forma Normal .................................................................................................. 43
2.3.4. 3 Forma Normal .................................................................................................. 44
2.3.5. Forma Normal de Boyce-Codd ............................................................................. 45
2.4. Caso de Estudio........................................................................................................ 45

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
2.4.1. Base de datos de vinos ........................................................................................ 45
Actividad 3. SQL en el caso de estudio ............................................................................ 46
Autoevaluacin ................................................................................................................ 47
Evidencia de aprendizaje. Base de datos..................................................................... 47
Autorreflexiones ............................................................................................................... 48
Cierre de la unidad........................................................................................................... 48
Para saber ms ............................................................................................................... 48
Referencias Bibliogrficas ................................................................................................ 48

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
Unidad 2. Bases de datos

Presentacin de la unidad
En la presente unidad examinars una de las herramientas desarrollada por las Ciencias de la
Computacin con una gran gama de aplicaciones posibles. El uso principal de las
computadoras es la de hacer clculos y mapear elementos entre conjuntos pero otro uso
directamente derivado del desarrollo tecnolgico es el de almacenar datos de forma eficiente.

Propsitos de la unidad

Identificars el panorama de los modelos de datos


Identificars los aspectos del modelo relacional
Identificars los elementos entidad relacin para disear bases de datos
Identificars el lenguaje SQL
Usars el lenguaje SQL para crear y manejar una base de datos
Disears bases de datos de forma ptima

Competencia especfica
Aplicar el paradigma de bases de datos relacionales para crear y manipular datos usando SQL
de forma eficiente a travs del diseo y anlisis del lgebra y Clculo Relacional as como su
respectiva optimizacin mediante las diferentes tcnicas de normalizacin.

2.1. Fundamentos
A lo largo de esta seccin examinars los aspectos que fundamentan tericamente el diseo y
manipulacin de bases de datos. Repasars distintos esquemas y paradigmas usados para
almacenar y consultar datos para despus concentrarte en el modelo relacional propuesto por
Edgar. Frank. Codd en los 70s y conocers el esquema entidad-relacin as como las
limitaciones y panorama en almacenamiento de datos.

2.1.1. Conceptos Bsicos


El almacenado de datos es una de las tareas ms engaosas que se pueden llevar a cabo en
una computadora. Engaosas porque el desarrollo tecnolgico conlleva dos aspectos, la

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
cantidad de datos que se generan son, hoy en da, inmensamente grandes, tambin porque los
dispositivos de almacenamiento se abaratan ao con ao lo que facilita la posibilidad de adquirir
medios de almacenamiento masivo y por lo tanto llenarlos de datos. Sin embargo, lo que
queremos con estos datos no es nicamente guardarlos, tambin queremos recuperarlos y
como viste en la unidad pasada por rpidas que puedan ser las computadoras existe siempre
una forma extremadamente ineficiente de buscar en los datos. O dicho de otra forma, los datos
de entrada de un algoritmo pueden hacer que este sea significativamente ms lento en la
recuperacin de datos si este es de un orden de complejidad muy lento.
Sin embargo es necesario grandes cantidades de informacin sobre todo en una poca donde
lo que ms fcil tienes a la mano es formas de generar informacin y tcnicas para buscar
correlaciones en ellos. Aqu es donde vale la pena pensar en disear un sistema para dicha
tarea, es decir, para almacenar y buscar datos.
Lo primero que tienes que definir es, que es lo que vas a guardar. Al modelar, cualquier tipo de
datos, tienes que distinguir una estructura discreta abstrada de la realidad. Entonces es por
esto que vas a distinguir entre entidades y relaciones entre ellas.
Una entidad u objeto puede ser cualquier cosa que puedas describir con un conjunto de
atributos. Por ejemplo una persona tiene un nombre, RFC, altura, preferencia poltica, u otra
caracterstica que lo hace nica y lo identifica con los dems, o bien pueden ser una anotacin
en un partido de futbol mismo que consta de minuto en el que fue realizado, jugador que lo
logr y un jugador descrito por nombre, nmero, equipo, u otras. Las diferentes entidades se
agrupan por las relaciones existentes entre ellas, por ejemplo los goles son realizados por
jugadores.
Cada elemento que pueda ser agrupado dentro del conjunto descrito por estas entidades y sus
correspondientes atributos la denominaremos registro. Si cada registro est representado
nicamente por un elemento se dice que la propiedad o conjunto de propiedades que lo
distinguen como nico es una llave para esa entidad.
Denomina pues, como primera aproximacin que una base de datos al sistema para agrupar
una o ms de estas relaciones en algn dispositivo de almacenamiento. Y es que la definicin
de base de datos concierne a estos diversos archivos as como a los diferentes tipos de
usuarios que hacen uso de ella.
Se distinguen tres tipos de usuarios de una base de datos: los administradores, los
programadores de sistemas, y los usuarios finales. Los usuarios finales son el tipo de
usuario menos sofisticado ya que usualmente el uso de la base de datos es transparente para
l debido a que interacta con la misma a travs de algn sistema programado por los
programadores de sistemas quienes pueden calificar como un nivel de sofisticacin mayor al del
usuario final, ya que estos se encargan de definir las entidades donde se va a escribir en la
base de datos. Un tanto ajeno a estos dos tipos de usuarios que guardan una relacin directa

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
entre ellos est el administrador de la base, quien es l que se encarga de administrar las
transacciones y usuarios de toda la base, los dos tipos de usuario anteriores dependen de las
polticas de este ltimo.
De hecho al sistema de base de datos que se define en el prrafo anterior se denomina ms
precisamente como Sistema Manejador de Base de Datos (SMBD, o bien, las siglas en ingls
son DBMS que es como se referencia en todos los textos tcnicos) y este es el que mantiene la
consistencia de los datos confiados a la base de datos a travs de un sistema de archivos y un
lenguaje para tal efecto. Los SMDB constan de:
-

Una estructura de datos


Un lenguaje para la definicin y manipulacin de la estructura de datos
Polticas para determinar restricciones que garanticen la integridad, seguridad y control
de concurrencia

La determinacin de las propiedades, llaves, relaciones e incluso la base de datos entera son
aspectos abstractos que puedes determinar en buena medida de forma emprica. Es decir,
basndote en tu experiencia vas a determinar que atributos necesitamos plasmar en nuestras
relaciones.
Otro aspecto importante que caracteriza a los SMBD es la independencia de los datos, un
concepto que determina el nivel de cohesin que tienen los programas que hacen uso de la
base de datos y la base datos especficamente. A modo de ejemplo puedes pensar en un
sistema de nmina y la base de datos donde se guarden los datos de dicho sistema. Si el
sistema tiene un grado de independencia muy bajo (dependencia alta) entonces cualquier
modificacin al sistema se va a ver reflejada en el rediseo de la base, o cualquier falta de
consistencia en la base se reflejar en el funcionamiento del sistema de nmina. En el otro
extremo, un nivel de independencia (datos muy independientes) muy bajo requiere una gran
cantidad de bsquedas y verificaciones lo que hara un sistema muy lento. Entonces podemos
inferir que el nivel de independencia tiene un nivel ptimo que requiere ser buscado y
determinado caso a caso.

2.1.2. Panorama en los modelos de datos


Durante las ltimas tres dcadas han aparecido diferentes paradigmas para almacenar y
recuperar grandes cantidades de datos, y aunque en esta unidad no te vas a concentrar en el
esquema relacional hars una revisin de otros esquemas para la creacin de bases de datos,
como el jerrquico, el de grficas e incluso el paradigma NoSQL.
Considerando los diferentes elementos que conforman una base de datos puedes destacar tres
modelos relevantes. El modelo jerrquico, que conceptualiza la informacin como una
estructura arbrea con un esquema de tal forma que las relaciones entre los datos se

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
establecen con un paradigma padre/hijo. Un nodo padre puede tener varios hijos pero un hijo
slo un padre.
El esquema de red en cambio, permite que cada nodo hijo tenga varios padres (y tambin
varios hijos) permitiendo as una representacin ms natural de las entidades modeladas.
Sin embargo, estos esquemas consideran que los datos tienen una relacin jerrquica
intrnseca, relacin que requiere tiempo de cmputo determinar y separar pero cuando
consideramos una gran cantidad de datos como los que pueden manejar empresas como
Google, Facebook, Microsoft, eBay, etctera, as como las operaciones necesarias para realizar
bsquedas cruzadas en esta masa de datos y tambin las necesidades de escalabilidad en un
entorno cambiante es cuando la hiptesis de la estructura en los datos parece quedarse corta.
Es en este contexto es que aparece el paradigma NoSQL que tiene por objetivo responder a
estas necesidades de acceso a la informacin de forma eficiente dejando de lado algunas
necesidades como puede ser la ausencia del esquema intrnseco de los datos.

2.1.3. Modelo Relacional


El modelado de datos, se mencion con anterioridad, es una tarea que requiere un proceso de
abstraccin en el que observars un conjunto de entidades relacionadas entre s y descritas por
un conjunto de atributos con un dominio especfico. El paradigma de modelacin de datos que
usaremos es el modelo relacional o entidad-relacin.
Este se caracteriza por describir una relacin en trminos de relaciones entre diferentes
dominios, como por ejemplo, un nmero complejo est definido por dos enteros, cada uno de
estos seran pues atributos distintos y cada nmero un registro distinto. O tambin puedes
pensar en trminos del ejemplo de sistema de nmina mencionado previamente, donde con
facilidad se pueden distinguir un conjunto variado de entidades distintas como pueden ser el
empleado, el pago quincenal, entre otros, y cada una de estas entidades tiene una descripcin
heterognea de dominios que van desde los nmeros flotantes hasta las cadenas de texto.
Como dijimos, los Sistemas Manejadores de Bases de Datos constan de
-

Una estructura de datos: En este caso es una relacin o tabla.


Un lenguaje para la definicin de la estructura de datos.
Un lenguaje para la manipulacin de datos: Para este caso usaremos lgebra relacional
Restricciones de seguridad e integridad.

2.1.4. Elementos Entidad-Relacin


Una relacin corresponde de forma informal a una tabla cuya definicin est especificada por
un esquema de datos. Este consta de:

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
-

Nombre de la relacin o tabla.


Conjunto de atributos nombrados especficamente.
Un dominio al cual pertenece cada atributo.

Los dominios pueden ser atmicos, que corresponden a los tipos de datos usuales como
enteros, flotantes o booleanos. O bien pueden ser compuestos como puede ser un nmero
telefnico (que consta de nmeros, parntesis y guiones).
Una relacin consta de dos partes principales. El encabezado o esquema (schema por su
traduccin al ingls) que describe el conjunto de atributos que definen la relacin, y el cuerpo
de la misma, que no es otra cosa que un conjunto de n-tuplas, se define como grado de la
relacin a la cardinalidad del conjunto de atributos, en este caso n, y como cardinalidad de la
relacin a la cantidad de tuplas agrupadas en esa relacin. En el siguiente ejemplo se
presentan estos conceptos. La llave de una relacin es el atributo (o conjunto de atributos) que
hacen nica a cada una de las tuplas en la relacin.
Ejemplo.
La relacin empleado consta de los atributos (rfc, nombre, paterno, materno, puesto, sueldo)
El esquema de dicha relacin es:
empleado(rfc, nombre, paterno, materno, puesto, sueldo)
La relacin con tres registros es
rfc
nombre
paterno
besmMariana Bentez
770216fx5
esmrRodrigo Estvez
821021gh7
mafhHoracio Martnez
920226j24

materno
Surez

puesto
Investigadora

sueldo
$30,000

Miln

Programador/Analista $25,000

Fernndez

Becario

$5,000

En este ejemplo anterior la relacin es de grado 6, su cardinalidad es de 3 y la llave es el


atributo rfc.

2.1.5. Convenciones de Diseo


Una de las caractersticas de la modelacin de datos (o incluso de fenmenos naturales) es que
las relaciones plasmadas por quien este diseando una base de datos siguen un estilo personal

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
de persona a persona, y esto puede hacer que leer o intentar entender la estructura de una
base de datos sea una tarea muy complicada pero esto lo podemos atenuar si asumimos
ciertas convenciones que nos pueden ayudar en el proceso de diseo.
S te basas en que las relaciones agrupan registros todos con una misma estructura es
preferible denominar a las relaciones en plural, por ejemplo: alumnos, empleos, pelculas.
Otra convencin de diseo importante que adoptars es que la llave, como puedes constatar
en el ejemplo anterior, deber ir subrayada. Ya sea uno o varios atributos, con esto podrs
saber cul de ellos hace nicos a todos los registros. Este aspecto ser importante despus
cuando extendamos una relacin (la extensin tiene la caractersica que aumenta el nmero de
atributos listados para alguna tabla y esta se puede hacer con el producto cartesiano entre dos
relaciones) tendremos que indicar el campo mediante el cual vamos aparear las diferentes
tuplas, usualmente lo haremos mediante las llaves que identifican a un registro entre las
distintas tablas.
Piensa por un momento que los datos a modelar es la dinmica de una editorial en el que los
autores escriben sus libros, los lectores los compran, y los libros tienen sus atributos
especficos. Puedes distinguir tres entidades: libros, autores, lectores. Los lectores ,
identificados por su rfc y que constan de una serie de atributos estndar para cualquier tipo de
lector (nombre, direccin, preferencia_literaria, autor_favorito, etc), pueden comprar uno ms
libros identificadas por un id para cada uno y que constan, tambin, por una serie estndar de
atributos comunes para pelculas (como nombre nombre, genero_literario, autor,, etc).
La cardinalidad entre las relaciones autores-libros decimos que es uno a muchos, ya que es
posible encontrar que un autor tenga varios libros mientras que todos los autores son, por
definicin, distitntos
Si tuviramos una relacin que liste el autor favorito de cada lector, decimos que esta tiene una
cardinalidad uno a uno ya que cada lector slo tiene un autor favorito.
Existe otro tipo de cardinalidad denominada de muchos a muchos y estas aparecen cuando la
relacin que agrupa a otras dos relaciones no tiene un identificador comn, estas suelen ser
catlogos de cosas.

2.1.6. Limitaciones
Todo modelo tiene una serie de limitantes que se derivan de su propia conceptualizacin. En
este caso te concentrars en una estructura subyacente en los datos de tal forma y ah es
donde el modelo relacional encuentra sus principales limitaciones ya que no toda la informacin
est bien estructurada.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

Computacin II
Unidad 2. Bases de datos
Considerar que todos los datos se ajustan a una estructura bien definida es un requerimiento
suficientemente fuerte y de hecho no todos los tipos de datos lo cumplen, por ejemplo, los
siguientes tipos de datos
-

Datos temporales y georreferenciados


Datos multimedia
Datos no estructurados / estructura dbil

Algunas de las limitaciones relacionadas con el lenguaje que usa el modelo relacional para
manejar los datos, SQL, son:
-

Incapacidad para hacer consultas recursivos. Todas las consultas que se hacen en SQL
son de tipo lineal en el sentido de que todos los valores que queramos presentar deben
recuperarse con anterioridad con otra consulta.
Construir una consulta muy complicada (con muchas restricciones y llamando a varias
tablas) puede ser prohibitivo y complicado de construir
Pero el modelo relacional tiene otros aspectos que se derivan del modelo mismo.
Una entidad sobrevive nicamente si la definimos como una relacin. Por ejemplo, si
tuviramos una tabla Cliente que tuviera los campos calle, nmero, colonia, estado, esto
no conforma la direccin a menos de que la definamos como tal en una Relacin.
La atomicidad pensada en los tipos de datos que conforman las distintas relaciones
contribuye a que la conformacin de consultas ms complejas sea muy difcil de
computar.

2.1.7. Proyecto MySQL


Para poder usar una base de datos hars uso del proyecto MySQL, mismo que es una
implementacin del lenguaje que revisaremos en la seccin siguiente. Lo puedes bajar de la
siguiente direccin
http://dev.mysql.com/downloads/windows/installer/
De donde tienes que seleccionar la distribucin web o la instalable, que es esencialmente lo
mismo con la excepcin que uno hace uso extensivo del internet para bajar los archivos que
componen al manejador o bien puedes bajar el paquete entero.
Las siguientes pantallas son las indican el lugar de donde debes bajar el sistema para instalarlo
en tu computadora.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

10

Computacin II
Unidad 2. Bases de datos

Figura 1. A) Sitio para bajar MySQL. B) Confirmacin

Nota: Para poder instalar MySQL requieres instalado previamente el entorno de desarrollo .NET
ver. 4 de Microsoft, el cual puedes bajar de http:// http://www.microsoft.com/enus/download/details.aspx?id=17113. Una vez bajado el instalador debes ejecutarlo, donde
debers obtener la siguiente pantalla.

Figura 2. Pgina principal del instalador.

Donde debers hacer click en la primera opcin. Por lo pronto no es necesario ejecutar la
opcin de actualizacin. Una vez que selecciones la opcin Next vers el tipo de instalacin que
se va a realizar.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

11

Computacin II
Unidad 2. Bases de datos

Figura 3. Tipo de instalacin.

En la que hay que seleccionar la opcin Next para acceder a la opcin que checa la
configuracin del sistema y posteriormente la ejecucin de la instalacin.

Figura 4. A) Checar configuracin B) Instalacin

Una vez que la instalacin est configurada podemos hacer click en Execute. Posteriormente,
una vez realizada la instalacin el programa nos pide configurar la instalacin en esta pantalla.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

12

Computacin II
Unidad 2. Bases de datos

Figura 5. Chequeo de configuracin

Esta pantalla, despus de hacer click en Next, el instalador se encarga de hacer el chequeo y
debers observar las siguientes pantallas. En la que hay que elegir la contrasea del usuario de
administracin (Figura 6 b).

Figura 6. A) Establecer el servicio en Windows B) Contrasea del administrador.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

13

Computacin II
Unidad 2. Bases de datos
En la siguiente pantalla, a la que accedemos haciendo click en el botn Adduser tenemos que
seleccionar el usuario que estaremos usando. En el ejemplo mostrado en la Figura 7 puedes
ver que el usuario escogido es checo junto con su respectiva contrasea.

Figura 7. Creacin de usuario.

Lo nico que resta es escoger el nombre del servicio al que llamar Windows de aqu en
adelante (Figura 8).

Figura 8. Configuracin del servicio.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

14

Computacin II
Unidad 2. Bases de datos
Una vez que hagamos click en Next la instalacin estar completa.

Figura 9. Fin de la instalacin.

Al terminar la instalacin se ejecutar el cliente de MySQL y aparecer un icono junto al reloj


indicando que el servicio de MySQL est activado.

Figura 10. A) MySQL Workbench B) cono MySQL

Para ejecutar el cliente de MySQL tienes que ejecutar el shell de Windows, esto es,
Inicio -> Ejecutar -> cmd
y obtendrs la pantalla que se presenta en la Figura 11.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

15

Computacin II
Unidad 2. Bases de datos

Figura 11. Shell de Windows y MySQL

Despus slo tienes que ejecutar el comando mysql con el usuario especificado en la Figura 7,
en este caso la ejecucin es:
C:\...> mysql u checo p
Es posible que antes tengas que cambiarte al directorio donde se haya instalado todo MySQL,
en el caso del ejemplo el directorio donde se instal el programa es:
C:\Archivos de programa\MySQL\MySQL Server 5.6\
Si quieres ejecutarlo desde cualquier directorio tienes que agregar esa ruta (donde sea que se
haya instalado) en el PATH de Windows de la siguiente manera
PATH=%PATH%; C:\Archivos de programa\MySQL\MySQL Server 5.6\
Es en este cliente de la base de datos en el que vas a tener que ejecutar todas las instrucciones
que revisars a continuacin.

2.2. SQL
Como se especifica en la seccin anterior toda base de datos requiere de un lenguaje para
manejar los datos guardados. Para las bases de datos relacionales usars el SQL. MySQL es
una implementacin especfica de este lenguaje (otras implementaciones son Sqlite y
PostgresQL).

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

16

Computacin II
Unidad 2. Bases de datos
Examinars los fundamentos del SQL que son el lgebra y Clculo Relacional para despus
mostrar la estructura general del lenguaje lo que nos va a permitir generar consultas.

2.2.1. lgebra y Clculo Relacional


Algebra Relacional
El lgebra Relacional es la estructura que te va a permitir operar y manipular las diferentes
relaciones. Las operaciones que realicemos con las relaciones debern resultar en una relacin
tambin. Esta propiedad de cerradura la tiene el lgebra Relacional.
A todas las expresiones del lgebra relacional la denominars query o consulta. Las
operaciones del lgebra Relacional caen en cuatro diferentes conjuntos:
1. Operaciones Estndar: Unin, Interseccin y Diferencia
2. Operaciones de Filtrado: Seleccin y Proyeccin
3. Operaciones para Combinar: Producto y Join
Operaciones Neutras: Renombrado de tablas.
Estas operaciones, aunque limitadas, sern la base y las que ms pueden usarse para extraer
datos de una base de datos.
Si y son un par de relaciones que cumplen con tener el mismo esquema, es decir, el mismo
conjunto de atributos. Las operaciones de unin, interseccin y diferencia se definen de la forma
que sigue:
-

Unin
: Es el conjunto de todas las tuplas tal que
o
. La unin presenta
al elemento nicamente una vez.
Interseccin
: Es el conjunto de todas las tuplas tal que
y
.
Diferencia
: Es el conjunto de todas las tuplas tal que
pero
. Esta
operacin no es conmutativa ya que la diferencia
puede diferir completamente la
original.

Considera el siguiente ejemplo. Si tuviramos dos relaciones

con el siguiente esquema:

pasajeros( #pasajero, nombre, edad, sexo )


#pasajero
2343

nombre
Ernesto

ed d
35

sexo
h

#pasajero
7638

nombre
Elena

edad
45

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

sexo
m

17

Computacin II
Unidad 2. Bases de datos
3241
8723
8323

Juan
Alicia
Ofelia

16
78
34

h
m
m

5372
8323
2343

Andrs
Ofelia
Ernesto

21
34
35

h
m
h

nombre
Ernesto
Ofelia

edad
35
34

sexo
h
m

Entonces la Union, Interseccin y Diferencia de estas tablas son


#pas jero
2343
3241
8723
7638
5372
8323

nombre
Ernesto
Juan
Alicia
Elena
Andrs
Ofelia

edad
35
16
78
45
21
34

sexo
h
h
m
m
h
m

#pasajero
3241
87 3

nombre
Juan
Alicia

edad
16
78

sexo
h
m

#pasajero
2343
8323

Las operaciones de proyeccin y seleccin ayudan a filtrar relaciones imponiendo alguna


condicin
-

Proyeccin: Se
es una relacin entonces la proyeccin de , denotada como
( ), forma una nueva relacin pero con una seleccin de los atributos que la
+. En otras palabras,
componen, a saber nicamente los atributos *
seleccionamos nicamente algunos de los atributos que constituyen .
Seleccin: Si es una relacin vlida entonces el operador de seleccin produce una
nueva relacin pero seleccionando algunas tuplas (o registros) de . La denominamos
( ) donde es una condicin lgica vlida aplicable a .

Ejemplo
Si es la misma relacin antes definida, la proyeccin que toma nicamente los atributos si
haces la proyeccin de los atributos #empleado y sexo tendras que hacerlo de la siguiente
manera:
( )
y el resultado sera
#empleado edad
2343
35
3241
16
8723
78
8323
34
Y si haces la seleccin sobre la tabla
edad la seleccin se especifica cmo.

de todos los pasajeros que sean mayores de

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

18

Computacin II
Unidad 2. Bases de datos
( )
y lo que obtienes se expresa en la siguiente tabla
#pasajero nombre
2343
Ernesto
8723
Alicia
7638
Elena
5372
Andrs
8323
Ofelia

edad
35
78
45
21
34
( )

sexo
h
m
m
h
m

Un refinamiento ms podra ser la proyeccin sobre la seleccin anterior para obtener


nicamente la edad y el sexo. Es decir, obtener la edad y el sexo de los pasajeros que sean
mayores de edad sobre la unin de
.
(
))
(
con lo que obtienes
#pasajero edad
sexo
2343
35
h
8723
78
m
7638
45
m
5372
21
h
8323
34
m
Un refinamiento ms sobre esa ltima relacin sera seleccionar aquellos pasajeros que sean
mujeres. La expresin quedara como
(
))
(
Y los datos seleccionados quedan como:
#pasajero
8723
7638
8323

edad
78
45
34

sexo
m
m
m

Las operaciones con las que hemos trabajado hasta ahora nos permiten refinar los datos en
alguna relacin, pero usualmente estars trabajando con dos o ms relaciones heterogneas,
entonces requieres alguna operacin que te permita conformar tablas donde no necesariamente
ambas contienen los mismos atributos, es decir vas a necesitar extender las relaciones con
atributos contenidos en otra relacin., por ejemplo, nosotros tenemos una tabla pasajeros y otra
destinos, podramos requerir conocer a que destino viajaron todos los pasajeros mayores de 60
aos.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

19

Computacin II
Unidad 2. Bases de datos
Esto lo lleva a cabo la operacin de producto, si y son tablas cuyos esquemas no
necesariamente comparten atributos, entonces denotamos al producto como
de tal forma
(
)
que se forme la tupla
donde
y
. Suponiendo que estas tablas tengan atributos
en comn y quisieras referirte a ellos sin temor a equivocarte, necesitas entonces alguna forma
de referenciarlos, para tal efecto usars el operador (punto), por ejemplo
se
refiere a la columna
de la relacin .
En el siguiente ejemplo podemos ver el producto de las relaciones presentadas e y la tabla
resultado
. Los esquemas para ambas relaciones es el mismo, solo cuentan con un
atributo denominado coordenada.
coord
1
2
4

coord.
-1
-2
-3

1
1
1
2
2
2
3
3
3

-1
-2
-3
-1
-2
-3
-1
-2
-3

Cuando al extender tablas suele ser muy comn que ambas compartan atributos y al hacer el
producto requieras que el resultado se restrinja a aquellos valores que son iguales en las
columnas compartidas. A esta operacin lo llamamos join (ms especficamente natural join
pero como no vers otro tipo puedes identificarlo nicamente como join).
Si
son relaciones cuyos esquemas son
(
)
(
)
entonces el join de

lo denotas por
(

y la relacin cuyo esquema es


)

y las tuplas que lo conforman son el subconjunto de tuplas de

que cumplen con

Ejemplo.
Si tienes un par de relaciones
definidas como se presenta a continuacin, entonces su join
sera como se presenta en la ltima tabla, donde el atributo por el cul se unen es V.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

20

Computacin II
Unidad 2. Bases de datos
K
1
2
3

V
5
6
8

V
5
8

A
6
2

B
8
9

K
1
3

P.V
5
8

Q.V
5
8

A
6
2

B
8
9

Otro ejemplo ms prctico es el de una hipottica aerolnea. Si tenemos las tablas pasajeros,
vuelos y destinos cuyos esquemas son y tuplas son:
pasajeros(#pasajero, #vuelo, nombre, edad, sexo)
destinos(#destino, pas, estado, nombre)
vuelos(#vuelo, origen, destino, salida, arribo)
#pasajero
2343
3241
8723
7638
5372
8323
pasajeros
#vuelo
113
421
435
442
443
334
321
450
116

#vuelo
334
432
432
113
435
113

nombre
Ernesto
Juan
Alicia
Elena
Andrs
Ofelia

edad
35
16
78
45
21
34

sexo
h
h
m
m
h
m

#destino
1

pas
Mxico

estado
Oaxaca

2
3
4

Brasil
China
Mxico

Sao Paulo
Pekn
Nuevo
Len

nombre
Puerto
Escondido
Sao Paulo
Muralla
Monterrey

destinos
origen
3
1
1
1
4
2
4
2
3

destino
2
3
2
4
1
1
2
4
1

salida
7:00
10:00
16:00
20:00
14:00
13:00
15:00
20:00
11:00

arribo
21:00
04:00
10:00
21:00
15:00
23:00
01:00
10:00
05:00

vuelos

El join que resulta de unir las relaciones pasajeros (P) y vuelos (V) a travs del atributo (#vuelo)
queda como sigue
#pasajero
2343
3241
5372
5372
7638
8323
8323
8723

P.#vuelo
334
432
435
435
113
113
113
432

nombre
Ernesto
Juan
Andrs
Andrs
Elena
Ofelia
Ofelia
Alicia

edad
35
16
21
21
45
34
34
78

sexo
h
h
h
h
m
m
m
m

V.#vuelo
334
435
334
435
443
113
116
442

origen
2
1
2
1
4
3
3
1

destino
1
2
1
2
1
2
1
4

salida
13:00
16:00
13:00
16:00
14:00
7:00
11:00
20:00

arribo
23:00
10:00
23:00
10:00
15:00
21:00
05:00
21:00

En este punto puedes pensar en combinar los operadores de proyeccin para simplificar la
presentacin del join recin hecho, por ejemplo, puedes quedarte nicamente con #pasajero,
P.#vuelo, nombre, edad, origen, destino, salida y arribo. La formulacin de la proyeccin
anterior es:
*
+

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

21

Computacin II
Unidad 2. Bases de datos
(

Con lo que obtienes


#pasajero P.#vuelo
2343
334
3241
432
5372
435
5372
435
7638
113
8323
113
8323
113
8723
432

nombre
Ernesto
Juan
Andrs
Andrs
Elena
Ofelia
Ofelia
Alicia

edad
35
16
21
21
45
34
34
78

origen
2
1
2
1
4
3
3
1

destino
1
2
1
2
1
2
1
4

Y si quisieras seleccionar a los mayores de 21 aos sobre la relacin


es:
( )

salida
13:00
16:00
13:00
16:00
14:00
7:00
11:00
20:00

arribo
23:00
10:00
23:00
10:00
15:00
21:00
05:00
21:00

entonces la formulacin

Los datos no se muestran porque solo basta con contar a los 5 elementos que cumplen con
esta condicin en el conjunto de tuplas recin presentado.
Nota: Los joins pueden ser por cualquier atributo, de hecho el Natural Joines un caso particular
de un Theta-Join que une tablas bajo cualquier restriccin arbitraria. Para el ejemplo que
acabas de ver el Theta-Join fue sobre el atributo #vuelo y su expresin es con el smbolo
)
donde A es el atributo por el que estamos uniendo. Para el ejemplo visto (
obtiene exactamente la misma relacin.
Las operaciones de renombrado de tablas tienen como fin facilitar la manipulacin de los
resultados obtenidos, de hecho las hemos estado usando, por ejemplo al renombrar la tabla
vuelos por V. No requieren mayor explicacin por su trivialidad.
Clculo Relacional
El clculo relacional es un sistema para realizar una consulta de forma no procedimental para
obtener la consulta deseada y est basado en clculo de predicados de primer orden. Este
sistema de clculo toma a las consultas como variables y aplica frmulas sobre estas variables.
Existen dos formas de hacer clculo de predicados, el clculo de tuplas y el clculo de dominio.
En el clculo de tuplas lo que vamos a hacer es especificar las consultas con la forma
* | ( )+
en el que

es el conjunto de tuplas para las cuales ( ) se cumple.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

22

Computacin II
Unidad 2. Bases de datos
Si en vez de tratar las consultas como variables nos fijamos especficamente en los nombres de
los atributos como variables y sobre ellas hacemos el clculo de predicados formando as
consultas de la forma
* | ( )+
es lo que denominamos clculo del dominio.
Las frmulas usadas son frmulas bien formadas descritas con formalidad en el clculo
proposicional. La diferencia principal entre el lgebra relacional y el clculo relacional es la
naturaleza procedimental de la primera en contraste con la naturaleza declarativa de la
segunda. Es decir, mientras en el lgebra Relacional vamos construyendo la consulta que
deseamos mientras que en el Clculo Proposicional declaramos la consulta y que segn
demostr Edgar Frank Codd ambas formas de consultar a la base de datos son equivalentes.
Si quisiramos recuperar a todos los pasajeros que tomaron el vuelo 113
* |
(
)+
Para formar esta consulta vas a recuperar a todas las tuplas f tales que cumplan con estar en la
tabla Pasajeros y para las cuales exista un vuelo cuyo nmero de vuelo sea el 1130.
Si quisieras recuperar los nombres de los pasajeros que volaron al destino 1 entonces la
consulta tendra que ser de la siguiente manera:
*
(
|

)+

Para formar esta frmula bien formada lo que requieres es recuperar todos los pasajeros de los
cuales recuperars el nombre tales que cumplan con que su nmero de vuelo sea el mismo
para aquellos vuelos cuyo destino tome el valor 1.
Si quisieras generar todos los nombres de pasajeros que volaron de Mxico a Brasil entonces
nuestra consulta tendra que formarse como
|
{
)
((
(
)
(
) (
))}
Para construir esta consulta lo que requerirs es recuperar todos los nombres de los pasajeros
que cumplan con que exista un vuelo v para el cual el destino o sea Mxico y el destino sea
Brasil. Una vez recuperado esos datos ligas el nmero de destino de cada uno al nmero de
vuelo v mismo que tambin ligas al nmero de vuelo de .
Tambin podras pedir todos los pasajeros que no volaron a Monterrey.
{ |
(
(
(

)
)

))}

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

23

Computacin II
Unidad 2. Bases de datos
La lgica de esta consulta se basa en primero construir la variable v con la que vas a recuperar
el nombre del destino Monterrey para negar su existencia y luego ligarlo al destino en el vuelo
del cual recuperars el nmero de vuelo y restringirlo al nmero de vuelo del pasajero.
Aunque pueden parecer un poco rebuscadas estas consultas lo nico que requieres es
recuperar tu entrenamiento de lgica matemtica para conformar frmulas bien formadas donde
una variable libre recupera toda la informacin requerida para despus ligarla a una variable
libre con la que obtienes los datos requeridos.

2.2.2. Estructura
Las implementaciones de SQL se basan en la especificacin del mismo lenguaje. Este lenguaje
se va a encargar de todas las necesidades previstas en la especificacin de las bases de datos
para sus lenguajes, esto es, el SQL se encargar de:
-

Definicin de datos: Creacin de tablas, bases de datos y vistas.


Manejo de datos: Insercin y actualizacin de datos as como de las restricciones
impuestas a cada uno de ellos.
Consultas: Seleccin de datos con diferentes restricciones

A partir de este momento estaremos hablando indistintamente de SQL o de la implementacin


que revisaremos que es MySQL.
Definicin de datos
Para definir una base de datos en SQL la forma general es la siguiente.
Dentro de la especificacin de sintaxis siguiente observars que el nombre de las instrucciones
o palabras reservadas se encuentra en negritas mientras que los metasmbolos se encuentran
<encerrados en llaves>, es decir, estos son las representaciones smbolos que luego tomarn
un valor especfico, en otras palabras son variables por definir. Los valores opcionales los
definiremos entre corchetes, i.e. [opcin].

Por ejemplo para nuestra base de datos que se llamar aerolnea la instruccin es
createdatabase aerolnea
Para crear las tablas o relaciones que la integran, cuyos nombres son vuelos, pasajeros y
destinos utilizars la instruccin
(
)

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

24

Computacin II
Unidad 2. Bases de datos
Como puedes observar la lista de atributos va encerrada entre parntesis y cada uno de estos
se define
,
Alguno de los tipos de datos ms usados por MySQL son:
Numricos: SMALLINT, INTEGER, INT, BIGINT, BOOLEAN, DECIMAL, FLOAT, DOUBLE
Fecha y Hora: DATE, DATETIME, TIME, TIMESTAMP, YEAR
Cadenas: CHAR, VARCHAR, BLOB
En el caso de la tabla destinos
CREATE TABLE destinos (
id_destinoCHAR(1) NOT NULL,
paisVARCHAR(10) NOT NULL,
estadoVARCHAR(10) NOT NULL,
nombreVARCHAR(20) NOT NULL,
PRIMARY KEY (id_destino)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Puedes ver que en la tabla anterior hay una instruccin que comienza con las palabras
reservadas PRIMARY KEY (al cual nos referiremos para abreviar como PK). Esta instruccin
recibe el nombre de un campo para el cual vas a identificar unvocamente a todos los registros
de la tabla, es decir, el nombre del campo asociado a PK debe ser nico, por lo tanto id_destino
no puede repetirse en la tabla.
Para la tabla vuelos la definicin queda como
CREATE TABLE vuelos (
id_vueloVARCHAR(4) NOT NULL,
origenCHAR(1) NOT NULL,
destinoCHAR(1) NOT NULL,
salidaTIME NOT NULL,
arriboTIME NOT NULL,
PRIMARY KEY (id_vuelo),
CONSTRAINT `fk_destino` FOREIGN KEY (origen) REFERENCES destinos
(id_destino) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `fk_origen` FOREIGN KEY (destino) REFERENCES destinos
(id_destino) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Los archivos que contienen estas instrucciones y las que insertan una serie de datos para
probar las puedes descargar el sitio, se llaman aerolnea.sql y aerolnea_datos.sql.
La forma de ejecutar estos archivos .sql desde el smbolo del sistema es la siguiente

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

25

Computacin II
Unidad 2. Bases de datos
C:\> mysql u checo p < aerolinea.sql
Esto crea la base de datos
C:\> mysql u checo p < aerolinea_datos.sql
Esta ltima instruccin agrega los datos
Los archivos .sql son scripts que contienen instrucciones vlidas de MySQL y se ejecutan
lnea por lnea.
Ambos archivos los puedes bajar de la carpeta Material de Apoyo correspondiente a la unidad
2.

En este caso puedes observar que despus de la definicin de PK hay dos instrucciones que
comienzan con CONSTRAINT. Estas lneas especifican una restriccin sobre la base de datos,
cada una tiene un nombre (fk_destino y fk_origen) y despus la restriccin especfica. En
ambos casos esa restriccin es la aplicacin de una llave fornea y lo que va a hacer es checar
la consistencia del campo especificado y en que tabla est ese valor, el ltimo modificador dice
en qu casos va a checar la consistencia.
Especficamente la restriccin fk_destino se define por
FOREIGN KEY (origen) REFERENCES destinos (id_destino) ON DELETE RESTRICT ON
UPDATE CASCADE
Es decir, el campo origen hace referencia a la tabla destinos en el campo de esta tabla
llamada id_destino y el chequeo se va a hacer cuando se hagan borrados o actualizaciones.
Automticamente se hacen cuando se insertan datos.
Ahora, las tablas estn compuestas por atributos con cierto dominio, para especificar cada uno
de estos
No olvides poner especial atencin en que partes de cdigo expuesto hay comas (,), puntos y
comas (;) o ningn carcter al final de la instruccin.

Manejo de datos
Dentro de las instrucciones para hacer el correcto manejo de datos se encuentran las
instrucciones INSERT, UPDATE y DELETE. Adicionalmente tambin estn las instrucciones
para alterar la estructura de una tabla y esto lo puede lograr la instruccin ALTER.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

26

Computacin II
Unidad 2. Bases de datos
Consultas
La consulta de los datos es la tarea ms frecuente cuando se usa una base de datos. La
instruccin que puede hacer esto es la instruccin SELECT detallada en las siguientes
secciones
Condiciones
Una parte importante de cualquier lenguaje es la implementacin de operadores condicionales y
una instruccin particular para computar estas restricciones.
Los operadores de comparacin de SQL se definen en la siguiente tabla, podrs ver que
incluimos un operador denominado IS, este verifica que su argumento sea efectivamente un
valor booleano, por ejemplo IS TRUE regresa 1.

Funcin
Igualdad
Mayor, Mayor Igual
Menor, Menor Igual
Distinto
Valor de verdad de operador booleano

Operador
=
>, >=
<, <=
<>
IS <booleano | nulo>, IS NOT <booleano | nulo>

Dentro de los operadores lgicos tenemos


Funcin Operador
AND, && Conjuncin
OR, ||
Disyuncin
NOT, !
La instruccin es WHERE cuya definicin es

Donde <condicin> se expresa como


{

En donde
es alguno de los operadores de comparacin. Entonces la clusula WHERE
es la combinacin de tomos que constan de un valor, un operador de comparacin y un valor
para comparar. Los siguientes son ejemplos de cmo puede usarse la instruccin WHERE
WHERE fecha_salida >
WHERE destino = 1
WHERE pas <> Mxico
2013-02-23
(1)
(2)
(3)

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

27

Computacin II
Unidad 2. Bases de datos
La razn por la que se est describiendo un apartado para WHERE es porque permite
seleccionar tuplas con el criterio especificado y esta seleccin de tuplas le sirve tanto a la
instruccin SELECT, como a UPDATE o DELETE.
Las siguientes ligas, te permitir abordar un poco ms de este tema.
Para saber ms:
http://dev.mysql.com/doc/refman/5.6/en/data-type-overview.html
http://dev.mysql.com/doc/index-topic.html
http://dev.mysql.com/doc/refman/5.6/en/sql-syntax.html

2.2.3. Consultas y Subconsultas


La instruccin ms importante para SQL es la instruccin SELECT. Esta se encarga de mostrar
los datos requeridos en pantalla en forma de tablas.
Su sintaxis es
SELECT [DISTINCT | UNIQUE] < atributos >
FROM <tablas>
[WHERE <condicin>]
Donde la especificacin de <atributos> es como sigue
<atributos> := * | [<relacin>.]<atributo> [[<relacin],] <atributo>]
Es decir, el valor de <atributos> puede ser o bien un asterisco, o bien una lista de atributos
separados por comas, o bien una cada una de estas relaciones puede estar precedida por el
nombre de la relacin terminada por un punto.
Por ejemplo, si quisieras listar todos los vuelos la instruccin sera
SELECT * FROM vuelos;
O bien podramos querer nicamente la columna id_vuelo de la misma relacin
SELECT id_vuelo FROM vuelos;
Si quieres la proyeccin sobre la tabla de pasajeros que recupera los atributos id_pasajero y
sexo, entonces las siguientes tres relaciones son equivalentes para la consulta
(
)
SELECT id_pasajero, sexo FROM pasajeros
SELECT pasajeros.id_pasajero,pasajeros.sexo FROM pasajeros
SELECT p.id_pasajero, p.sexo FROM pasajeros P

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

28

Computacin II
Unidad 2. Bases de datos
En la ltima instruccin utilizamos un alias para la tabla pasajeros en la que la renombramos
como P y as es como la referenciamos dentro de la consulta.
Si lo que queremos es hacer una seleccin sobre esa proyeccin en la que escojamos a todos
los hombres tenemos que hacer uso de la clusula WHERE y fijar el valor sexo=h. La
seleccin en lgebra relacional queda como
(

)/

Y traducida a SQL queda como


SELECT P.id_pasajero, P.sexo FROM pasajeros P WHERE p.sexo=h
Si lo que queremos es la proyeccin sobre los atributos id_vuelo, origen y destino de la tabla
vuelos pero siempre y cuando los vuelos salgan en el medio da su frmula en el lgebra
relacional es
.

)/

SELECT id_vuelo, origen, destino, salida


FROM vuelos
WHERE salida > '00:00:00' AND salida <='12:00:00';
Puedes usar el operador UNION cuya sintaxis es

Cuya restriccin es que el nmero de columnas en cada relacin sea el mismo. Por ejemplo
SELECT id_vuelo AS c1, destino AS c2 FROM vuelos
UNION
SELECT id_pasajero AS c1, nombre AS c2 FROM pasajeros
Pero todas estas consultas estn completamente limitadas a la seleccin y proyeccin sobre
una sola tabla. Si quisieras hacer el producto de dos relaciones entonces el tomo FROM debe
contener todas las relaciones de dnde vas a hacer nuestro producto. En un ejemplo anterior
seleccionas algunos valores sobre las relaciones pasajeros y vuelos. Si quisieras todo el
producto entre ambas relaciones, su frmula en lgebra relacional queda como
Y en SQL lo tenemos que expresar de la forma
SELECT * FROM vuelos, pasajeros;
Pero esto no sera de gran utilidad ya que estaras formando tuplas que no guardan relacin
alguna entre ellas, recuerda que el producto de dos relaciones es el producto cruz entre ellas.
Algo de ms utilizad es formar un WHERE en el que ligas un par de atributos entre ambas
tablas, por ejemplo
SELECT * FROM vuelos, pasajeros WHERE nombre=Ernesto AND destino=3;

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

29

Computacin II
Unidad 2. Bases de datos
As al restringir la consulta a restricciones en atributos de cada una de las tablas consultadas el
subconjunto de tuplas en la consulta ser un poco ms interesante que simplemente listarlas
todas. Pero como viste en la seccin anterior, una forma de hacer un producto es hacer un
natural join.
Natural Joins
Si hacemos la consulta
SELECT * FROM vuelos, pasajeros;
Pero ligando los datos que son comunes entre ambas relaciones de la siguiente forma
SELECT * FROM vuelos, pasajeros WHERE vuelos.id_vuelo =
pasajeros.id_vuelo;
Entonces restringirs nuestra consulta a todos aquellos pasajeros que realmente volaron en una
fecha dada. Esto es en esencia un natural join, pero MySQL se encarga de hacerlo con una
instruccin predestinada para tal efecto, y es la clusula JOIN. Su uso se ilustra haciendo el join
anterior.
SELECT * FROM vuelos V JOIN pasajeros P ON (V.id_vuelo = P.id_vuelo);
La sintaxis queda clara a partir de este ejemplo, en la clusula FROM seleccionas la primera
tabla JOIN la segunda tabla con quien queramos relacionarla para despus especificar la llave
de cada tabla por la que se hace el join. Si quieres extender ese resultado obtenido para
cruzarla con los detalles que nos puede ofrecer la tabla destinos entonces tenemos que hacer
otro join, pero como la tabla obtenida
SELECT * FROM vuelos V JOIN pasajeros P ON (V.id_vuelo = P.id_vuelo) JOIN destinos D ON
(D.id_destino = V.origen);
Con esta consulta obtendras todos los atributos comunes a las tuplas que tengan en comn el
nmero de vuelo en las tablas vuelos y pasajeros y a su vez en comn el id_destino en la tabla
destinos con el valor de origen en la tabla vuelos.
Funciones aritmticas de agregacin
Existe un conjunto de funciones de las cuales puedes extraer mucha informacin de nuestra
base de datos, esas son las funciones aritmticas y las funciones de agrupamiento. La primera
que revisars es la instruccin COUNT, de la cual puedes adivinar su funcin que es contar las
tuplas seleccionadas.
Por ejemplo para contar todos los vuelos registrados
mysql> SELECT COUNT(*) AS conteo FROM vuelos;
+--------+
| conteo |
+--------+
|
9 |
+--------+

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

30

Computacin II
Unidad 2. Bases de datos
Pero si quisiras todos los vuelos que salieron despus de las 17 horas la seleccin tendra que
ser
mysql> SELECT COUNT(*) AS conteo FROM vuelos WHERE salida > 17:00:00;
+--------+
| conteo |
+--------+
|
9 |
+--------+
Otra funcin muy til es la que obtiene el promedio de una columna bajo un SELECT, por
ejemplo para obtener el promedio de la edad de todos los pasajeros, hombres mujeres tendras
que hacer las siguientes tres consultas.
mysql> SELECT AVG(edad) AS prom FROM pasajeros;
+---------+
| prom
|
+---------+
| 37.6250 |
+---------+
Para los pasajeros hombres y luego mujeres tendras que hacer lo siguiente:
mysql> SELECT AVG(edad) AS prom FROM pasajeros WHERE sexo='h';
+---------+
| prom
|
+---------+
| 27.2500 |
+---------+
1 row in set (0.00 sec)
mysql> SELECT AVG(edad) AS prom FROM pasajeros WHERE sexo='m';
+---------+
| prom
|
+---------+
| 48.0000 |
+---------+
1 row in set (0.00 sec)
La funcin STD funciona exactamente igual.
Si quisiras obtener el mnimo y mximo las instrucciones son MIN y MAX. Para saber cul es
la edad ms pequea (y ms grande) tienes que ejecutar las siguientes instrucciones:
mysql> SELECT MIN(edad) AS minimo FROM pasajeros;
mysql> SELECT MAX(edad) AS maximo FROM pasajeros;

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

31

Computacin II
Unidad 2. Bases de datos
Estas funciones se pueden combinar con la salida de GROUP BY. Esta instruccin agrupa
conjuntos de tuplas dentro de la misma seleccin.
Por ejemplo para conocer cuntos hombres y mujeres existen en la base de datos puedes
ejecutar la siguiente instruccin.
mysql> SELECT sexo, count(sexo) FROM pasajeros GROUP BY sexo;
+------+-------------+
| sexo | count(sexo) |
+------+-------------+
| h
|
4 |
| m
|
4 |
+------+-------------+
2 rows in set (0.00 sec)
Lo que esta instruccin hace es que ejecuta lo indicado en el SELECT contando por el campo
que le hayas especificado en GROUP BY.
Si quieres contar todos los vuelos agrupados por su destino, tienes que hacer la siguiente
consulta
mysql> SELECT D.nombre, COUNT(V.destino) FROM destinos D JOIN vuelos V
ON (V.destino = D.id_destino) GROUP BY (V.destino);
+------------------+------------------+
| nombre
| count(V.destino) |
+------------------+------------------+
| Puerto Escondido |
3 |
| Sao Paulo
|
3 |
| Muralla
|
1 |
| Monterrey
|
2 |
+------------------+------------------+
Es importante notar que el mismo campo usado como argumento en la funcin de agregacin
es el mismo que debe ir referenciado en la clusula GROUP BY.
Para una mejor comprensin, te recomiendo estos link, para profundizar tus conocimientos.
Para saber ms
http://dev.mysql.com/doc/refman/5.6/en/join.html
http://dev.mysql.com/doc/refman/5.0/es/group-by-functions.html

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

32

Computacin II
Unidad 2. Bases de datos
2.2.4. Actualizaciones y Borrado
Las principales instrucciones para hacer la actualizacin de datos de datos en una tabla son las
instrucciones INSERT y UPDATE. Estas instrucciones tienen por finalidad el insertar y
actualizar datos en alguna tabla cuidando la integridad de los datos.
El caso particular del INSERT tiene la siguiente sintaxis
(
)
En este caso la lista de atributos debe ir en el mismo orden en el que estn definidos la
secuencia de datos en la relacin, por ejemplo, las tres sentencias que siguen insertan datos en
las tablas especificadas de forma correcta
INSERT INTO destinos VALUES ('2', 'Brasil', 'Sao Paulo', 'Sao Paulo');
INSERT INTO vuelos VALUES ('435', '1', '2', '16:00', '10:00');
INSERT INTO pasajeros VALUES ('3241', '435', 'Juan', '16', 'h');
Si los datos no existen entonces la secuencia de ejecucin de estas tres instrucciones no
lanzar ningn error ya que en la tabla destinos el campo id_destino est marcado como llave
primaria, esto quiere decir que no puede existir otro destino que tome el valor 2 en el campo
id_destino. Como en la tabla vuelos el campo destino est marcado como llave fornea
(FOREIGN KEY) entonces la insercin del vuelo 435 (cuyo valor debe ser nico por la misma
razn que en la tabla vuelos) ser posible de llevarse a cabo. Para finalizar con la ltima
instruccin que tambin agrega una tupla que debe ser nica segn su llave id_pasajero pero
que tambin checa que el vuelo con id_vuelo = 435 exista ya que de otra manera se lanzar un
error de consistencia de datos.
Otra forma alternativa para usar la instruccin INSERT es como sigue:
(
)
(

Esta forma permite variar el orden en el que se pasan los datos a meter a la tabla. Por ejemplo
INSERT INTO destinos (pais, estado, nombre, id_destino) VALUES ('La
Habana', 'Cuba', 'La Habana', '5');
En el siguiente ejemplo puedes ver la tabla antes y despus de este INSERT.
SELECT * FROM destinos;
+------------+-----------+-----------+------------------+
| id_destino | pais
| estado
| nombre
|
+------------+-----------+-----------+------------------+
| 1
| Mxico
| Oaxaca
| Puerto Escondido |
| 2
| Brasil
| Sao Paulo | Sao Paulo
|
| 3
| China
| Pekn
| Muralla
|
| 4
| Mxico
| Nvo Len | Monterrey
|
+------------+-----------+-----------+------------------+
4 rows in set (0.00 sec)

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

33

Computacin II
Unidad 2. Bases de datos
(a)
SELECT * FROM destinos;
+------------+-----------+-----------+------------------+
| id_destino | pais
| estado
| nombre
|
+------------+-----------+-----------+------------------+
| 1
| Mxico
| Oaxaca
| Puerto Escondido |
| 2
| Brasil
| Sao Paulo | Sao Paulo
|
| 3
| China
| Pekn
| Muralla
|
| 4
| Mxico
| Nvo Len | Monterrey
|
| 5
| La Habana | Cuba
| La Habana
|
+------------+-----------+-----------+------------------+
5 rows in set (0.00 sec)

(b)
Como puedes ver el INSERT es esencialmente el mismo excepto que esta vez los datos a
insertar pasan ordenados como se especifica despus de la tabla.
La otra instruccin dedicada a hacer actualizaciones en la base de datos es precisamente la
instruccin UPDATE. Su sintaxis es

donde la lista de atributos debe contener el atributo a cambiar y el nuevo valor.


*

Por ejemplo la lista de pasajeros actual es


mysql> select * from pasajeros;
+-------------+----------+-----------+------+------+
| id_pasajero | id_vuelo | nombre
| edad | sexo |
+-------------+----------+-----------+------+------+
| 2343
| 334
| Ernesto
|
35 | h
|
| 3241
| 435
| Juan
|
16 | h
|
| 5372
| 334
| Andrs
|
21 | h
|
| 5372
| 435
| Andrs
|
21 | h
|
| 7638
| 443
| Elena
|
45 | m
|
| 8323
| 113
| Ofelia
|
34 | m
|
| 8323
| 116
| Ofelia
|
21 | h
|
| 8723
| 442
| Alicia
|
78 | m
|
+-------------+----------+-----------+------+------+
8 rows in set (0.00 sec)
Si quisieras actualizar a todos los pasajeros cuyo nombre es Ernesto por Ernestina y su sexo
de h a m entonces la instruccin debera ser
UPDATE pasajeros SET nombre='Ernestina', sexo='m' WHERE
nombre='Ernesto';

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

34

Computacin II
Unidad 2. Bases de datos
SELECT * FROM pasajeros;
+-------------+----------+-----------+------+------+
| id_pasajero | id_vuelo | nombre
| edad | sexo |
+-------------+----------+-----------+------+------+
| 2343
| 334
| Ernestina |
35 | m
|
| 3241
| 435
| Juan
|
16 | h
|
| 5372
| 334
| Andrs
|
21 | h
|
| 5372
| 435
| Andrs
|
21 | h
|
| 7638
| 443
| Elena
|
45 | m
|
| 8323
| 113
| Ofelia
|
34 | m
|
| 8323
| 116
| Ofelia
|
21 | h
|
| 8723
| 442
| Alicia
|
78 | m
|
+-------------+----------+-----------+------+------+
8 rows in set (0.00 sec)
O bien si quieres actualizar todos aquellas edades de 21 a 31 lo que tienes que hacer es
UPDATE pasajeros SET edad='31' WHERE edad='21';
Lo que transforma nuestra tabla en el siguiente conjunto de datos
SELECT * FROM pasajeros;
+-------------+----------+-----------+------+------+
| id_pasajero | id_vuelo | nombre
| edad | sexo |
+-------------+----------+-----------+------+------+
| 2343
| 334
| Ernestina |
35 | m
|
| 3241
| 435
| Juan
|
16 | h
|
| 5372
| 334
| Andrs
|
31 | h
|
| 5372
| 435
| Andrs
|
31 | h
|
| 7638
| 443
| Elena
|
45 | m
|
| 8323
| 113
| Ofelia
|
34 | m
|
| 8323
| 116
| Ofelia
|
31 | h
|
| 8723
| 442
| Alicia
|
78 | m
|
+-------------+----------+-----------+------+------+
8 rows in set (0.00 sec)
Nota: UPDATE es una instruccin que puede alterar uno o todos los datos y que no
necesariamente requiere de un predicado WHERE para poder ser usado, esto quiere decir que
la instruccin
UPDATE t1 SET c=valor_nuevo;
Va a cambiar todos los valores anteriores por valor_nuevo en el atributo c de la tabla t1. Si esto
no era lo que queras hacer es posible que pierdas informacin, tiempo, recursos y todo lo que
esto conlleva. Como consejo, cuando vayas a hacer una actualizacin en una tabla escribe

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

35

Computacin II
Unidad 2. Bases de datos
UPDATE WHERE
y despus completa la informacin requerida. Si tu actualizacin no requiere del predicado
WHERE, es decir, aplica a toda la tabla (aspecto ms bien raro) puedes usar el predicado
WHERE 1 o simplemente borrar la palabra WHERE. Pero si tu actualizacin no aplicaba a toda
la tabla y presionas enter entonces fallar y no perders nada.
Este consejo aplica idntico para DELETE.
La ltima instruccin para actualizar la informacin en una tabla es la de borrado de tuplas, esta
instruccin es DELETE y su sintaxis es muy parecida a la de UPDATE.

Si la tabla de donde ests borrando la tupla tiene definida una llave fornea en otra tabla
entonces obtendrs un error de integridad en los datos, por ejemplo
mysql> DELETE FROM destinos WHERE id_destino='1';
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key
constraint fails (`aerolinea`.`vuelos`, CONSTRAINT `fk_destino` FOREIGN
KEY (`origen`) REFERENCES `destinos` (`id_destino`) ON UPDATE CASCADE)
Este error aparece principalmente porque el destino con id_destino=1 est referenciado en otra
tabla, particularmente la de vuelos, es por esto que no se nos permite borrarlo. Si en cambio no
existe ninguna referencia a la tupla que ests borrando en otra tabla entonces no hay problema
para hacerlo. Como el destino con id_destino=5 no est referenciado en ninguna otra tabla
entonces su borrado es directo.
mysql> DELETE FROM destinos WHERE id_destino='5';
Query OK, 1 row affected (0.16 sec)

Actividad 1. Paradigma Entidad - Relacin


En esta actividad practicars la creacin de bases de datos con SQL usando el MySQL y el
paradigma Entidad - Relacin
Instrucciones
1. Descarga el archivo Act1. Paradigma Entidad-Relacin
2. Lee el contenido atendiendo a las instrucciones y sugerencias que se hacen.
3. Crea un script de MySQL donde guardes la funcin y ejemplos que se te piden
4. Guarda tu documento con la siguiente nomenclatura: MCOM2_U2_A1_XXYZ.
5. Enva tu documento a tu Facilitador(a) y espera su retroalimentacin.
Nota: No olvides consultar la Escala de evaluacin para conocer los criterios con que ser

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

36

Computacin II
Unidad 2. Bases de datos
evaluado tu trabajo.

2.2.5. Vistas
Una de las formas para consultar datos que no radica en crear una tabla fsicamente es creando
una tabla virtual, denominado vista. A travs de la creacin de una vista puedes guardar una
consulta que nos sea particularmente til y a la cual tengas que recurrir con frecuencia.
Un ejemplo de esta necesidad para la base de datos puede ser recurrir a dos consultas: una
para poder ver los vuelos de todos los pasajeros con el detalle de su nombre y el nombre del
destino, y otra casi igual pero con el detalle los orgenes de cada vuelo.
En la primer consulta deseas ver el id_pasajero, el nombre del mismo, el nmero del vuelo, el
nombre del destino y la hora de arribo, esa consulta entonces queda como:
SELECT P.id_pasajero, P.nombre, P.id_vuelo, D.Nombre as destino,
V.arribo
FROM destinos D JOIN vuelos V ON (V.destino = D.id_destino) JOIN
pasajeros P ON (V.id_vuelo = P.id_vuelo);
Los datos que muestra son los siguientes
+-------------+-----------+----------+------------------+----------+
| id_pasajero | nombre
| id_vuelo | destino
| arribo
|
+-------------+-----------+----------+------------------+----------+
| 8323
| Ofelia
| 116
| Puerto Escondido | 05:00:00 |
| 2343
| Ernestina | 334
| Puerto Escondido | 23:00:00 |
| 5372
| Andrs
| 334
| Puerto Escondido | 23:00:00 |
| 7638
| Elena
| 443
| Puerto Escondido | 15:00:00 |
| 8323
| Ofelia
| 113
| Sao Paulo
| 21:00:00 |
| 3241
| Juan
| 435
| Sao Paulo
| 10:00:00 |
| 5372
| Andrs
| 435
| Sao Paulo
| 10:00:00 |
| 8723
| Alicia
| 442
| Monterrey
| 21:00:00 |
+-------------+-----------+----------+------------------+----------+
8 rows in set (0.00 sec)
En el otro caso, donde deseas saber los mismos datos pero con el detalle de la salida nuestra
consulta queda
SELECT P.id_pasajero, P.nombre, P.id_vuelo, D.Nombre AS partida,
V.salida
FROM destinos D join vuelos V ON (V.origen = D.id_destino) JOIN
pasajeros P ON (V.id_vuelo = P.id_vuelo);
Y los datos obtenidos son los siguientes:

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

37

Computacin II
Unidad 2. Bases de datos
+-------------+-----------+----------+------------------+----------+
| id_pasajero | nombre
| id_vuelo | partida
| salida
|
+-------------+-----------+----------+------------------+----------+
| 3241
| Juan
| 435
| Puerto Escondido | 16:00:00 |
| 5372
| Andrs
| 435
| Puerto Escondido | 16:00:00 |
| 8723
| Alicia
| 442
| Puerto Escondido | 20:00:00 |
| 2343
| Ernestina | 334
| Sao Paulo
| 13:00:00 |
| 5372
| Andrs
| 334
| Sao Paulo
| 13:00:00 |
| 8323
| Ofelia
| 113
| Muralla
| 07:00:00 |
| 8323
| Ofelia
| 116
| Muralla
| 11:00:00 |
| 7638
| Elena
| 443
| Monterrey
| 14:00:00 |
+-------------+-----------+----------+------------------+----------+
Prcticamente todas las implementaciones de SQL permiten guardar estas consultas como si
se tratara de otra tabla pero sin duplicar los datos, nicamente guardando la consulta. El
comando que debes usar es CREATE VIEW, la forma ms sencilla de su sintaxis es:

El nombre de la vista no debe ser el mismo que el de una tabla que est contenida dentro de la
misma base de datos.
CREATE VIEW arribos AS SELECT P.id_pasajero, P.nombre, P.id_vuelo,
D.Nombre AS destino, V.arribo FROM destinos D JOIN vuelos V ON
(V.destino = D.id_destino) JOIN pasajeros P ON (V.id_vuelo =
P.id_vuelo);

Y para la otra consulta nuestra vista queda como


CREATE VIEW salidas AS SELECT P.id_pasajero, P.nombre, P.id_vuelo,
D.Nombre AS partida, V.arribo FROM destinos D JOIN vuelos V ON
(V.origen = D.id_destino) JOIN pasajeros P ON (V.id_vuelo =
P.id_vuelo);
Si listas las tablas veramos dos tablas nuevas.
mysql> show tables;
+---------------------+
| Tables_in_aerolinea |
+---------------------+
| arribos
|
| destinos
|
| pasajeros
|
| salidas
|
| vuelos
|
+---------------------+

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

38

Computacin II
Unidad 2. Bases de datos
Donde puedes ver que existen dos nuevas tablas, salidas y arribos y las cuales no contienen
datos fsicamente pero s lgicamente ya que lo nico es que tienen definidos las consultas
antes mencionados.
La ventaja de tener este tipo de estructuras es que podemos simplemente seleccionar todos los
datos a travs del comando SELECT.
mysql> SELECT * FROM arribos;
+-------------+-----------+----------+------------------+----------+
| id_pasajero | nombre
| id_vuelo | destino
| arribo
|
+-------------+-----------+----------+------------------+----------+
| 8323
| Ofelia
| 116
| Puerto Escondido | 05:00:00 |
| 2343
| Ernestina | 334
| Puerto Escondido | 23:00:00 |
| 5372
| Andrs
| 334
| Puerto Escondido | 23:00:00 |
| 7638
| Elena
| 443
| Puerto Escondido | 15:00:00 |
| 8323
| Ofelia
| 113
| Sao Paulo
| 21:00:00 |
| 3241
| Juan
| 435
| Sao Paulo
| 10:00:00 |
| 5372
| Andrs
| 435
| Sao Paulo
| 10:00:00 |
| 8723
| Alicia
| 442
| Monterrey
| 21:00:00 |
+-------------+-----------+----------+------------------+----------+
O bien puedes seleccionar todas las partidas que salieron desde Puerto Escondido
mysql> select * from salidas where partida='Puerto Escondido';
+-------------+--------+----------+------------------+----------+
| id_pasajero | nombre | id_vuelo | partida
| arribo
|
+-------------+--------+----------+------------------+----------+
| 3241
| Juan
| 435
| Puerto Escondido | 10:00:00 |
| 5372
| Andrs | 435
| Puerto Escondido | 10:00:00 |
| 8723
| Alicia | 442
| Puerto Escondido | 21:00:00 |
+-------------+--------+----------+------------------+----------+
Es necesario aclarar que slo se pueden generar consultas sobre las vistas y no actualizacin
de datos, aun as es una gran ventaja tener esta estructura en la base de datos.
Si deseas modificar alguna de las vistas ya definidas el comando CREATE VIEW acepta un
modificador

Si deseas borrar una vista lo que necesitamos es usar el comando DROP VIEW el cul se
ejecuta como

Para poder examinar la definicin de una vista podemos hacerlo mediante el comando SHOW
CREATE VIEW que se invoca como

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

39

Computacin II
Unidad 2. Bases de datos
con lo que obtienes una salida con la consulta con la que se cre la vista especificada.

Actividad 2. Clculo relacional


En esta actividad formars instrucciones y consultas SQL, tomando la base de datos creada
en la actividad 1, para contestar algunas preguntas ms sofisticadas. Adems de colaborar en
el foro para detallar consulta y aclaracin de dudas.

Instrucciones
1. Descarga el archivo Act2. Clculo Relacional
2. Construye las consultas tomando en cuenta las preguntas que se presentan en el
documento descargable
3. Ingresa al foro e ingresa las consultas que hayas elaborado, detallando paso a paso
que es lo que recuperan, esto significa detallar el proceso iterativo de cada de las
instrucciones usadas.
4. Comenta con al menos tres comentarios en alguna de las otras consultas de tus
compaeros cuestionndoles cmo y por qu decidieron usar las instrucciones que
hayan usado. Haz un aporte para mejorar su intencin en caso de que aplique.
* Consulta la Rbrica general de participacin en foros que se encuentra en la seccin
Material de apoyo.

2.3. Normalizacin
La normalizacin de una base de datos consta en hacer de esta un repositorio eficiente de
datos eliminando lo ms posible la redundancia en la definicin de los mismos. Usualmente no
se quiere ser redundantes ya que la redundancia, un dato repetido fsicamente, a lo largo de
varias tablas puede implicar un gran costo en tiempo para actualizarlo en caso de que se le
requiera cambiar algo.
Por ejemplo si insertas el nombre de nuestros pasajeros de nuestra base de datos de aerolnea
en todos los campos donde se requiera (reservaciones, ventas, vuelos, etctera) entonces al
momento de actualizar el nombre de dicho cliente tendras que visitar todas las relaciones
donde est guardado ese nombre.
En esta seccin conocers cuatro tcnicas para eliminar dicha redundancia con el fin de
optimizar el uso de la base de datos. Es importante notar que no toda redundancia es deficiente
o innecesaria, por ejemplo, considera las tablas que definan una institucin bancaria. Supn

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

40

Computacin II
Unidad 2. Bases de datos
por un momento que esta tiene un conjunto de relaciones de clientes, estados_cuenta,
traspasos definidas por
(

)
(

)
(

Ahora supn que algn cliente hace un traspaso a un tercero y luego se da de baja del sistema.
Dado que el traspaso no puede dejar de existir aun cuando el cliente lo haga es entonces
decides guardar el valor del cliente fsicamente en la tabla de traspasos.
Para poder trabajar y entender estas dependencias funcionales vas a crear una base de datos
que lleva la administracin de un restaurante. Supn que tienes la administracin del mismo en
una hoja electrnica

mesa
1
2

cliente
Miguel
Sandra

p_tiempo
Sopa
Consom

s_tiempo
Ensalada
Arroz

t_tiempo
Carne
Ensalada

bebida
Agua
Cerveza

costo
50
60

Pago
Efectivo
Tarjeta

Elena

Pasta

Ensalada

Agua

50

Mariana
Sergio

Pasta
Arroz

Ensalada
Ensalada

Pastel de
Carne
Pescado
Pescado

Cerveza
Cerveza

60
60

Tarjeta

Lorena
Arturo

Ensalada
Consom

--Arroz

Pescado
Carne

Agua
Cerveza

50
60

Efectivo

Datos
Paseo
de las
Rosas
#3.

Total
50
110

110

Av. de
la Paz
#10

120
120

110
110

2.3.1. Dependencia Funcional


Para regular y entender la optimalidad y eficiencia de una base de datos vamos a entender el
concepto de dependencia funcional que es central en este tpico.
S dos tuplas tienen los mismos atributos
comn entonces los atributos
expresa como:

En caso de que este conjunto de atributos

entonces tambin tienen un atributo


determinan funcionalmente a . Simblicamente se

determine ms de un atributo, es decir

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

41

Computacin II
Unidad 2. Bases de datos

De forma abreviada se describen estas dependencias como

Por ejemplo en la base de datos en la tabla vuelos los atributos id_pasjero y id_vuelo
determinan funcionalmente los atributos nombre, edad y sexo.

2.3.2. 1 Forma Normal


Esta es la primer forma que una tabla debe cumplir para considerarse ptima. La podemos
abreviar como 1FN.
La idea coloquial de esta forma normal radica en que nuestras tablas no van a tener elementos
o grupos de elementos repetidos y que toda tupla tenga una llave primaria. En una palabra lo
que esta forma normal busca en toda tabla es atomicidad, es decir, que cada tupla sea
indivisible.
Una forma de detectar si una tabla est en 1NF (1 Norma formal) es no dejar espacios vacos
en toda la tabla, es decir, en el ejemplo:
num_mesa
1
2

cliente
Miguel
Sandra

p_tiempo
Sopa
Consom

s_tiempo
Ensalada
Arroz

t_tiempo
Carne
Ensalada

bebida
Agua
Cerveza

costo
50
60

Pago
Efectivo
Tarjeta

Elena

Pasta

Ensalada

Pastel de
Carne

Agua

50

Tarjeta

Mariana

Pasta

Ensalada

Pescado

Cerveza

60

Tarjeta

Sergio

Arroz

Ensalada

Pescado

Cerveza

60

Tarjeta

4
4

Lorena
Arturo

Ensalada
Consom

NULL
Arroz

Pescado
Carne

Agua
Cerveza

50
60

Efectivo
Efectivo

Datos
NULL
Paseo
de las
Rosas
#3.
Paseo
de las
Rosas
#3.
Av. de
la Paz
#10
Av. de
la Paz
#10
NULL
NULL

Total
50
110

110

120

120

110
110

De esta forma es mucho ms claro que este conjunto de datos no puede ser una tabla ya que
contiene llaves primarias repetidas (num_mesa).

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

42

Computacin II
Unidad 2. Bases de datos
Otra forma de ver que una tabla no est en 1NF es detectar que las intersecciones entre fila y
columna tengan un solo dominio aplicable, esto es, no puede haber varias columnas que
contentan elementos del mismo dominio, en este caso las columnas p_tiempo, s_tiempo,
t_tiempo pertenecen al dominio (compuesto) de tiempos de comida Qu pasara si hubiera un
atributo c_tiempo? Se tendra que modificar la estructura de la base.
La solucin para esto es separar la tabla en varias tablas indicadas con el mismo color en la
tabla antes mostrada.
clientes(id_cliente, nombre, direccin)
mesas(num_mesa, hora, comanda)
comandas(id_comanda, hora, tiempo, platillo, costo)*
facturas(id_factura, fecha, id_cliente, direccin, mesa, tipo_pago,
comanda, total)
* Esta tabla asigna un costo por cada uno de los tiempos con el fin de
que el total pueda obtenerse a travs de la suma de cada platillo
separado. No se deriva directamente del ejemplo pero se incluye para
que el mismo sea consistente
De esta forma puedes separar nuestros datos de tal forma que cada tabla tenga una llave que
identifica cada tupla y no tenga valores repetidos.

2.3.3. 2 Forma Normal


Tambin la denominamos la 2FN (2 Forma Normal). La segunda forma normal dice que todas
las columnas deben depender completamente de la llave de cada registro indicando que todas
las dependencias parciales de columnas tengan su tabla separada, es decir, si una columna
tiene informacin que no depende completamente de la llave de ese registro entonces falla para
estar en la 2FN.
Una forma de detectar si una tabla est en la segunda forma normal es preguntarte si puede
existir sin la llave que define a dicha tabla, si este es el caso entonces esta tabla no est en
2FN.
En nuestra tabla comandas tenemos el campo hora. Este campo en particular es informacin
innecesaria ya que si el campo que identifica cada comanda, que denominaremos de aqu en
adelante como id_comanda, es un consecutivo, entonces la hora podra ser un atributo
innecesario y ahora cumple la misma funcin que id_comanda. De la misma forma tiempo y
platillo son redundantes para la llave establecida ya que un platillo establece un tiempo en el
que el platillo se sirve. Por lo tanto la tabla comandas no est en 2FN, para estarlo o quitamos
los campos redundantes o les hacemos una tabla nueva.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

43

Computacin II
Unidad 2. Bases de datos
Pero el caso ms paradigmtico de 2FN es la tabla facturas ya que introduce, como puedes ver,
el atributo direccin y es que es sabedor que un cliente puede tener ms de una direccin fiscal
pero puede existir sin estar en esa tabla agregando un cliente (con su respectivo id_cliente)
nuevo y la direccin deseada, evitando as datos repetidos en la tabla facturas.
Nuestra base queda entonces
clientes(id_cliente, nombre, direccin)
mesas(num_mesa, hora, comanda)
comandas(id_comanda, platillo, costo)*
facturas(id_factura, fecha, id_cliente, mesa, tipo_pago, comanda,
total)

2.3.4. 3 Forma Normal


Esta forma normal tambin es conocida como 3FN y establece que debemos eliminar de las
tablas los registros que no dependan de la llave de la misma llave.
Para ilustrar esta forma normal usars otro ejemplo. Una tabla para guardar la informacin de
funciones de cine, que consta de la ciudad, el cine y la pelcula exhibida
*
+
De las combinaciones aqu mostradas no hay ninguna que sea una sper llave, es decir, una
llave de una tabla que no es mnima (por ejemplo toda llave es sper llave pero no toda sper
llave es llave) o puesto de otra forma ninguna combinacin de dos o menos de estos atributos
determina funcionalmente el restante.
Un ttulo y cine puede exhibirse en varias ciudades, un ttulo y una ciudad puede exhibirse en
varias ciudades, un cine y una ciudad pueden exhibir varios ttulo. Y no hay que argumentar
mucho ms por llaves de un solo atributo ya que es claro que son mucho ms ambiguos.
Lo que hacemos en este caso es conformar las siguientes relaciones con las dependencias
funcionales asociadas.

Es claro que el cine determina la ciudad y que si escogemos un ttulo y una ciudad entonces
estamos determinando el cine donde se exhibir.
Decimos que una relacin

se cumple que

est en la 3ra Forma Normal (3FN) si para la relacin funcional

es super llave o

es miembro de alguna llave.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

44

Computacin II
Unidad 2. Bases de datos
A continuacin revisaremos la forma normal de Boyce Codd que es un caso ms estricto que el
de 3FN en el sentido que no permite la ambigedad planteada por esta norma. Es importante
resaltar que este es el tipo de normalizacin que no siempre resulta prctica ya que es
imprctico tener muchas tablas pequeas.

2.3.5. Forma Normal de Boyce-Codd


Esta forma normal es ms sencilla de entender, se denomina BCNF (por sus siglas en ingls
Boyce-Codd Normal Form) ya que lo que busca es separar los datos con el fin que siempre se
cumpla que un conjunto de atributos sean llave o sper llave. Tcnicamente si se cumple para
una relacin la dependencia funcional

donde nos basta que


decimos que est en BCNF

sea super llave (que no sea una llave mnima) entonces

Como ejemplo cambiemos un poco los atributos antes mencionados y consideremos los
atributos que definen un cine, como son
*
+
Dentro de estos atributos, la pareja *
atributos, esto es:

+ determina funcionalmente el resto de los

2.4. Caso de Estudio


En esta seccin vas poner en prctica lo que has aprendido, construyendo una base de datos
llamada vinos que usaremos en la seccin siguiente. Usaremos los comandos que ya vimos e
incluso practicamos con la primera base de datos que hicimos. En esta seccin usaremos
cargaremos los datos pero usando Python para alimentar la base de datos.

2.4.1. Base de datos de vinos


Los siguientes datos son los valores que caracterizan a un conjunto de vinos. Utiliza la base de
datos que se encuentra en la pestaa de material de apoyo, de la pestaa de la unidad. La
ubicacin original del conjunto de datos con el que vamos a trabajar es:
http://archive.ics.uci.edu/ml/datasets/wine
Y baja los archivos que se encuentran bajo la liga Data Folder

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

45

Computacin II
Unidad 2. Bases de datos
http://archive.ics.uci.edu/ml/machine-learning-databases/wine/
Pero ambos archivos los puedes encontrar en la seccin de Material de Apoyo para la unidad 2,
tienen los nombres wine.data y wine.names.
Los archivos wine.names y wine.data lo puedes guardar en un directorio en el disco para
luego usar los scripts que cargan archivos desde un archivo de texto.
Los nombres y tipos de datos de las tablas se deben tener estos nombres
1) clase : INT
2) alcohol : FLOAT
3) malic_acid : FLOAT
4) ceniza : FLOAT
5) ceniza_alcaliniad : FLOAT
6) magnesio : INT
7) fenoles_tot : FLOAT
8) flavanoides : FLOAT
9) fenoles_no_flav :FLOAT
10) proantocianidinas : FLOAT
11) )color_intensidad : FLOAT
12) tono : FLOAT
13) dilucion : FLOAT
14) prolina : INT
Vamos a cargar todos estos datos en una base llamada vinos y debe contener un conjunto de
campos con los nombres especificados y cuyo dominio es el que se pone a continuacin de
cada nombre, es decir.
El campo prolina va a guardar un entero y el campo fenoles_no_flav va a guardar un flotante.

Actividad 3. SQL en el caso de estudio


En esta actividad implementars una base de datos que usaremos posteriormente a partir de
los datos
Instrucciones
1. Descarga el archivo Act3. SQL en el caso de estudio
2. Lee el contenido atendiendo a las instrucciones y sugerencias que se hacen.
3. Crea un script de Python donde guardes la funcin y ejemplos que se te piden

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

46

Computacin II
Unidad 2. Bases de datos
4. Guarda tu documento con la siguiente nomenclatura: MCOM2_U2_A3_XXYZ.
5. Enva el documento a tu Facilitador(a) y espera su retroalimentacin.
Nota: Recuerda que para la unidad 3 haremos uso de esta base de datos as que recuerda
qu nombre le pones y como acceder a ella.
Recuerda consultar la Escala de evaluacin de la actividad para saber qu aspectos se
tomarn en cuenta para su revisin

Autoevaluacin
Para reforzar los conocimientos relacionados con los temas que se abordaron en esta unidad
del curso, es necesario que resuelvas la autoevaluacin.
Ingresa al Aula virtual para realizar tu actividad.

Evidencia de aprendizaje. Base de datos


Descarga el archivo llamado EA. Unidad 2.docx lelo y responde las siguiente preguntas
concernientes a esta unidad
Instrucciones.
1. Descarga el archivo EA. Base de datos
2. Lee las instrucciones y recomendaciones ah presentadas
Escribe las respuestas en un documento y los programas en un archivo con terminacin
.SQL
3. Guarda tu documento y archivo con la siguiente nomenclatura: MCOM2_U1_EA_XXYZ.
4. Enva tu archivo al Portafolio de evidencias y espera la retroalimentacin de tu
Facilitador(a). Una vez que la tengas, atiende sus comentarios y reenva la nueva
versin de tu evidencia.
Nota: No olvides consultar la Escala de evaluacin para conocer los criterios con que ser
evaluado tu trabajo

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

47

Computacin II
Unidad 2. Bases de datos
Autorreflexiones
Como parte de cada unidad, es importante que ingreses al foro Preguntas de autorreflexin y
leas los cuestionamientos que formul tu Facilitador(a), ya que a partir de ellos debes elaborar
tu Autorreflexin y enviarla mediante la herramienta Autorreflexiones. No olvides que tambin
se toman en cuenta para la calificacin final.

Cierre de la unidad
En esta unidad hemos revisado la opcin ms popular para almacenar, manejar y consultar
datos y conformar bases de datos ptimas. Revisaste una introduccin al lenguaje de
programacin ms popular actualmente para dicho fin, el lenguaje SQL bajo su implementacin
MySQL.
Este campo es frtil y tiene muchsimas vertientes pero con las tcnicas revisadas puedes crear
bases de datos eficientes y crear consultas para responder preguntas especficas.

Para saber ms
Puedes consultar las siguientes ligas para extender cada tema
http://dev.mysql.com/doc/refman/5.6/en/data-type-overview.html
http://dev.mysql.com/doc/index-topic.html
http://dev.mysql.com/doc/refman/5.6/en/sql-syntax.html
http://dev.mysql.com/doc/refman/5.6/en/join.html
http://dev.mysql.com/doc/refman/5.0/es/group-by-functions.html

Referencias Bibliogrficas
Grassmann, W. K., &Tremblay, J. P. (1996). Logic and discretemathematics(Vol. 1). UpperSaddleRiver,
New Jersey: Prentice Hall.
Garcia-Molina, H., Ullman, J. D., &Widom, J. (2000). Databasesystemimplementation (Vol. 654).
UpperSaddleRiver, NJ:: Prentice Hall.

Educacin Abierta y a Distancia * Ciencias Exactas, Ingenieras y Tecnologas

48