Bases de Datos Unidad 3
Bases de Datos Unidad 3
Bases de Datos Unidad 3
MÉXICO
Licenciatura En Informática
Bases de
Datos
Autor: L.I. María de Lourdes Isabel
Ponce Vásquez
Objetivos Específicos
Conocer los modelos de datos anteriores y posteriores al modelo relacional
Describir los elementos del modelo
Conocer y aplicar las bases del modelo relacional mediante el uso del álgebra y cálculo
relacionales
Identificar las anomalías de inserción, actualización y borrado
Aplicar las formas normales al diseño de un modelo relacional
Comprender los tipos de dependencias entre atributos.
Describir las reglas de Codd para modelos relacionales
3.1. Introducción
El modelo relacional fue propuesto originalmente por E. F. Codd en 1970, en un documento llamado
“Un Modelo Relacional de Datos para Grandes Bancos de Datos Compartidos”. Fue el primer modelo
basado en nociones teóricas de matemáticas, las cuales proporcionaban una sólida base teórica. Las
investigaciones de este modelo fueron hechas por Codd y otros en los Laboratorios de Investigación
de IBM en San José, California. El primer prototipo de RDBMS fue el System R, desarrollado por
investigadores de IBM finales de los 70s. El RDBMS de IBM actual DB2 está basado en el System
R. SQL, es un lenguaje desarrollado para el System R que se convirtió en el lenguaje estándar para
BD relacionales, con los estándares aprobados por ANSI y publicados en 1986, 1989, 1992 y 199.
Otros proyectos de investigación sobre el modelo relacional fueron el Peterlee Relational Test
Vehicle, desarrollado en los Laboratorios Científicos de IBM en Inglaterra e INGRES, desarrollado en
la Universidad de California en Berkeley. Estas investigaciones obtuvieron una versión universitaria
de INGRES y una versión comercial. ORACLE fue desarrollado y comercializado usando mucho de
los resultados del System R. La aparición de las microcomputadoras en los 80s, logró desarrollos de
RDBMSs para PC, entre ellos dBase, R:Base, Foxpro, Paradox y Access, que es el RDBMS más
usado en microcomputadoras. Los RDBMS más populares a nivel empresarial son Oracle, DB2,
Informix, SyBase y SQL Server, aunque empiezan a ganar terreno Postgres y My SQL.
El modelo relacional usa simples tablas para organizar los datos. En 1976, P.P. Chen desarrolló un
nuevo tipo de modelo, el modelo entidad/relación. Este es un ejemplo de modelo semántico, ya
que intenta capturar el significado de los datos que representa, a diferencia del modelo relacional que
sólo indica cómo están organizados. El modelo entidad/relación ha sido extendido varias veces para
hacerlo semánticamente más rico. También existen otros modelos semánticos.
El mismo tipo de teoría matemática que usa se completa con notación formal, definiciones, teoremas
y prueba que las matemáticas pueden aplicarse a este modelo. El resultado de este desarrollo
teórico es entonces aplicado a consideraciones prácticas de implementación. En el modelo
La estructura lógica en la que se sustenta es el árbol, el cual se compone de un nodo raíz y varios
nodos sucesores, ordenados jerárquicamente. Cada nodo representa una entidad (tipo de registro) y
las relaciones entre entidades son las conexiones entre los nodos. El nodo superior es el nodo padre
y los inferiores son los nodos hijos. Las conexiones entre archivos no dependen de la información
contenida en ellos, se definen al inicio y son fijos (apuntadores). Las interrelaciones entre registros
permiten que un padre tenga muchos hijos, pero un hijo sólo puede tener un padre.
Los datos se representan como estructuras de árbol y el árbol representa la jerarquía de registros de
datos. La navegación es top-down.
PADRE
HIJO HIJO
LUIS AV. LEÓN LEÓN PEDRO AV. 2 D.F. JUAN HIDALGO HIDALGO
Desventajas:
Uno de los DBMS más antiguos fue IDS (Integrated Data Store) que fue desarrollado en
General Electric por Charles Bachean a principios de los 60s usando el modelo de red.
Este DBMS tuvo gran influencia en el desarrollo de BD durante muchos años. Se formó
CODASYL (Conference on Data Systems Languages – Conferencia sobre Lenguajes de
Sistemas de Datos), una organización que representaba a la mayoría de los vendedores de
hardware y software y usuarios, para tratar de estandarizar muchos aspectos del procesamiento de
datos. Tuvo éxito escribiendo estándares para el lenguaje COBOL. A finales de los 60s, formó un
subgrupo llamado DBTG (Database Task Group – Grupo de Trabajo para BD) para definir
estándares para DBMSs. Publicó un reporte en 1969 que generó muchas sugerencias y
modificaciones por parte de los lectores. DBTG consideró las propuestas y publicó su primer reporte
oficial en 1971. Este documento fue enviado a la ANSI (American National Standards Institute –
Instituto Estadounidense de Estándares Nacionales) con la esperanza de que sus especificaciones
se aceptaran como estándar para DBMSs, sin embargo, ANSI se lo rechazó. Al reporte de 1971 le
siguieron varias versiones en 1973, 1978, 1978, 1981 y 1984, pero se mantuvo la documentación
principal que describía un modelo basado en red generalmente referido como el modelo CODASYL o
el modelo DBGT, y varios DBMS populares se basaron en él. Además de esto, proporcionó el
vocabulario y un marco de trabajo para discusiones de temas de BD, estableciendo por primera vez
la noción de capaz en la arquitectura de BD y terminología común. El DBTG evolucionó en 1972 en
un comité permanente, el DDLC (Data Description Language Committee – Comité para el Lenguaje
de Descripción de Datos), que continuó operando y publicando sus hallazgos periódicamente en su
Journals of Development hasta 1984, cuando su función fue tomada por el comité ANSI X3H2 para la
estandarización. A pesar de que el DBGT u DDLC continuaron haciendo cambios al modelo
CODASYL, la propuesta de 1971 fue usada por la mayoría de los vendedores como la base de sus
DBMS. El más usado de estos sistemas basados en red fue IDMS de Cullinet. Otros incluyendo
PRIME DBMS de PRIME Computer, IDS II de Honeywell, DMS 170 de Control Data Corporation, DC,
DMSII y DMS1100 de UNISYS, y DBMS 10 y DBMS 11 de Digital Equipment Corporation.
Los datos se representan como registros ligados formando un conjunto de datos intersectados. A
diferencia de las jerárquicas, permiten cualquier conexión entre entidades, es decir, se pueden
La representación de los datos es similar al modelo jerárquico, con relaciones de un hijo a muchos
padres y un padre a muchos hijos.
PADRE PADRE
HIJO HIJO
Tomando nuevamente el ejemplo anterior, con dos entidades: cuentahabiente con: nombre, calle y
ciudad., y cuenta con: número y saldo, el modelo de red se puede representar como:
200 55
LUIS AV. LEÓN LEÓN
256 100000
PEDRO AV. 2 D.F.
347 667
JUAN HIDALGO HIDALGO
301 10346
Desventajas:
Aunque los modelos jerárquico y de red eran poderosos y eficientes, eran complejos, requerían que
los usuarios comprendieran las estructuras de datos y accedieran rutas de datos. Fueron diseñados
para usar con programas y no para acceso interactivo de los usuarios, por lo que las consultas
específicas no se soportaban. No se basaban en fundamentos teóricos sólidos, sino eran soluciones
construidas encima sistemas de archivos existentes.
Su ventaja es poder modificar la información sin preocuparse por especificar las combinaciones entre
registros. La representación de los datos es en forma de tablas con renglones y columnas. Las
relaciones se modelan mediante columnas en común.
COLUMNA1 COLUMNA2
RENGLÓN 1
RENGLÓN 2
RENGLÓN 3
Usando el ejemplo anterior, con dos entidades: cuentahabiente con: nombre, calle y ciudad., y
cuenta con: número y saldo, donde un cuentahabiente puede tener muchas cuentas y una cuenta
puede pertenecer a varios cuentahabientes, el modelo relacional se puede representar como:
CUENTAHABIENTE CUENTA/CUENTAHABIENTE
NOMBRE CALLE CIUDAD CUENTA CUENTAHABIENTE
LUIS LEON LEÓN 200 LUIS
PEDRO AV. 2 D.F. 256 PEDRO
JUAN HIDALGO HIDALGO 347 PEDRO
347 JUAN
CUENTA 301 JUAN
NO.CUENTA SALDO
200 55
256 100000
247 667
301 10346
El modelo orientado a objetos fue desarrollado en los 90s para manejar los datos requeridos para
aplicaciones avanzadas como sistemas de información geográfica (GIS), multimedia, diseño asistido
por computadora y manufactura asistida por computadora (CAD/CAM), y otros ambientes complejos.
Algunos RDBMSs como Oracle, agregaron algunas capacidades orientadas a objetos a sus
productos, resultando en bases de datos híbrida objeto-relacionales.
El amplio uso de Internet ha tenido gran impacto en el desarrollo de BD. Internet conecta a los
usuarios a una amplia red de BDs en constante expansión, proporcionando acceso a bibliotecas
digitales, recursos multimedia, recursos educativos y mucho más. Los sitios de comercio electrónico
permiten acceso a BDs de información sobre productos y servicios a los clientes a través de mundo.
Los dispositivos de cómputo inalámbrico y los clientes pequeños como PDAs son otros desarrollos
que permiten a los usuarios conectarse a recursos de BDs en formas nuevas y flexibles.
La mayoría de los modelos requiere que los tipos de entidades (u objetos o registros, dependiendo
del modelo) tengan la misma estructura. La estructura se define en el esquema y permanece sin
modificaciones a menos que el DBA cambie el esquema. En contraste, el modelo semi-estructurado
permite una colección de nodos, cada uno conteniendo datos, posiblemente con diferentes
esquemas. El nodo contiene información sobre la estructura de su contenido. Las BD semi-
estructuradas son especialmente útiles cuando existen BD que tienen diferentes esquemas
integrados. Las BD individuales pueden verse como documentos y pueden agregarse etiquetas XML
(Extensible Markup Language) a cada documento para describir su contenido. XML es un lenguaje
similar a HTML (Hipertext Markup Language), pero es usado como un estándar para intercambio de
datos en vez de presentación de datos. Las etiquetas XML se usan para identificar elementos, sub-
elementos y atributos que almacenan datos. El esquema puede especificarse usando DTD
(Document Type Definition) o por un esquema XML que identifica los elementos, sus atributos y sus
relaciones con otros.
Los data warehouses se desarrollaron en los 90s para proporcionar un método de captura de datos
consolidando de muchas bases de datos. Un data warehouse generalmente almacena datos
El modelo relacional se basa en el concepto de relación, que se representa físicamente como una
tabla o un arreglo de dos dimensiones (matriz). En este modelo, las tablas se usan para contener la
información de los objetos a representarse en la BD. Tanto entidades como interrelaciones se
representan usando tablas.
D1 x D2 = { {1, a}, {1, b}, {1, c}, {3, a}, {3, b}, {3, c} }
R = { (x, y) | x ∈ D1 y y ∈ D2, y y = a}
Usando el mismo conjunto, se puede crear otra relación, S, En la que el primer elemento es siempre
3:
La noción de relación se puede extender a tres conjuntos de forma natural, incluso se puede ir más
allá u definir una relación general en el dominio n. Suponiendo que D1, D2, . . ., Dn son n conjuntos.
Su producto Cartesiano se define como:
Una relación en los n conjuntos es cualquiera n-tuplas elegidas de este producto Cartesiano. Nótese
que en la definición de las relaciones se ha especificado el dominio o conjunto desde el cual se
eligen los valores.
Aplicando estos conceptos a BD, suponiendo que A1, A2, . . ., An son atributos con los dominios D1,
D2, . . ., Dn. El esquema relacional R es un conjunto de atributos con su correspondientes dominios; o
sea, el conjunto {A1, A2, . . ., An} con sus correspondientes dominios {D1, D2, . . ., Dn} es un esquema
relacional. Una relación r en un esquema relacional R es un conjunto de los nombres de atributos
con sus correspondientes dominios, o sea que la relación r es un conjunto de n-tuplas (A1:d1, A2:d2,
…, An:dn) tales que d1 ∈ D1, d2 ∈ D2, …, dn ∈ Dn. Cada elemento en una de estas n-tuplas consiste
de un atributo y un valor de ese atributo. Normalmente, cuando se escribe una relación como una
tabla, se listan los nombres de los atributos como encabezados de columnas y las tuplas usando
valores del dominio apropiado, por lo que las tuplas tienen la forma (d1, d2, . . ., dn). De esta forma,
una relación en el modelo relacional es cualquier subconjunto del producto Cartesiano de los
dominios de los atributos. Una tabla es simplemente una representación de esa relación.
3.2.1. Partes
Una relación se representa como una tabla bidimensional en la que los renglones corresponden a
registros individuales, llamados tuplas (o tuples) y las columnas corresponden a los atributos.
El dominio de un atributo es el conjunto permitido de valores para ese atributo y pueden ser distintos
o dos o más atributos pueden tener el mismo dominio.
La tabla, con todos sus renglones descritos, es una instancia o extensión de la relación. La
estructura de la tabla, junto con una especificación del dominio y otras restricciones sobre los
posibles valores, muestran la intensión de la relación, también llamada esquema de la BD.
Estrictamente hablando, el esquema también incluye dominios, vistas, conjuntos de caracteres,
restricciones, procedimientos almacenados, disparadores, autorizaciones y otra información
relacionada. El esquema de la relación se puede representar usando el nombre de cada relación,
seguido de los nombres de atributos entre paréntesis:
El atributo idCliente está subrayado porque se acostumbra subrayar la llave primaria en el esquema
de la relación.
El número de columnas en una tabla es llamado grado de la relación. Esto significa que cada
renglón de la tabla debe contener tantos valores como indique el grado. Una relación que tiene sólo
una columna tiene grado uno y se llama relación unaria. Una relación con dos columnas es binaria,
una de tres ternaria, y después de eso generalmente se usa el término n-aria. El grado de la
relación es parte de la intensión de la relación y nunca cambia.
Ya que una relación es un conjunto y un conjunto no duplica elementos, siempre es posible hablar
por separado de los elementos. En una relación de BD, las tuplas son conjuntos de elementos, así
que siempre debe ser posible separar cada tupla. Esto significa que siempre debe haber un atributo,
o alguna combinación de atributos, que distingue a las tuplas. Una llave es el conjunto mínimo de
atributos que identifica unívocamente cada tupla en una relación. Una llave formada por más de un
atributo es llamada llave compuesta. En una relación siempre habrá una llave primaria, que es la
llave candidata elegida como llave de la relación, y esto implica que siempre habrá una llave
candidata, una llave candidata es cualquier conjunto de atributos que puede ser elegido como una
clave en una relación. Las llaves no elegidas como llave primaria son llaves alternas. En el peor de
los casos, todos los atributos se requerirán para identificar a cada tupla, sin embargo, generalmente,
sólo se requiere un pequeño conjunto de atributos para distinguir entre tuplas. Hay que notar que una
instancia de la tabla no puede usarse para probar que un atributo o combinación de atributos es una
llave candidata, el hecho de que no existan duplicados par los valores que aparecen en un momento
dado no garantizan que los duplicados no son posibles. Sin embargo, la presencia de duplicados en
una instancia puede comprobar que alguna combinación de atributos no es una llave candidata. La
identificación de llaves candidatas requiere que se considere el significado de los atributos
involucrados de modo que se pueda tomar una decisión acerca de los valores que pueden duplicarse
en el minimundo. Sólo al usar la información semántica e identificando las suposiciones para el
modelo se puede asegurar que una combinación de atributos es una llave candidata.
Una llave foránea (ajena o externa) es un atributo o combinación de atributos de una relación que
no es la llave primaria de la relación pero que es llave primaria en alguna relación, generalmente
diferente. Las llaves foráneas son muy importantes en el modelo relacional porque se usan para
representar la conexión lógica entre relaciones; si la llave hace referencia a su propia relación se dice
que es una llave foránea recursiva.
La mayoría de las características especificadas para las tablas resultan de las propiedades de las
relaciones. Ya que una relación es un conjunto, el orden de los elementos no cuenta, por lo tanto, en
una tabla el orden de los renglones no es importante. En un conjunto, los elementos no se repiten,
similarmente, en una tabla, no existen renglones duplicados. Cuando se obtiene el producto
Cartesiano de valores simples, por ejemplo, enteros, cada elemento en cada tupla es un valor
simple, similarmente, cada celda de una tabla contiene sólo un valor. En una relación, el valor posible
para una posición dada está determinado por el conjunto o dominio en el cual se define la posición,
3.4. Restricciones
Una restricción (constraint) es una regla que limita los valores en la BD. Un estado legal de la BD
es aquel que obedece a todas las restricciones. Parte del trabajo de un DBMS es obligar a cumplir
esas restricciones, para asegurar que cualquier dato ingresado genere una instancia legal de la BD.
Existen diversos tipos de restricciones:
Una restricción de llave primaria, llamada integridad en la entidad, define que en una relación
ningún atributo de la llave primaria puede ser valor nulo. Un valor nulo es el valor dado a un atributo
en una tupla si el atributo es inaplicable o su valor desconocido. Los valores nulos no son lo mismo
que el valor cero ó el carácter de espacio en blanco.
Por definición, una llave primaria es el identificador mínimo que se usa para identificar de manera
única a las tuplas, esto implica que ningún subconjunto de la llave primaria es suficiente para
proporcionar identificación única de tuplas. Si se permiten valores nulos para una parte de la llave
primaria, se estaría demostrando que no se requieren todos los atributos para distinguir entre tuplas,
lo cual contradice la definición. Todas las llaves de la relación, tanto primarias como candidatas,
deben tener valores únicos. En SQL, se puede identificar la llave primaria usando una restricción de
llave primaria cuando se crea la tabla. El sistema forzará entonces las restricciones de no valores
nulos y llaves únicas automáticamente. Para las llaves candidatas, la mayoría de los sistemas
permiten especificar restricciones de valores únicos y no nulos.
Existen otros tipos de restricciones, referidas como restricciones generales, las cuales pueden ser
restricciones de tablas, que definen reglas sobre los valores permitidos en una tabla, o aserciones
que especifican un predicado dado debe ser cierto para todos los estados de la BD. Las restricciones
generales se fuerzan por el DBMS cuando se hacen cambios a la BD. El sistema verifica que los
cambios no violen las restricciones antes de permitir que se realicen permanentemente.
Tanto el álgebra relacional como el cálculo relacional son lenguajes formales, no amigables al
usuario. No se implementan en su forma nativa en los DBMSs, pero se usan como base para otros
lenguajes de manipulación de datos de BD relacionales de alto nivel. Estos lenguajes son
interesantes porque ilustran la operación básica requerida de cualquier lenguaje de manipulación de
datos, y porque sirven como estándar de comparación de otros lenguajes relacionales.
Al diseñar una BD se realiza una abstracción general. Para crear aplicaciones se necesitan
lenguajes claros y precisos para expresar la lógica del proceso. Existen cuatro estrategias para
manipulación de datos:
Algebra Relacional
Cálculo Relacional
Lenguajes Orientados a la Transformación
Consulta por Ejemplo (QBE)
3.5.1. Álgebra Relacional
El álgebra relacional es un lenguaje teórico con operadores que se aplican sobre una o dos
relaciones para producir otra relación, de modo que los operandos y el resultado son tablas. Date
originalmente propuso ocho operaciones, pero se han desarrollado otros. Las operaciones más
básicas, Selección, Proyección y Reunión (Join), permiten desarrollar la mayoría de las operaciones
de extracción de datos importantes. Existen diversas variantes de las sintaxis de los comandos de
álgebra relacional.
El Álgebra Relacional define operadores que aplican sobre tablas, creando una nueva tabla, donde
se requiere saber qué se desea y cómo.
El Álgebra Relacional tiene cinco operaciones fundamentales con las cuales se puede realizar
cualquier consulta:
Proyección
Selección
Unión
Diferencia
Producto Cartesiano
Intersección
Producto Theta (Join)
3.1.1.12. Proyección
El operador Proyección tiene como entrada una relación y produce como resultado un subconjunto
vertical de la relación con sólo aquellos atributos especificados por el usuario, eliminando duplicados.
El orden en el cual aparecen los atributos, es el que se indica cuando se hace la proyección. El
número de atributos que se pueden proyectar es como máximo el mismo número de atributos de la
relación origen y como mínimo un solo atributo.
Empleado
Número de Nombre del Salario Código
Empleado Empleado Depto.
1 Pedro 12,000 VE
2 Luís NO
3 Francisco 36,000
4 Lorena 24,000
5 Gabriela 24,000 NO
RESULTADO
Nombre del Número de
Empleado Empleado
1 Pedro
2 Luís
3 Francisco
4 Lorena
5 Gabriela
3.1.1.13. Selección
El operador Selección acepta una sola relación como entrada y produce como resultado un
subconjunto horizontal de todos los atributos de la relación origen y las tuplas que sean
especificadas por el usuario en el predicado. El predicado admite varios grados de complejidad y
puede incluir operadores lógicos (AND, OR y NOT). Para indicar precedencia de operadores se usan
paréntesis.
Las comparaciones pueden realizarse con valores literales, valores contenidos en los atributos, o
expresiones matemáticas que involucren valores literales de los atributos.
Sintaxis: σ P (r)
Empleado
Número de Nombre del Salario Código
Empleado Empleado Depto.
1 Pedro 12,000 VE
2 Luís NO
3 Francisco 36,000
4 Lorena 24,000
5 Gabriela 24,000 NO
σ Cod.Depto=‘NO’ (Empleado)
RESULTADO
Número de Nombre del Salario Código
Empleado Empleado Depto.
2 Luís NO
5 Gabriela 24,000 NO
Los operadores que pueden usarse para el predicado son los lógicos y relacionales:
3.1.1.14. Unión
Ya que las relaciones son básicamente conjuntos de n tuplas, el álgebra relacional incluye una
versión de los operadores de conjuntos, unión, intersección y diferencia.
El operador Unión acepta como entrada dos relaciones con el mismo grado, los mismos atributos
(los dominios de los i-ésimos atributos deben coincidir) en el mismo orden y produce como resultado
todos los atributos y todas las tuplas de ambas relaciones.
Si existe alguna tupla con la misma información en ambas relaciones, esta tupla sólo aparece una
vez en el resultado.
Sintaxis: r 1 U r2
El operador Intersección acepta como entrada dos relaciones y obtiene como resultado la todas las
tuplas que tengan exactamente la misma información en todos los atributos.
RESULTADO
Número de Nombre del Salario
Empleado Empleado
3 Francisco 36,000
3.1.1.16. Diferencia
El operador Diferencia acepta como entrada dos relaciones que tengan al menos un atributo en
común, en donde el resultado tendrá todos los atributos de la primera relación y las tuplas que no
aparezcan en la segunda relación.
(Departamento – Empleado)
RESULTADO
Cod. Nombre del
Depto. Depto.
IN Investigación
ME Mercadotecnia
RE Resultados
3.1.1.17. División
La División es una operación binaria donde la estructura completa de una relación (el divisor) es una
porción de la estructura de la otra (el dividendo). El resultado es el conjunto de valores en los
atributos que aparecen sólo en el dividendo coinciden con todas las tuplas del divisor.
Departamentos Ciudades
Cod. Nombre del Cód. Nombre Cód. Nombre
Depto. Depto. Ciudad Ciudad Ciudad Ciudad
VE Ventas DF D.F. DF D.F.
VE Ventas GD Guadalajara GD Guadalajara
NO Nómina DF D.F.
NO Nómina GD Guadalajara
IN Investigación DF D.F
(Departamentos ÷ Ciudades)
RESULTADO
Cod. Nombre del
Depto. Depto.
IN Investigación
El operador Producto Cartesiano acepta como entrada dos relaciones y obtiene como resultado la
combinación de cada tupla de la primera relación con todas las de la segunda relación. Las columnas
resultantes son las columnas de r1 seguidas de las columnas de r2.
Departamento Empleado
Cod. Nombre del Número de Nombre del Salario Cod.
Depto. Depto. Empleado Empleado Depto.
VE Ventas 1 Pedro 12,000 VE
NO Nómina 2 Luís NO
IN Investigación 3 Francisco 36,000
ME Mercadotecnia 4 Lorena 24,000
RE Resultados 5 Gabriela 24,000 NO
(Departamento X Empleado)
RESULTADO
Cod. Nombre del Número de Nombre de Salario Cod.
Depto. Depto. Empleado Empleado Depto.
VE Ventas 1 Pedro 12,000 VE
VE Ventas 2 Luís NO
VE Ventas 3 Francisco 36,000
VE Ventas 4 Lorena 24,000
VE Ventas 5 Gabriela 24,000 NO
NO Nómina 1 Pedro 12,000 VE
NO Nómina 2 Luís NO
NO Nómina 3 Francisco 36,000
… …
RE Resultados 5 Gabriela 24,000 NO
Existen diversas operaciones que se pueden definir basadas en el producto cartesiano de relaciones,
la más general es la operación producto theta ó join. El operador Join acepta como entrada dos o
mas relaciones teniendo cada una al menos un atributo en común con las otras relaciones, y produce
como resultado a todos los atributos de las relaciones origen, y las tuplas se concatenan con
aquellas tuplas cuyos valores en las relaciones origen cumplen con la condición que se indica para
hacer la reunión. El resultado de esta operación se define ejecutando una operación de selección
sobre el producto.
Cuando el predicado es de igualdad sobre las columnas en común, se dice que es un Equijoin de
tablas. Un Join Natural es un equijoin en el que las columnas repetidas se eliminan y es el join más
común por lo que generalmente sólo se le dice join. Otra variación es el Semijoin, que puede ser
izquierdo o derecho y donde los resultados corresponderán a las tuplas de la relación izquierda o
derecha que participan en el join. Otro tipo es el Join Externo, donde las tuplas de las tablas
originales que no tienen coincidencias no se muestran en el resultado. Existen también dos
variaciones del Join Externo, el Join Externo Izquierdo y Join Externo Derecho, en los que sólo se
muestran las tuplas sin coincidencia de la tabla izquierda o derecha.
Departamento Empleado
Cod. Nombre del Número de Nombre del Salario Cod.
Depto. Depto. Empleado Empleado Depto.
VE Ventas 1 Pedro 12,000 VE
NO Nómina 2 Luís NO
IN Investigación 3 Francisco 36,000
ME Mercadotecnia 4 Lorena 24,000
RE Resultados 5 Gabriela 24,000 NO
El JOIN con la columna en común del código del departamento en las relaciones anteriores, es:
Existen muchas extensiones del álgebra relacional, se han agregado métodos para manejar valores
nulos de modo sistemático y varios investigadores han agregado funciones como SUM, AVG, MAX,
MIN y COUNT.
En lógica, un predicado es una sentencia declarativa que puede ser falsa o verdadera. Por ejemplo,
“Juan es un cliente”. Si un predicado contiene una variable, por ejemplo “X es un cliente”, debe existir
un conjunto o rango asociado para remplazar a X. Cuando algunos valores del rango se substituyen
para x, el predicado puede ser verdadero o falso.
Si se usa P para referirse a un predicado, entonces { x | P (x) } indica el conjunto de todos los
valores x de modo que P sea verdadero. Los predicados se pueden conectar con conectivos
lógicos ∧ (and), ∨ (or) y ¬ (not) para formar predicados compuestos:
Una conjunción consiste de predicados conectados por AND, una disyunción consiste de
predicados conectados por OR y una negación es un predicado precedido por un NOT.
∃ x (P (x))
∀ s (P (s))
que indica que P(s) es verdadero para todos los valores s, en el rango. Una variable sin un calificador
(∃ o ∀) es llamada variable libre, y una con un calificador es llamada una variable limitada.
En este lenguaje, expresamos variables que representan tuplas. Si por ejemplo existe una tupla t
contenida en una relación r escribiremos t ∈ r. Si queremos expresar el valor que toma el atributo A
para la tupla t, lo haremos de la siguiente forma: t[A].
Como dijimos, el cálculo relacional es declarativo (no tiene procedimientos), por tanto cuando
deseamos obtener un conjunto de tuplas (una relación) a partir de otras tenemos que expresarlo
usando los medios que el cálculo relacional nos ofrece, si por ejemplo, queremos obtener una
relación con el conjunto de tuplas que cumplen el predicado P, tendremos que expresarlo de esta
manera: {t | P(t)}. Por ejemplo: "Queremos tener una lista completa de todos aquellos clientes que
tienen un préstamo cuyo importe sea más de un millón" (selección).
El cuantificador ∃ sirve para realizar proyecciones. "Queremos saber los nombres de los clientes
que poseen un préstamo de más de un millón".
{t | ∃
s ∈ préstamo ∧s[importe] > 1.000.000 ∧t[nombre_cliente] = s[nombre_cliente] }
Con la anterior operación definimos una nueva relación que consta de un sólo atributo
(nombre_cliente).
Hasta ahora hemos usado el conectivo ∧, pero también podremos usar ∨ y ¬. Con estos conectivos
podemos realizar la unión, diferencia e intersección de conjuntos. "Queremos obtener una relación
con los nombres de los clientes que o bien tienen una cuenta, o bien un préstamo, o ambas cosas en
la sucursal 10" (unión).
El conectivo ∨ actúa aquí como unión, haciendo incluso que los clientes que tengan depósito y
préstamo, aparezcan solamente una vez.
Si queremos realizar una intersección de conjuntos, por ejemplo obtener una relación de todos los
clientes que tienen depósito y préstamo en la sucursal 10, bastaría cambiar el ∨anterior por un ∧. Por
Por último, para realizar un producto cartesiano, por ejemplo, "Queremos obtener el nombre de los
clientes con préstamo en la sucursal principal, y las ciudades en las que viven".
Los datos que se guardan en variables correspondientes a atributos. Las variables se refieren a
atributos, lo que en cálculo relacional orientado a tuplas era t[A] es ahora A1, por tanto para referirse
a una tupla se deben nombrar todas las variables correspondientes a los atributos de esa tupla. (< x 1,
x2, ....., xn >). Por ejemplo, una tupla de préstamo se expresaría: < p, s, c, i > con: p = num_prestamo;
s = nombre_sucursal; c = nombre_cliente; i = importe.
En el cálculo relacional orientado a dominios, la expresión general tendrá la forma: { < x 1, x2, ....., xn >
| P(< x1, x2, ....., xn >) }
Selección: Queremos los nombres de los clientes, número de sucursal, número de préstamo e
importe de todos aquellos préstamos cuyo importe sea superior a un millón de pesos:
Proyección: Utilizaremos la cláusula ∃ . Por ejemplo sólo queremos los nombres de los clientes con
préstamo superior a un millón.
Unión: Nombre de clientes que tengan préstamo, depósito o ambas cosas en la sucursal principal.
{ < c > | ∃ < p, s, c, i > ∈ prestamo ∧s = "Principal" ∨∃ < s, cu, c, sa > ∈ deposito ∧s = "Principal" }
Para la intersección y la diferencia, al igual que en el cálculo relacional orientado a tuplas basta
sustituir el ∨por un ∧o un ∧¬ respectivamente.
Al igual que el álgebra relacional, el cálculo relacional tampoco es amigable para el usuario, por esta
razón se han desarrollado lenguajes comerciales orientados al usuario, y que se basan en alguno de
los lenguajes formales.
3.6. Normalización
El objetivo básico del modelado lógico es desarrollar una buena descripción de los datos, sus
interrelaciones y sus restricciones. Para el modelo relacional, esto significa que se debe identificar un
conjunto correcto de relaciones. Sin embargo, la tarea de elegir las relaciones en ocasiones es difícil
porque existen muchas opciones que debe considerar el diseñador. Las técnicas presentadas a
continuación se basan en un gran conjunto de investigaciones sobre el proceso de diseño lógico
generalmente llamado normalización.
La normalización es el proceso que sirve para crear relaciones bien estructuradas que cubren el
modelo de las operaciones de una empresa, siguiendo un conjunto de principios bien definidos y
mediante el cual se dividen relaciones en múltiples relaciones para eliminar las anomalías y
manteniendo la integridad de los datos.
El estudio de estas anomalías fue realizado originalmente por Codd, quien identificó las causas y
definió las tres primeras “formas normales”. Una relación se encuentra en una formal normal
específica si satisface el conjunto de requerimientos o restricciones para esa forma. Investigaciones
posteriores realizadas por Boyce y Codd refinaron la tercera forma normal. Las investigaciones
independientes de Fagin, Zaniolo y Delobel generaron la definición de tres nuevas formas. Todas las
formas normales están anidadas, de modo que cada una satisface las restricciones de la anterior,
pero es una mejor forma ya que elimina faltas encontradas en la forma anterior. El objetivo del diseño
Dependencia funcionales
Dependencia transitivas
Dependencia multivaluadas
Dependencia de reunión
Una dependencia funcional (DF) es un tipo de relación entre atributos donde un atributo determina
el valor de los otros.
Se escribe:
AàB lo que se lee: “A determina funcionalmente a B”.
Ejemplo:
Estudiante
IdEstudiante Apellido Carrera Nivel Créditos CURP
1000 Pérez Historia Avanzado 90 AAAA111111
1001 Ramírez Matemáticas Avanzado 95 BBBB222222
1002 López Computación Básico 15 CCCC333333
1003 Bravo Arte Intermedio 63 DDDD444444
1004 Ramírez Computación Básico 25 EEEE555555
Ya que el apellido se puede repetir, igual que la carrera o los créditos, pero los créditos determinan
funcionalmente el nivel del estudiante, aunque el valor de créditos no sea único, lo cual indica que
una determinante no necesariamente única.
Algunas dependencias funcionales son llamadas triviales porque siempre se satisfacen en cada
relación. En las dependencias funcionales triviales, el implicado es un subconjunto de la
determinante. Si todos los atributos en el conjunto de la derecha se incluyen en el lado izquierdo de
la dependencia, o si los dos lados son iguales, la DF es trivial, ejemplo:
{A, B} à A
{A, B} à B
{A, B} à {A,B}
Por ejemplo, en la relación anterior Estudiante, idEstudiante à créditos y créditos à nivel, por lo
tanto idEstudiante à nivel.
Fagin identificó otro tipo de dependencia que puede causar problemas diseño, las dependencias
multivaluadas. Una dependencia multivaluada es un tipo de relación entre atributos donde un
atributo multidetermina a otros pero entre los otros no hay una relación. Aàà B, Aàà C pero B no
tiene relación con C.
Ejemplo:
Profesor/Departamento/Comité
idProfesor departamento comité
101 Computación Exámenes
101 Matemáticas Exámenes
101 Computación Titulación
101 Matemáticas Titulación
221 Biología Biblioteca
330 Inglés Exámenes
330 Inglés Admisión
De modo que esto obliga a escribir todas las combinaciones de los valores de departamento con los
valores de comité para cada profesor, o de otra forma, parecería que existe una interrelación entre
departamento y comité. Nótese que la llave de la relación debe ser {idProfesor, departamento,
comité}. Si se desea actualizar un comité al que pertenece el profesor 101, se debe hacer en dos
lugares, si se desea insertar la tupla de un profesor que no pertenece a algún comité no se puede, ya
que comité es parte de la llave y no permite valores nulos. Similarmente, si se borra la membresía
del profesor 221 al comité de Biblioteca, se pierde el resto de la información almacenada sobre él, ya
que no se permiten valores nulos en la llave.
Ya que un profesor no está asociado con un solo departamento, sino con un conjunto de
departamentos y está asociado con un comité específico en un momento dado, el conjunto de
departamentos para un idProfesor particular es independiente del conjunto de comités para el
profesor. Esta independencia es la causa de los problemas.
Definición: Sea R una relación teniendo atributos o conjuntos de atributos A, B y C. Existe una
dependencia multivaluada del atributo B sobre el atributo A si y sólo si el conjunto de valores de B
asociados con un valor de A es independiente de los valores de C.
Se escribe:
Si R tiene al menos tres atributos A, B y C, entonces en R(A, B, C), si Aàà B, entonces Aàà C
también. A diferencia de las dependencias funcionales, que hacían ciertas tuplas ilegales en las
relaciones, las dependencias multivaluadas hacen ciertas tuplas esenciales en la relación. En el
ejemplo anterior, es obligatorio incluir ciertas tuplas porque se han incluido otras. Por ejemplo,
cuando se escribe la combinación 101 con los valores de departamento Computación y Matemáticas,
se tienen que escribir dos tuplas para cada valor de comité, Exámenes y Titulación, y colocar cada
valor de departamento en una tupla con cada valor de comité.
Como se verá más adelante, no todas las descomposiciones son sin pérdida, ya que existen
proyecciones cuyas reuniones no generan la relación original. Por ejemplo, en la relación:
Empleado/Proyecto/Función
nombre Función nombre proyecto
empleado
López diseñador Nueva España
López programador Emprendedor
López diseñador Emprendedor
Pérez diseñador Emprendedor
La tabla muestra qué función realizan los empleados en cada proyecto. Se puede descomponer la
tabla por proyección en dos tablas:
Tabla1 Tabla2
nombre empleado Función función nombre proyecto
López diseñador diseñador Nueva España
López programador programador Emprendedor
Pérez diseñador diseñador Emprendedor
Sin embargo, cuando se reúnen las dos tablas, se obtienen tuplas adicionales que no aparecían en
la tabla original, perdiendo información.
La tabla original puede ser recreada sólo reuniendo una tercera tabla:
Definición. “Una relación está en primera forma normal (1FN) si, y sólo si, todos los valores en la
relación son atómicos para cada atributo en la relación”.
Esto significa que cada atributo en cada renglón, o celda de la tabla, contiene sólo un valor, no puede
contener conjuntos, listas, campos repetidos o grupos en el dominio. Los valores en el dominio
deben ser valores simples que no pueden separarse en otros datos.
Estudiante
IdEstudiante Apellido Carrera Nivel Créditos CURP
1000 Pérez Historia Avanzado 90 AAAA111111
1001 Ramírez Matemáticas Avanzado 95 BBBB222222
1002 López Computación Básico 15 CCCC333333
Matemáticas
1003 Bravo Arte Inglés Intermedio 63 DDDD444444
1004 Ramírez Computación Básico 25 EEEE555555
En el ejemplo se puede permitir un estudiante realice más de una carrera; se podría intentar
almacenar todas las carreras en una sola columna para cada estudiante. Esto violaría la 1FN. Es
importante mantener las relaciones en 1FN de modo que los operadores relacionales, como se han
Otra forma de tratar de normalizar podría ser cuando se conoce el número máximo de repeticiones
que un atributo puede tener y se agregan nuevas columnas para los atributos. Por ejemplo, si se
sabe que los estudiantes pueden estudiar máximo dos carreras, se podría intentar poner Carrera1 y
Carrera2 como atributos. Las desventajas de esta aproximación son que se debe saber el número
máximo de repeticiones, y si esto cambia, se deberá modificar el esquema y las aplicaciones que
accedan esos datos; también, las consultas se vuelven más complejas y además se pueden tener
demasiados espacios vacíos (nulos) en la tabla.
Otra alternativa sería hacer los atributos multivaluados parte de la llave. Usando este método, la
nueva tabla contendría múltiples tuplas para cada estudiante con múltiples carreras. Esta solución
dificultará tener la relación en una forma normal de nivel más alto ya que se tendrán muchos valores
duplicados con las consecuentes anomalías de datos.
Estudiante Estudiante/Carrera
IdEstudiant Apellid Nivel Crédito CURP IdEstudiant Carrera
e o s e
1000 Pérez Avanzado 90 AAAA111111 1000 Historia
1001 Ramírez Avanzado 95 BBBB222222 1001 Matemáticas
1002 López Básico 15 CCCC333333 1002 Computación
1003 Bravo Intermedio 63 DDDD444444 1002 Matemáticas
1004 Ramírez Básico 25 EEEE555555 1003 Arte
1003 Inglés
1004 Computación
3.1.1.27. Segunda Forma Normal
Definición. “Una relación está en segunda forma normal (2FN) si, y sólo si, se encuentra en 1FN y
todos los atributos que no son claves dependen por completo de la clave”. Aà B
Suponiendo la tabla:
Estudiante
idMateria idEstudiant nombre estudiante idFacultad salón grado
e
art103a 1001 Pérez 101 H221 A
art103a 1010 Ramírez 101 H221
art103a 1006 López 101 H221 B
La llave de la relación sería {idMateria, idEstudiante}, por lo que existen atributos que son
dependientes funcionalmente de la combinación de la PK, pero hay otros que son dependientes
funcionalmente de un subconjunto de esa combinación, por ejemplo, aunque nombre estudiante es
funcionalmente dependiente de la combinación {idMateria, idEstudiante}, también es dependiente
funcionalmente de una parte de la PK (idEstudiante).
La transformación a 2FN se hace realizando proyecciones sobre la relación original de modo que sea
posible obtener nuevamente la tabla original mediante la reunión de las proyecciones obtenidas. Aún
si no existen atributos que dependan funcionalmente de la PK de la relación original, es importante
mantener la relación (aún sólo con la PK) para poder reconstruir la relación original mediante la
reunión. Esta “relación de conexión” muestra cómo se relacionan las proyecciones.
Definición. “Una relación está en tercera forma normal (3FN) si, y sólo si, está en 2FN y todos los
atributos no clave dependen funcionalmente de la clave y sólo de la clave ó son miembros de alguna
llave candidata”. No hay Dependencias Transitivas.
Aún cuando las relaciones en 2FN son mejores que las que sólo están en la 1FN, aún pueden tener
anomalías de datos. La 3FN indica que los atributos no clave deben depender de la clave, sólo de la
clave y nada más de la clave. Ejemplo:
Estudiante
IdEstudiante Apellido Carrera Nivel Créditos CURP
1000 Pérez Historia Avanzado 90 AAAA111111
1001 Ramírez Matemáticas Avanzado 95 BBBB222222
1002 López Computación Básico 15 CCCC333333
1003 Bravo Arte Intermedio 63 DDDD444444
Unidad 2. Modelo Relacional Página 31
1004 Ramírez Computación Básico 25 EEEE555555
En esta relación idEstudiante à créditos y créditos à nivel, por lo tanto idEstudiante à nivel.
1. Crear una nueva relación usando los atributos que dependan de otro atributo no clave.
2. Borrar los atributos anteriores de la relación original.
3. Tomar el atributo del cual dependan los atributos eliminados como clave primaria de la nueva
relación.
Estudiante Créditos/Nivel
IdEstudiant Apellid Carrera Crédito CURP Crédito Nivel
e o s s
1000 Pérez Historia 90 AAAA111111 15 Básico
1001 Ramírez Matemáticas 95 BBBB222222 25 Básico
1002 López Computación 15 CCCC333333 63 Intermedio
1003 Bravo Arte 63 DDDD444444 90 Avanzado
1004 Ramírez Computación 25 EEEE555555 95 Avanzado
Definición. “Una relación está en forma normal Boyce-Codd (BCFN) si cada determinante es una
clave candidata”.
La definición de la 3FN es la original desarrollada por Codd y es suficiente para relaciones que tienen
una sola llave candidata, pero es deficiente cuando hay múltiples llaves candidatas que son
compuestas o traslapadas. Por ello fue formulada, una nueva definición de la 3FN, nombrada por sus
creadores Boyce y Codd, para tomar en cuenta todos los casos. Ejemplo:
Profesor
nombreProfeso departamento oficina nivel fechaContratació
r n
Álvarez Arte A101 Académico 1975
Bravo Matemáticas M201 Asistente 2000
Dorantes Arte A101 Asociado 1992
García Matemáticas M201 Académico 2001
Hernández Matemáticas M203 Asociado 1990
Salamanca Computación C101 Académico 1980
Salamanca Historia H102 Asociado 2001
Trujillo Computación C101 Instructor 1995
Vega Computación C105 Asociado 2000
En esta tabla se puede asumir que, aunque los nombres no son únicos, no hay dos profesores con el
mismo nombre en el mismo departamento, cada profesor tiene sólo una oficina, un departamento
puede tener varias oficinas y los profesores en el mismo departamento pueden compartir oficinas. A
partir de esas suposiciones, se obtienen las siguientes DFs:
oficina à departamento
nombreProfesor, departamento à oficina, nivel, fechaContratación
Profesor Oficina/Departamento
nombreProfeso oficina nivel fechaContratació oficin departamento
r n a
Álvarez A101 Académico 1975 A101 Arte
Bravo M201 Asistente 2000 C101 Computación
Dorantes A101 Asociado 1992 C105 Computación
García M201 Académico 2001 H102 Historia
Hernández M203 Asociado 1990 M201 Matemáticas
Salamanca C101 Académico 1980 M203 Matemáticas
Salamanca H102 Asociado 2001
Trujillo C101 Instructor 1995
Vega C105 Asociado 2000
En ocasiones, puede no ser deseable transformar una relación en FNBC. En particular, si existen
dependencias funcionales que no se preservan cuando se realiza la descomposición y se vuelve
difícil forzar la dependencia funcional en la BD ya que dos o más tablas deben ser reunidas para
lograrla o se pierde una restricción importante. En ese caso, es preferible mantener la 3FN, que
siempre permite mantener las dependencias.
Definición. “Una relación está en cuarta forma normal (4FN) si está en FNBC y no tiene
dependencias de valores múltiples no triviales”. Ninguna relación puede contener dos o más
relaciones 1:n ó n:m. AààB y Aàà C
Aunque la FNBC es suficiente para remover cualquier anomalía relacionada con dependencias
funcionales, las investigaciones de Fagin identificaron la dependencia multivaluada que también
causa problemas de diseño. Ejemplo:
Profesor/Departamento/Comité
Unidad 2. Modelo Relacional Página 33
idProfesor departamento comité
101 Computación Exámenes
101 Matemáticas Exámenes
101 Computación Titulación
101 Matemáticas Titulación
221 Biología Biblioteca
330 Inglés Exámenes
330 Inglés Admisión
Profesor/Departamento Profesor/Comité
idProfesor departamento idProfesor comité
101 Computación 101 Exámenes
101 Matemáticas 101 Titulación
221 Biología 221 Biblioteca
330 Inglés 330 Exámenes
330 Admisión
3.1.1.31. Quinta Forma Normal
Definición. “Una relación está en quinta forma normal (5FN) si está en 4FN y además no tiene
dependencias de reunión (Join)”.
Esencialmente, esto significa que las únicas descomposiciones válidas son aquellas que involucran
llaves candidatas. Las dependencias de reunión están relacionadas con dependencias de valores
múltiples, pero pueden ser muy difíciles de identificar porque son sutiles. Si un diseño consiste de
relaciones que están en 5FN, éstas están en su forma más simple, de modo que no se gana nada
descomponiéndolas más, ya que ocasionarían pérdida de información. Desafortunadamente, no
existe una forma simple de verificar la 5FN. Las dependencias de reunión son generalmente raras,
de modo que los diseñadores terminan el proceso de normalización en 4FN, FNBC o 3FN para
preservar las dependencias funcionales.
Si para dos relaciones con una interrelación M:M se puede obtener esta interrelación como resultado
del producto cartesiano de ambas, se deben mantener separadas y no crear una tercera relación que
defina la interrelación de ambas.
Cuando la relación universal se construye contiene, por definición cada atributo en la BD. En el
proceso de descomposición de la relación universal en pequeñas relaciones y moviendo los atributos
a ellas, se desea asegurar que cada atributo aparezca en al menos una de las relaciones, de modo
que ningún dato se pierda. Como se ha visto, el esquema de la BD generalmente contiene algunos
atributos repetidos para representar las interrelaciones entre tablas. Sin embargo, los atributos tienen
que ser colocados en las relaciones de modo que preserven toda la información, no sólo todos los
atributos.
Una dependencia funcional representa una restricción que debe ser forzada en la BD. Cada vez que
se realiza una actualización, el DBMS debe verificar que la restricción no se viola. Es más fácil
verificar restricciones sobre una tabla que verificar una que involucra múltiples tablas, lo que puede
requerir hacer primero una reunión. Para evitar que tener que hacer esas reuniones, sería preferible
que en una descomposición las dependencias funcionales involucren atributos que están en la
misma tabla, si es posible. Dada una descomposición de una relación R, con un conjunto de
dependencias funcionales en ella, sobre un conjunto individual de relaciones {R1, R2, …, Rn}, para
cada dependencia funcional A à B es deseable para cada atributo en A U B que aparezcan en la
misma relación Ri. Esta propiedad es llamada preservación de dependencia. Siempre es posible
encontrar descomposición preservando la dependencia que está en 3FN, pero no siempre es posible
encontrar una que está en FNBC.
Definición: Una descomposición de una relación R es un conjunto de relaciones {R1, R2, …, Rn}
tales que cada Ri es un subconjunto de R y la unión de todas las Ri es R.
Definición: Una descomposición {R1, R2, …, Rn} de una relación R es llamada descomposición
sin pérdida para R si la reunión natural de R1, R2,… Rn produce exactamente la relación R.
Empleado/Proyecto/Rol
nombre función nombre proyecto
empleado
López diseñador Nueva España
López programador Emprendedor
López diseñador Emprendedor
Pérez diseñador Emprendedor
La tabla muestra qué función realizan los empleados en cada proyecto. Se puede descomponer la
tabla por proyección en dos tablas:
Tabla1 Tabla2
nombre empleado función función nombre proyecto
López diseñador diseñador Nueva España
López programador programado Emprendedor
r
Pérez diseñador diseñador Emprendedor
Sin embargo, cuando se reúnen las dos tablas, se obtienen tuplas adicionales que no aparecían en
la tabla original.
Resultado de Reunión
nombre función nombre proyecto
empleado
López diseñador Nueva España
López diseñador Emprendedor
López programador Emprendedor
Pérez diseñador Nueva España tupla espúrea
Pérez diseñador Emprendedor
Estas son tuplas espúreas (falsas), creadas por los procesos de proyección y reunión. Ya que sin la
tabla original, no hay forma de identificar cuáles tuplas son genuinas y cuáles espúreas, se puede
perder información (aún cuando se tienen más tuplas) si se sustituyen las proyecciones para la
relación original.
Se puede garantizar descomposición sin pérdida asegurándose que, para cada par de relaciones
que se reúnen, el conjunto de atributos comunes es una llave de una de las relaciones. Esto puede
hacerse colocando atributos funcionalmente dependientes en una relación con sus determinantes y
manteniendo las determinantes por sí mismas en la relación original.
De modo más formal, para una descomposición binaria, si R es descompuesta en dos relaciones
{R1, R2} entonces la reunión es sin pérdida si, y sólo si, alguno de los conjuntos de DFs para R, o es
implicado por las DFs en R:
R1 ∩ R2 à R1 – R2
ó
R1 ∩ R2 à R2 – R1
Esta regla implica que todas las características y reglas requeridas por el modelo deben extenderse
a todo el sistema distribuido.
SQL es un lenguaje estándar usado para comunicarse con sistemas manejadores de bases de datos
relacionales (RDBMS). El estándar SQL ha sido definido por la Organización Internacional de
Estándares (ISO – International Standards Organization) y el Instituto Nacional Americano para la
Estandarización (ANSI – American National Standars Institute). El nombre oficial del lenguaje es
Lenguaje Estándar Internacional de Bases de Datos SQL (International Standar Database
Language SQL) dado en 1992. De los distintos lenguajes que se usaban en los primeros RDBMSs,
SQL se impuso como estándar en los RDBMSs actuales y aunque existen algunas variaciones, se
sigue intentando su normalización.
Está basado sobre todo en el álgebra relacional. Tiene también facilidades del cálculo relacional, de
manera que ciertas tareas pueden ser hechas de varias formas. Es por tanto un lenguaje
procedimental y aprocedimental al mismo tiempo.
3.8.1. Antecedentes
Como sabemos, el modelo relacional surgió a finales de los 60s como resultado de las
investigaciones de E.F. Codd en los laboratorios de IBM en San José de California; los trabajos de
Codd, provocaron una serie de estudios teóricos y prototipos que se extienden a partir de 1970.
El lenguaje SQL inicialmente fue definido durante los 70s, y se llamaba SEQUEL, diminutivo de
Structured English Query Language (Lenguaje Inglés Estructurado de Consulta). SEQUEL fue
implementado originalmente como parte del Sistema R, un prototipo de RDBMS llamado SEQUEL-
XRM, durante los años 74 y 75. Este prototipo evolucionó durante el 76 y 77, pasando a ser
SEQUEL/2, en esta versión se empezaron a soportar consultas multitabla y acceso multiusuario. La
palabra English eventualmente se eliminó del nombre original y la abreviatura cambió a SQL por
motivos legales. Poco después, el Sistema R de IBM implementó un subconjunto de este lenguaje.
3.8.2. Versiones
En 1982 el Comité de bases de datos X3H2 de ANSI, presentó un lenguaje relacional estándar
basado principalmente en el SQL propio de los productos IBM; en 1886 este organismo aprueba el
lenguaje como norma pasando a denominarse SQL/ANSI, que también es aprobado el siguiente año
como norma ISO (ISO 1987). En esta norma se especifican dos niveles (I y II) a cumplir, siendo el
nivel I un subconjunto de las funcionalidades proporcionadas por el nivel II. Este estándar recibió
muchas críticas ya que es una intersección de las instrumentaciones existentes, concebido
primordialmente para proteger los intereses de los fabricantes; debido a esto, Codd afirma que el
SQL/ANSI es muy débil, fallando en el soporte de muchas características que los usuarios realmente
necesitan si quieren aprovechar todas las ventajas del enfoque relacional. El SQL/ANSI es incluso
menos fiel al modelo relacional que las versiones comerciales.
En 1989 se revisa la versión 1 del estándar conocida como Addendum, que agrega cierta integridad
referencial, que se denomina integridad referencial básica, ya que sólo permite definir la opción
restringir modificación y borrado y no proporciona cambios en cascada. Por otro lado, ya que la
norma ISO 89 no estandariza las definiciones para SQL embebido en lenguajes de programación,
ANSI define ese mismo año un estándar para SQL embebido (ANSI 1989). Ese mismo año, Apple
Computer presenta el Data Access Language (DAL) para sus computadoras, el cual es un dialecto
del SQL que soporta varios RDBMSs.
En junio de 1990, IBM anuncia su estándar DRDA (Distributed Relational Database Access) como
parte de la arquitectura SAA (System Application Architecture).
En abril del 91 el SAG (SQL Access Group) completa la Fase I de especificaciones técnicas, que
define un estándar para intercambiar mensajes SQL sobre una red OSI, basado en la
especialización SQL del RDA de ISO. En junio del 91 este grupo realizó una demostración con más
de veinte RDBMSs que se intercambiaban datos y consultas. En el mes de noviembre de ese mismo
año, Microsoft anunció ODBC (Open Database Connectivity) basado en es estándar del SAG.
En 1992 este grupo completó su segunda fase, que especificaba una API (Application Programming
Interface) y CLI (Call Level Interface) y que ampliaba el estándar a más instalaciones cliente/servidor,
en la que además de las especificaciones OSI se incluyen otros protocolos de red como TCP/IP. En
noviembre de ese año Borland relanzó el estándar ODAPI (Open Database Application Programming
Interface) como IDAPI (Integrated Database Application Programming Interface), con el patrocinio de
IBM, Novell y WordPerfect.
También en el 92 se aprueba como norma internacional una nueva versión conocida como SQL2 o
SQL-92 (ISO 1992), en la que se incrementa sustancialmente la capacidad semántica del esquema
relacional, se agregan nuevos operadores, se mejora el tratamiento de errores y se incluyen normas
para el SQL embebido. En esta nueva norma se definen tres niveles de conformidad distintos: Entry
SQL, Intermediate SQL y Full SQL, Siendo este último el que ofrece mayores funcionalidades,
mientras que el primer nivel es un subconjunto del segundo y este, del tercero.
Este estándar fue complementado con dos nuevas partes que abordan la interfaz a nivel de llamadas
(Call Level Interface), ISO 1995 y la definición de módulos almacenados persistentes (Persistent
Store Modules) ISO 1996. Esta versión de la norma internacional convierte a SQL en un lenguaje
computacionalmente completo agregando estructuras de control, manejo de excepciones, etc.
Recientemente, se ha publicado una nueva versión del estándar, el SQL:2003 (ISO/IEC 9075, 2003)
que revisa todas las partes del estándar anterior. En esta nueva versión se incluyen, entre otras
características el SQL/XML (especificaciones relacionadas con XML) y otras características como
nuevos tipos de datos básicos (es decir, bigint, multiset y XML), mejoras de las rutinas SQL
equivocadas, extensiones de la sentencia CREATE TABLE, una nueva sentencia MERGE, un nuevo
objeto de esquema (el generador de secuencias o valores secuenciales) y dos nuevas clases de
columnas: identidad, que son aquellas que funcionan como contadores y generadas, aquellas que se
obtienen por la combinación de otras columnas.
Lenguaje de de definición de datos (DDL). El SQL DDL proporciona órdenes para definir la
estructura y organización de los datos almacenados y sus relaciones, permitiendo especificar
diversos objetos, eliminar los objetos existentes y modificarlos.
Recuperación de datos. SQL permite recuperar los datos almacenado de la base de datos
para mostrarlos directamente o usarlos en alguna aplicación; para ello incluye un lenguaje de
consulta basado en álgebra relacional y el cálculo relacional de tuplas.
Lenguaje de manipulación de datos (DML). El SQL DML También incluye instrucciones
para insertar, suprimir y modificar tuplas de la base de datos.
Definición de Vistas. El SQL DDL incluye instrucciones para definir vistas que facilitan las
consultas a los usuarios finales.
Autorización (DCL). El SQL DCL incluye instrucciones para especificar derechos de acceso
a tablas y vistas; de este modo restringe la capacidad de los usuarios de recuperar, agregar,
eliminar o modificar datos, protegiendo así los datos de accesos no autorizados.
Integridad. El SQL DDL proporciona también medios para definir varias especificaciones de
integridad que mantienen los datos consistentes y la protege contra corrupciones debidas a
actualizaciones inconsistentes o a fallos del sistema.
Control de transacciones. SQL incluye instrucciones para especificar el inicio y fin de
transacciones, permitiendo el bloqueo de datos para controlar la concurrencia. SQL se
emplea para coordinar la capacidad de compartir datos por parte de usuarios concurrentes,
asegurando que no interfieren unos con otros.
Las instrucciones o comando que componen el lenguaje SQL son generalmente divididas en tres
principales categorías o sublenguajes. Cada sublenguaje se especializa en un aspecto particular del
lenguaje. Uno de estos sublenguajes es el DDL o Data Definition Language (Lenguaje de Definición
SQL puede ser usado interactivamente o en su forma embebida. El SQL Interactivo o por comandos
permite al usuario indicar comandos de modo interactivo directamente al DBMS y recibir los
resultados tan pronto como se producen. Cuando se usa SQL Embebido, las instrucciones SQL se
incluyen como parte de programas escritos en un lenguaje de propósito general como C, C++, Java o
COBOL. En este caso, nos referimos al lenguaje de propósito general como Lenguaje anfitrión. La
razón principal para usar SQL embebido es usar características adicionales del lenguaje de
programación que no son soportadas generalmente por SQL.
Cuando se usa SQL embebido, el usuario no observa directamente la salida de las diversas
instrucciones, en vez de ello, el resultado se retorna en variables o parámetros de procedimientos.
Como regla general, cualquier instrucción SQL que puede ser usada interactivamente, puede ser
usada como parte de un programa de aplicación. Sin embargo, el usuario necesita tener en cuenta
que pueden haber diferencias sintácticas en las instrucciones cuando se usan interactivamente o
cuando se usan en modo embebido dentro de programas.
Ya que SQL es exclusivamente usado con RDBMSs, es necesario conocer los conceptos básicos de
este tipo de base de datos para comprender mejor las características del lenguaje.
Aunque SQL se basa en el modelo relacional, incorpora algunos elementos adicionales que facilitan
la gestión de datos. En este sentido se introduce el concepto de catálogo. Un RDBMS puede tener
uno o varios catálogos y a su vez, una o varias bases de datos. En cada catálogo existe una
definición que contiene las tablas base sobre las que se define un conjunto de vistas o esquemas
que son autodescriptivos.
El estándar SQL es enorme, por lo que sólo se revisarán los aspectos comunes más significativos.
SQL tiene varios elementos de sintaxis que son utilizados en la mayor parte de las instrucciones,
entre ellos:
Identificadores. Nombres de los objetos como tablas, vistas columnas, bases de datos, etc.
Operadores. Los operadores periten realizar operaciones aritméticas, lógicos, relacionales,
asignaciones o concatenaciones de valores. Se usan para cambiar datos (permanente o
temporalmente), para buscar tuplas o atributos que cumplan con determinada condición.
Para especificar las cláusulas del lenguaje se usará una extensión de la Forma Normal Backus
(BNF), donde:
Cualquier instrucción SQL o comando es una combinación de una o más cláusulas. Las cláusulas
son, en general, introducidas por palabras reservadas. Un ejemplo de una instrucción es:
SELECT <expresión>*
[FROM <nombreDeTabla>*
WHERE <condición>*
ORDER BY <expresión>*]
En esta instrucción, se pueden distinguir cuatro palabras reservadas y cuatro cláusulas. Una palabra
reservada es una palabra que tiene un significado específico dentro del lenguaje. El uso de palabras
reservadas fuera de su contexto generará errores. Cada cláusula inicia con una palabra reservada.
Algunas de las cláusulas dentro de la sintaxis de las instrucciones son opcionales y otras
obligatorias, las cláusulas encerradas entre corchetes son opcionales.
Las instrucciones SQL se asemejan a frases en inglés, completadas con palabras de relleno que no
agregan nada al significado de la frase pero que hace que se lea más naturalmente.
Al escribir instrucciones o comandos de SQL es útil seguir ciertas reglas y guías para mejorar la
lectura de las instrucciones y facilitar su edición en caso necesario. Algunas de estas reglas son:
Elegir crear o no una tabla adicional en los casos de las interrelaciones uno a uno y uno a muchos
depende de la aplicación que se esté diseñando. Tener las interrelaciones en tablas separadas
proporciona mayor flexibilidad, permitiendo cambiar las asociaciones fácilmente. Sin embargo, esto
requiere realizar reuniones siempre que se use la interrelación, lo cual produce un bajo desempeño
si muchas aplicaciones requieren las reuniones. El diseñador debe elegir entre flexibilidad y
eficiencia, dependiendo del criterio para la aplicación.
En los casos de FK y ND, cuando estas restricciones se refieren a conjuntos de columnas que deben
cumplir la restricción, se pueden numerar (FK1, FK2, …, FKn) para indicar que es una restricción
compuesta por varios atributos.
Tarea.
a. Leer al menos 2 fuentes adicionales sobre los temas vistos en esta unidad y hacer un resumen
de la unidad (máximo 1 cuartilla). No olvidar conclusiones y bibliografía.
b. Explicar cuáles son las diferencias entre el modelo de Red, Jerárquico y Relacional, entre el
modelo orientado a objetos y objeto relacional, entre la intensión y la extensión de la BD.