Base de Datos I

57
Base de Datos I Escuela Tecnológica Superior Universidad de Piura

description

Material del curso de Base de Datos I

Transcript of Base de Datos I

Base de

Datos I

Escuela Tecnológica Superior

Universidad de Piura

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 2

Tabla de contenido

TEORIA GENERAL DE SISTEMAS .................................................................................................................... 4

INTRODUCCIÓN .............................................................................................................................................. 4

OBJETIVO DE LOS SISTEMAS DE BDD ....................................................................................................... 4

ABSTRACCIÓN DE DATOS ............................................................................................................................ 4

MODELO DE DATOS ....................................................................................................................................... 5

INSTANCIA Y ESQUEMAS ............................................................................................................................. 7

INDEPENDENCIA DE DATOS ........................................................................................................................ 7

LENGUAJE DE DEFINICIÓN DE DATOS (DDL) ........................................................................................ 7

LENGUAJE DE MANIPULACIÓN DE DATOS (DML) ................................................................................ 8

GESTOR DE BASE DE DATOS ....................................................................................................................... 8

ADMINISTRADOR DE BASE DE DATOS ..................................................................................................... 9

LOS USUARIOS DE LA BASE DE DATOS .................................................................................................... 9

ESTRUCTURA DEL SISTEMA GLOBAL ..................................................................................................... 10

MODELO ENTIDAD - RELACIÓN ................................................................................................................... 12

ENTIDADES Y CONJUNTOS DE ENTIDADES ........................................................................................... 12

RELACIONES Y CONJUNTOS DE RELACIONES ...................................................................................... 12

ATRIBUTOS .................................................................................................................................................... 12

RESTRICCIONES DE ASIGNACIÓN (MAPPING) ...................................................................................... 13

CLAVES ........................................................................................................................................................... 14

DIAGRAMA ENTIDAD-RELACION ............................................................................................................. 15

REDUCCION DE LOS DIAGRAMAS E-R A TABLAS ............................................................................... 16

GENERALIZACION ........................................................................................................................................ 17

AGREGACIÓN ................................................................................................................................................ 18

DISEÑO DE UN ESQUEMA DE BASE DE DATOS DE E-R ....................................................................... 19

DICCIONARIO DE DATOS ................................................................................................................................ 20

DEFINICIÓN .................................................................................................................................................... 20

CONVENCIONALISMOS USADOS .............................................................................................................. 20

FORMATO DE LAS DEFINICIONES DEL DICCIONARIO DE DATOS ................................................... 20

MODELO RELACIONAL ................................................................................................................................... 22

ESTRUCTURA DE LA BASE DE DATOS ................................................................................................... 22

LENGUAJES RELACIONALES COMERCIALES ........................................................................................ 23

RESTRICCIONES DE INTEGRIDAD ................................................................................................................ 35

RESTRICCIONES DE DOMINIO .................................................................................................................. 35

INTEGRIDAD REFERENCIAL ...................................................................................................................... 35

DEPENDENCIAS FUNCIONALES: ............................................................................................................... 37

CIERRE DE UN CONJUNTO DE DEPENDENCIAS FUNCIONALES ....................................................... 38

RECUBRIMIENTO CANONICO: ................................................................................................................... 39

DISEÑO DE BASES DE DATOS RELACIONALES ......................................................................................... 41

PELIGROS EN EL DISEÑO DE BDD RELACIONALES ............................................................................. 41

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 3

NORMALIZACION POR MEDIO DE DEPENDENCIAS FUNCIONALES ................................................ 42

FORMA NORMAL DE BOYCE-CODD ......................................................................................................... 44

TERCERA FORMA NORMAL ....................................................................................................................... 45

COMPARACION DE BCNF Y 3NF ................................................................................................................ 46

DEPENDENCIAS MULTIEVALUADAS ....................................................................................................... 48

NORMALIZACIÓN ............................................................................................................................................. 50

MOTORES DE PERSISTENCIA ......................................................................................................................... 52

MODELO ORIENTADO A OBJETOS ........................................................................................................... 52

MODELO RELACIONAL ............................................................................................................................... 53

APLICACIONES TRADICIONALES ............................................................................................................. 54

BASES DE DATOS ORIENTADAS A OBJETOS ......................................................................................... 55

MOTORES DE PERSISTENCIA ..................................................................................................................... 55

OPCIONES PARA MOTORES DE PERSISTENCIA ..................................................................................... 56

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 4

TEORIA GENERAL DE SISTEMAS

INTRODUCCIÓN

Un sistema de gestión de base de datos (DBMS) consiste en una colección de datos interrelacionados y un

conjunto de programas para acceder a esos datos. La colección de datos normalmente denominada BASE DE

DATOS (BDD) contiene información acerca de una empresa determinada. El objetivo primordial de un sistema

de gestión de base de datos es proporcionar un entorno que sea a la vez conveniente y eficiente para ser utilizado

al extraer y almacenar información de la BDD.

Los sistemas de BDD están diseñados para gestionar grandes bloques de información y mantener la seguridad de

la información almacenada, pese a la caída o intento de acceso no autorizados. Si los datos son compartidos por

varios usuarios, el sistema debe evitar posibles resultados anómalos.

La gestión de datos implica tanto la definición de la estructura para el almacenamiento de la información como

la previsión de mecanismos para la gestión de la información.

OBJETIVO DE LOS SISTEMAS DE BDD

Un sistema de procesamiento de archivos está apoyado por un sistema operativo convencional.

Los registros Varios Archivos Diferente número de Programa

de aplicación

Almacenamos

Estos sistemas tienen un número de desventajas importantes:

1. Redundancia e inconsistencia de datos.

2. Dificultad de acceso a los datos.

3. Aislamiento de los datos (datos en diferentes archivos y con diferentes formatos. Es difícil escribir

nuevos programas).

4. Anomalías de acceso concurrente.

5. Problemas de Seguridad.

6. Problemas de Integridad (Restricciones de consistencia).

ABSTRACCIÓN DE DATOS

Un objetivo importante de un sistema de BDD es proporcionar a los usuarios de una visión abstracta de los

datos. Existen diversos niveles de abstracción. Así:

1. NIVEL FÍSICO.- Es el más bajo y describe como se almacenan los datos

2. NIVEL CONCEPTUAL.- Es el nivel intermedio y describe que datos son realmente almacenados en la

BDD y las relaciones que existen entre los datos. Aquí se describe la BDD completa en términos de un

número pequeño de estructuras relativamente sencillas aunque en el mundo físico no es así. Este nivel

es usado por el administrador de la BDD, quien decide que información deben guardar.

3. NIVEL DE VISIONES. Es el nivel más alto de abstracción y describe parte de la BDD completa.

Muchos usuarios del sistema de BDD no les interesa la totalidad de la información, los usuarios solo

necesitan una parte de la información (solo necesitan una parte de la BDD). El sistema puede

proporcionar muchas visiones para la misma BDD.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 5

.....

REGISTROS: Cuentas (Campos: número y saldo)

Empleado (Campos: nombre y salario)

Clientes (Campos: nombre, calle y ciudad)

NIVEL FÍSICO: Un registro puede describirse como un bloque de posiciones de memoria consecutivas (por

ejemplo palabras o bits).

NIVEL CONCEPTUAL: Cada uno de los registros se describe por medio de una definición de tipo y se define la

interrelación entre estos tipos de registros.

NIVEL DE VISIÓN: Se definen varias visiones de la BDD (Los cajeros solo ven la parte de la BDD que tiene

información sobre las cuentas de los clientes).

MODELO DE DATOS

Para describir la estructura de una BDD es necesario definir el concepto de modelo de dato. Un MODELO DE

DATO es una colección de herramientas conceptuales para describir datos, relaciones entre ellos, semántica

asociada a los datos y restricciones de consistencia. Los modelos de datos se dividen e tres grupos:

Modelo Lógico Basado en Objetos.

Modelo Lógico Basado en Registros.

Modelo Físico de Datos.

MODELO LÓGICO BASADO EN OBJETOS.- Se usan para describir datos en los niveles conceptual y

de visión. Se caracterizan por el hecho de que proporcionan capacidad de estructuración bastante flexible y

permiten especificar restricciones de datos.

Los más extensamente conocidos son:

- Modelo Entidad Relación

- Modelo Orientado a Objetos

- Modelo Infológico

- Modelo Binario

- Modelo Semántico de Datos

- Modelo Funcional de Datos

MODELO ENTIDAD RELACIÓN.- Se basa en una percepción de un mundo real, consiste en una

colección de objetos básicos llamados entidades y relaciones entre estos objetos. Una entidad es un objeto

que se distingue de otro objeto por medio de un conjunto de atributos. Una relación es una asociación entre

varias entidades.

Calle

Nombre Ciudad Número Saldo

Cliente CtaCli Cuenta

Visión 1 Visión 2 Visión 3 Visión N

Nivel Conceptual

Nivel Físico

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 6

MODELO ORIENTADO A OBJETOS.- Se basa en una colección de objetos. Un objeto contiene valores

almacenados en variables instancias dentro del objeto. Un objeto también contiene parte de código que

opera sobre el objeto, estas partes se llaman MÉTODOS. Los objetos que contienen los mismos tipos de

valores y los mismos métodos se agrupan en clase (una clase puede ser vista como una definición de TYPE

para objeto).

La única forma en la que un objeto puede acceder a los datos de otro objeto es invocando a los métodos de

ese objeto, esto se llama “Envío de un mensaje” al objeto.

Variable Instancia = Número y Saldo

Método = Interés de Pago

Si varía la tasa de interés -- Sólo varía el método.

Otras BDD tendrían que cambiar varios Programas de Aplicación.

MODELO LÓGICO BASADO EN REGISTROS.- Se utilizan para describir datos en los modelos

conceptual y físico. Se llaman así porque la BDD está estructurada en registros de formato fijo de varios

tipos. Cada tipo de registro define un número fijo de campos o atributos y cada campo es normalmente de

longitud fija (esto simplifica la implementación del nivel físico en la BDD).

Estos modelos de datos no incluyen un mecanismo para la representación directa de códigos en la BDD. En

cambio hay lenguajes separados que se asocian con el modelo para expresar consultas y actualizaciones de la

BDD. Los modelos de datos más ampliamente usados son:

Modelo relacional.

Modelo de red.

Modelo jerárquico.

MODELO RELACIONAL: Representa los datos y las relaciones entre los datos mediante una colección de

tablas, cada una de las cuales tienen un número de columnas con nombre único.

CLIENTES CUENTA

Nombre Calle Ciudad Número Número Saldo

José Castro Av. H 23 Talara 900 900 1,000

Luis López Av. Grau 572 Piura 556 556 500

Luis López Av. Grau 572 Piura 647 647 1,520

Rita Ruiz Av. Grau 572 Piura 647

MODELO DE RED: Se representa mediante una colección de registros y las relaciones entre los datos se

representan mediante enlaces, los cuales pueden verse como punteros. Los registros de la BDD se organizan

como una colección de grafos arbitrarios.

José Castro Av. H 23 Talara 900 1,000

Luis López Av. Grau 572 Piura 556 500

Rita Ruiz Av. Grau 572 Piura 647 1,520

MODELO JERÁRQUICO: Es similar al modelo de red, en el sentido de que los datos y las relaciones se

representan mediante registros y enlaces respectivamente. Se diferencian en que los registros están

organizados como una colección de árboles en vez de grafos arbitrarios.

José

Castro

Av. H

23

Talara Luis

López

Av. Grau

572

Piura Rita

Ruiz

Av. Grau

572

Piura

900 1,000 556 500 647 1,520 647 1,520

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 7

DIFERENCIAS: Los modelos Relacionales se diferencian de los modelos de red y jerárquico en que no

usan punteros o enlaces.

El modelo relacional conecta registros mediante los valores que estos contienen. Se define

una base matemáticamente formal.

MODELO FÍSICO DE DATOS.- Se usan para describir datos en el nivel más bajo. A diferencia de los

modelos lógicos de datos, hay muy pocos en uso. Dos de los más ampliamente conocidos son:

- Modelo Unificado.

- Memoria de Elementos.

Los modelos físicos de datos capturan aspectos de la implementación de los sistemas de BDD.

INSTANCIA Y ESQUEMAS

Una BDD cambia a lo largo del tiempo según se añada o elimina información.

La colección de información almacenada en la base de datos en un determinado momento en el tiempo se llama

una Instancia de la BDD.

El diseño global de la BDD se llama Esquema de la BDD. Los esquemas se cambian muy raras veces o nunca.

Los sistemas de BDD tienen varios esquemas: (en función de su nivel de abstracción)

- Esquema Físico

- Esquema Conceptual y

- Subesquemas

INDEPENDENCIA DE DATOS

Es la capacidad de modificar una definición de un esquema en un nivel sin afectar la definición de un esquema

en el nivel superior siguiente. Hay dos niveles:

1. Independencia Física de Datos.- Es la capacidad de modificar el esquema físico sin provocar que se vuelvan

a escribir los programas de aplicación. En algunas ocasiones son necesarias las modificaciones en el nivel

físico para mejorar el funcionamiento del sistema.

2. Independencia Lógica de Datos.- Es la capacidad de modificar el esquema conceptual sin provocar que se

vuelvan a escribir los programas de aplicación. Las modificaciones del nivel conceptual son necesarias

siempre que se altere la estructura lógica de la BDD.

La Independencia Lógica de Datos es más difícil de lograr que la Independencia Física de Datos, ya que los

programas de aplicación son fuertemente dependientes de la estructura lógica de los datos a los que acceden.

LENGUAJE DE DEFINICIÓN DE DATOS (DDL)

Un esquema de BDD se especifica por medio de un conjunto de definiciones que se expresa mediante un

lenguaje especial llamado Lenguaje de Definición de Datos (DDL Data Definition Languaje).

El resultado de la compilación de sentencias del DDL, es un conjunto de tablas las cuales se almacenan en un

archivo especial llamado DICCIONARIO DE DATOS (o directorio).

El diccionario de datos es un archivo que contiene METADATOS, es decir datos sobre los datos. Estos archivos

se consultan antes de leer o modificar los datos reales en el sistema de BDD.

La estructura de almacenamiento y los métodos de acceso usados por el sistema de BDD se especifican por

medio de un conjunto de definiciones en un tipo especial de DDL llamado Lenguaje de Almacenamiento y

Definición de Datos.

La compilación de estas definiciones da como resultado un conjunto de instrucciones que especifican los detalles

de implementación de los esquemas de BDD que normalmente se esconden de los usuarios.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 8

LENGUAJE DE MANIPULACIÓN DE DATOS (DML) (Data Manipulation Languaje)

Es un lenguaje que capacita a los usuarios a acceder o manipular datos según estén organizados por el modelo de

datos adecuado. Existen dos tipos:

Procedimentales: Los DML requieren que el usuario especifique que datos necesitan y como obtenerlos.

No Procedimentales: Los DML requieren que el usuario especifique que datos se necesitan, sin especificar

cómo obtenerlos.

Los DML No Procedimentales normalmente son más sencillos de aprender y usar que los Procedimentales. Sin

embargo, puesto que el usuario no tiene que especificar cómo conseguir los datos, estos lenguajes pueden

generar códigos que no sean tan eficientes como el producido por los lenguajes Procedimentales.

Una consulta es una sentencia que solicita la recuperación de información. El trozo de un DML que implica la

recuperación de información se llama: “Lenguaje de consultas”.

GESTOR DE BASE DE DATOS

Un gestor de BDD es un módulo de programa que proporciona el interfaz entre los datos de bajo nivel

almacenados en la BDD y los programas de aplicación y de consultas hechos al sistema.

El gestor de BDD es responsable de las siguientes tareas:

Interacción con el gestor de archivos

Implantación de la integridad

Implantación de la seguridad

Copia de seguridad y recuperación

Control de concurrencias.

INTERACCIÓN CON EL GESTOR DE ARCHIVOS

El gestor de BDD traduce las distintas sentencias del DML a comandos del sistema de archivos de bajo

nivel. Así el gestor de BDD es responsable del verdadero almacenamiento, recuperación y actualización

de los datos en la BDD.

IMPLANTACIÓN DE LA INTEGRIDAD

Los valores de los datos deben satisfacer ciertos tipos de restricciones de consistencia. El administrador

de BDD debe especificar explícitamente estas restricciones.

El gestor de BDD puede determinar si las actualizaciones a la BDD da como resultado la violación de las

restricciones, si así es, se debe tomar la acción apropiada.

IMPLANTACIÓN DE LA SEGURIDAD

No todos los usuarios de la BDD necesitan tener acceso a todo su contenido. Es trabajo del gestor de

BDD que se cumplan con estos requisitos.

COPIA DE SEGURIDAD Y RECUPERACIÓN

Es responsabilidad del gestor de BDD detectar fallas y restaurar la BDD al estado que existía antes de

ocurrir el fallo. Esto se lleva a cabo normalmente a través de la iniciación de varios procedimientos de

copia de seguridad y recuperación.

CONTROL DE CONCURRENCIA

Controlar la interacción entre los usuarios concurrentes es otra responsabilidad del gestor de BDD.

Los sistemas de BDD diseñados para utilizarse en computadoras personales pequeñas, pueden no tener todas las

características mencionadas anteriormente.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 9

ADMINISTRADOR DE BASE DE DATOS

Una de las razones principales para tener Sistemas de Gestión de BDD es tener control central de los datos y de

los programas que acceden a esos datos. La persona que tiene dicho control sobre el sistema se llama

administrador de BDD (Database Administrator: DBA).

Las funciones del administrador de BDD incluyen:

Definición de esquema.

Definición de la estructura de almacenamiento y del método de acceso.

Modificación del esquema y de la organización física.

Concesión de autorización para el acceso a los datos.

Especificaciones de las restricciones de integridad.

DEFINICIÓN DE ESQUEMAS

El esquema original de la BDD se crea escribiendo un conjunto de definiciones que son traducidas por el

compilador de DDL a un conjunto de tablas que son almacenadas permanentemente en un diccionario de

datos.

DEFINICIÓN DE LA ESTRUCTURA DE ALMACENAMIENTO DEL MÉTODO DE ACCESO

Se crean escribiendo un conjunto de definición que son traducidas por el compilador de lenguaje de

almacenamiento y definición de datos.

MODIFICACIÓN DEL ESQUEMA Y DE LA ORGANIZACIÓN FÍSICA

Son relativamente poco comunes, pero se logran escribiendo un conjunto de definiciones que son usadas

por el compilador DDL o bien por el compilador del lenguaje de almacenamiento y definición de datos

para generar modificaciones a las tablas internas apropiadas.

CONCESIÓN DE AUTORIZACIÓN PARA EL ACCESO A LOS DATOS

La concesión de diferentes tipos de autorización permite al administrador de la BDD regular que parte de

la BDD van a poder ser accedidas por varios usuarios.

ESPECIFICACIÓN DE LAS RESTRICCIONES DE INTEGRIDAD

Las restricciones de integridad se mantienen en una estructura especial del sistema que consulta el gestor

de BDD cada vez que tiene lugar una actualización en el sistema.

LOS USUARIOS DE LA BASE DE DATOS El objetivo primordial de un sistema de BDD es proporcionar un entorno para recuperar información de una

BDD y almacenar la información en la BDD. Hay cuatro tipos distintos de usuario de un sistema de BDD,

diferenciados por la forma en que interactúan con el sistema:

Programadores de aplicación

Usuarios sofisticados

Usuarios especializados

Usuarios ingenuos

PROGRAMADORES DE APLICACIONES

Los profesionales de computación que interaccionan con el sistema por medio de llamadas en DML, las

cuales están escritas en un lenguaje principal (Cobol, Pascal, C, etc.). Estos programas se denominan

programas de aplicación.

Los lenguajes de 4ta generación a menudo incluyen características especiales para facilitar la generación

de formas y la presentación de datos en las pantallas. La mayoría de sistemas de BDD comerciales

incluyen un lenguaje de 4ta generación.

USUARIOS SOFISTICADOS

Interaccionan con el sistema sin escribir programas. Escriben sus preguntas en un lenguaje de consultas

de BDD.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 10

USUARIO ESPECIALIZADOS

Algunos usuarios sofisticados escriben aplicaciones de BDD especializadas que no encajan con el marco

tradicional de procesamiento de datos. Ejemplo: Diseño asistido por computadora. Sistemas expertos, etc.

USUARIOS INGENUOS

Interactúan con el sistema, invocando a unos de los programas de aplicación permanentes que se han

escrito anteriormente.

ESTRUCTURA DEL SISTEMA GLOBAL

Un sistema de BDD se divide en módulos que tratan cada una de las responsabilidades del sistema general. El

sistema operativo (SO) proporciona únicamente los servicios más básicos por lo que el diseño de un sistema de

BDD debe incluir la interfaz entre el SO y Sistema de BDD.

Los componentes funcionales son:

1. Gestor de archivos

2. Gestor de base de datos

3. Procesador de consultas

4. Precompilador de DML

5. Compilador de DDL

1. Gestor de Archivos.- Gestiona la asignación de espacio en la memoria del disco y de la estructura de

datos usada para representar la información almacenada en el disco.

2. Gestor de Base de datos.- Proporciona el interfaz entre los datos (bajo nivel) de la BDD y los

programas de aplicación y las consultas que se hacen al sistema.

3. Procesador de Consultas.- Traduce sentencias en un lenguaje de consultas a instrucciones de bajo

nivel que tiene el gestor de base de datos.

4. Precompilador de DML.- Convierte las sentencias en DML incorporadas en un programa de

aplicación a llamadas normales a procedimientos en el lenguaje principal.

5. Compilador de DDL.- Convierte sentencias en DML en un conjunto de tablas que contienen

metadatos.

Además se requieren varias estructuras de datos como parte de la implementación del sistema físico,

incluyendo:

Archivos de datos: que almacena la BDD.

Diccionario de datos: que almacena Metadatos sobre la estructura de la BDD.

Índices: Que proporciona acceso rápido a los elementos de datos que contienen valores determinados.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 11

ESTRUCTURA DE SISTEMA GLOBAL

USUARIOS

Usuario Ingenuo Programador de Usuarios Administrador de

Aplicación Sofisticados Base de datos

Interface de Programas Consultas Planificación de

Aplicación Base de Datos

Precompilador

de DML Procesador de

consultas

Compilador de

DDL

Código Objeto Gestor de

de Programas de BDD

aplicación SISTEMA DE

GESTIÓN DE

BDD

Gestor

de Archivos

Archivos

de datos

Diccionario de

Datos

Almacenamiento en disco

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 12

MODELO ENTIDAD - RELACIÓN

El modelo de datos entidad – relación (E-R) se basa en la percepción de un mundo real que consiste en un

conjunto de objetos básicos llamados entidades y relaciones entre estos objetos. Se desarrolló para facilitar el

diseño de BDD permitiendo la especificación de un esquema empresarial. Este esquema representa la estructura

lógica global de la BDD.

ENTIDADES Y CONJUNTOS DE ENTIDADES

Una entidad es un objeto que existe y es distinguible de otros objetos. Una entidad puede ser concreta tal como

una persona o un libro, o puede ser abstracta como un día festivo o un concepto.

Un conjunto de entidades es un conjunto de entidades del mismo tipo Ejemplo: Clientes, Empleados, Cuentas.

Los conjuntos de entidades no necesitan ser disjuntos (Clientes, Empleados).

Una entidad está representada por un conjunto de ATRIBUTOS (Cuenta: #cuenta, saldo) (Cliente: Nombre,

Seguro social, Ciudad). Para cada atributo hay un conjunto de valores permitidos, llamados DOMINIO de ese

atributo.

Nombre = Conjunto de todas las cadenas de texto de una determinada longitud.

Num-cuenta = Conjunto de todos los enteros positivos.

El concepto de “Conjunto de Entidades” corresponde a la noción de “TIPO” en un lenguaje de programación.

Así una variable corresponde al concepto de una “Entidad” en el modelo E-R.

Ejemplo:

Sucursal = { Nombre-Sucursal , Ciudad-Sucursal , Activo}

Cliente = { Nombre-Cliente , Seguro Social ,Calle ,Ciudad-Cliente}

Empleado = { Nombre-Empleado , Número telefónico}

Cuenta = { Número-Cuenta , Saldo}

Transacción = { Número-Transacción , Fecha , Cantidad}

RELACIONES Y CONJUNTOS DE RELACIONES

Una relación es una asociación entre varias entidades.

Cliente = Harris Cuenta = #401

Un conjunto de relaciones es un conjunto de relaciones del mismo tipo. Ejemplo : Cuenta - Cliente.

La mayoría de los conjuntos de relaciones en un sistema de BDD son binarios. Ocasionalmente, sin embargo hay

conjuntos de relaciones que implican más de dos conjuntos de entidades.(Relación ternaria: Cliente- Cuenta-

Sucursal).

Siempre es posible sustituir un conjunto de relaciones no binarias por varios conjuntos de relaciones binarios

distintos. La función que juega una entidad se llama PAPEL Los papeles normalmente son implícitos y no se

suelen especificar, sin embargo son útiles cuando el significado de una relación necesita ser clasificado. Una

relación puede tener atributos descriptivos (Fecha Cta.CLi).

ATRIBUTOS

Es posible definir un conjunto de entidades y sus relaciones de varias formas diferentes. La diferencia está en la

forma en que tratamos los diversos atributos.

Ejemplo:

E Empleado = {Nombre-Empleado, Número-telefónico}

Si consideramos un teléfono como una entidad en si mismo.

Cada empleado tiene un teléfono.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 13

E Empleado = {Nombre-Empleado }

E Teléfono = { Número.telefónico, Situación}

R Empl-Tel = { Nombre-Empleado, Número.telefónico}

Un empleado puede tener 0 o varios teléfonos y un teléfono puede ser asignado a varios empleados.

La distinción entre que constituye un atributo y que constituye un conjunto de entidades depende principalmente

de la estructura de la empresa que se está modelando y de la semántica asociada con el atributo en cuestión.

RESTRICCIONES DE ASIGNACIÓN (MAPPING)

Una planificación E-R de una empresa puede definir ciertas restricciones a las cuales deben ajustarse los

contenidos de una BDD. Una restricción importante es la de cardinalidades de asignación que expresan el

número de entidades con las que se puede asociar otra entidad mediante un conjunto de relaciones. Las

cardinalidades de asignación pueden ser una de las siguientes:

UNA A UNA

Una entidad en A está asociada a lo sumo con una entidad en B.

Una entidad en B está asociada a lo sumo con una entidad en A.

UNA A MUCHAS

Una entidad en A está asociada a muchas entidades en B.

Una entidad en B está asociada a lo sumo con una entidad en A.

MUCHAS A UNA

Una entidad en A está asociada a lo sumo con una entidad en B.

Una entidad en B está asociada a muchas entidades en A.

MUCHAS A MUCHAS

Una entidad en A está asociada a muchas entidades en B.

Una entidad en B está asociada a muchas entidades en A.

b1

b2

b3

a1

a2

a3 1 1 1 1

a1

a2

a3

b1

b2

b3

b4

b5

1

M

1

M

b1

b2

b3

1

M

a1

a2

a3

a4

a5

1

M

M M M M a1

a2

a3

a4

b1

b2

b3

b4

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 14

La cardinalidad de asignación adecuada para un conjunto de relaciones determinado obviamente es dependiente

del mundo real que el conjunto de relaciones está modelando.

La dependencia de existencia constituye otra clase de restricciones. Si la existencia de la entidad X depende de la

existencia de la entidad Y se dice que Y es una entidad DOMINANTE y X es una entidad SUBORDINADA.

CLAVES

Conceptualmente las entidades y las relaciones son distintas pero desde la perspectiva de una BDD la diferencia

entre ellas debe expresarse en términos de sus atributos. El concepto de superclave nos permite hacer tales

distinciones.

Una superclave es un conjunto de uno o más atributos que considerados conjuntamente nos permiten identificar

de forma única a una entidad y a un conjunto de entidades

Entidad Cliente = {nombre-cliente, seguro-social, calle, ciudad}

Superclaves: { seguro-social }

{ nombre-cliente, calle }

{ nombre-cliente, seguro-social }

Una clave candidata es un conjunto de superclaves mínimas.

Claves Candidatas: { seguro-social }

{ nombre-cliente, calle }

Una clave primaria es una clave candidata que elige el diseñador de la BDD como el medio principal de

identificar entidades dentro de un conjunto de entidades.

Clave Principal: { seguro-social }

Es posible que un conjunto de entidades no tenga atributos suficientes para formar una clave primaria. Al

conjunto de entidades de este tipo se denomina CONJUNTO DE ENTIDADES DEBILES. Al conjunto de

entidades que si tienen una clave primaria se denominan CONJUNTO DE ENTIDADES FUERTES.

Las entidades débiles y fuertes están relacionadas con las dependencias de existencia.

Entidad Fuerte Entidad Dominante

Entidad Débil Entidad Subordinada

Una clave primaria de un conjunto de entidades débiles está formada por la clave primaria del conjunto de

entidades fuertes de la que depende su existencia y su discriminador.

El discriminador es un conjunto de atributos que permite que se haga distinción entre las entidades débiles.

Ej. : E (Transacción) = {Num-trans, fecha , saldo}

CP = Num-cuenta CP = Num-cuenta, Num-trans.

La composición de la clave primaria depende de la cardinalidad de asignación y de la estructura de los atributos

asociados con el conjunto de relaciones:

Si el conjunto de relaciones no tiene atributo asociados, entonces el conjunto de atributos forma una superclave.

Esta superclave es una clave principal si la cardinalidad de asignación es muchas a muchas.

Cuenta Transacción

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 15

Empleado

Si el conjunto de relaciones tiene varios atributos asociados, entonces una superclave está formada por los

atributos anteriormente descritos con la finalidad de agregar uno o más atributos asociados.

DIAGRAMA ENTIDAD-RELACION

Una base de datos puede representarse gráficamente por medio de un diagrama E-R. Consta de los siguientes

componentes.

Rectángulos Representan conjuntos de entidades

Elipse Representan atributos

Rombos Representan conjunto de relaciones

Líneas Enlazan atributos a conjuntos de entidades y estos a

conjuntos de relaciones.

Cardinalidad uno

Cardinalidad muchos

Los papeles que juegan las entidades indican en los DER etiquetando las líneas que conectan los rombos a los

rectángulos.

direc fecha saldo

nomcli ciudad #cta.

c/c

Nombre Telef

Director Trabaja

para

Trabajador

A B

A B

A B

A B

A B

A B

Cliente Cuenta

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 16

Cuenta Transacción

Cliente Cuenta Transacción

Fecha Cantidad

#cta. Saldo #trans

1 M

Entidad Fuerte BITÁCORA Entidad Débil

Nomsuc Ciudad Activo

Conjunto de Relaciones

No Binarias

S.S

Direc #cta.

Nomcli Ciudad Saldo

CAB

M M

REDUCCION DE LOS DIAGRAMAS E-R A TABLAS

Una BDD que se ajusta a un diagrama E-R puede representarse por medio de una colección de tablas. Para cada

conjunto de entidades y para cada conjunto de relaciones en la BDD, existe un tabla única a la que se le asigna el

nombre del conjunto de entidades o del conjunto de relaciones correspondiente. Cada tabla tiene un número de

columnas que, a su vez, tiene nombres únicos.

Ciudad

S.S Saldo Fecha

Nomcli Calle #cta. #trans

Cta Bita-

cli cora

REPRESENTACIÓN DE CONJUNTO DE ENTIDADES FUERTES

CUENTA CLIENTE

Numcta. Saldo Nomcli Seg.Soc Calle Ciudad

259 1000 Ruiz 32-5151 Lima Piura

630 2000 Zapata 35-9384 Callao Sullana

400 500 Otolla 32-5847 Cusco Talara

701 400 Allain 32-8425 Tacna Castilla

189 1500 Alama 33-1288 Piura Tumbes

REPRESENTACIÓN DE CONJUNTO DE ENTIDADES DÉBILES

Se representan mediante la unión de la clave primaria de la entidad fuerte del que depende con los atributos

del conjunto de entidades débiles.

Ejemplo: Transacción

Cliente Cuenta

Sucursal

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 17

TRANSACCIÓN

Numcta Numtrans Fecha Cantidad

259 5 11 mayo 1990 +50

630 10 17 mayo 1990 +70

400 103 23 mayo 1990 -300

259 6 07 junio 1990 -44

801 58 15 junio 1990 +900

259 7 17 junio 1990 -80

REPRESENTACIÓN DE CONJUNTOS DE RELACIÓN

Mediante una tabla que contenga n columnas distintas con los atributos del conjunto de relaciones y las

claves primarias del conjunto de entidades que relacionan.

Relación Cuenta-Cliente ---> Atributo {fecha}

Entidad Cliente -------------> CP {SS}

Entidad Cuenta --------------> CP {Numcta}

Seguro Social NumCta Fecha

32-5171 259 17 junio 1990

32-9381 630 17 mayo 1990

27-8123 400 23 mayo 1990

12-1133 701 15 junio 1990

El caso de conjunto de relaciones que conectan un conjunto de entidades débiles con su correspondiente

conjunto de entidades fuertes es especial. Estas relaciones son muchos a una y no tienen atributos

descriptivos. Además, la clave primaria de un conjunto de entidades débiles, incluye la clave primaria de

conjunto de entidades fuertes.

Entidad: Cuenta = { Numcta } CP

Transacción = { Numcta, Numtrans } CP

Relación Bitácora = { Numcta, Numtrans } Tabla

Entidad Transacción = { Numcta, Numtrans , fecha , cantidad } Tabla

La tabla bitácora es redundante y no necesita presentarse en una representación tabular en un diagrama E-R.

GENERALIZACION

En una relación de inclusión que existe entre un conjunto de entidades del nivel más alto y uno o más conjuntos

de nivel más bajo.

Numcta Saldo

Entidades del Nivel más Alto

ISA

Entidades del Nivel más Bajo

Saldo deudor tasainterés

Cuenta

CtaAhorros CtaCorriente

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 18

Empleado

Maquinaria

Proyecto

La generalización se representa por medio de un componente triangular etiquetado ISA (significa es un o es

una).

Ejemplo: Una cuenta de ahorros es una cuenta. La generalización se usa para hacer resaltar los parecidos entre

tipos de entidades de nivel más bajo y ocultar sus diferencias. Los atributos de los conjuntos de entidades de

nivel más alto se dice que son heredados por los conjuntos de entidades de nivel más bajo. Existen dos métodos

para transformar un DER que incluyan generalización en forma tabular.

1.- Crear una tabla para el conjunto de entidades del nivel más alto. Para cada conjunto de entidades de nivel más

bajo crear una tabla que incluye una columna para cada uno de los atributos de ese conjunto de entidades más

una columna para cada atributo de la clave primaria del conjunto de entidades del nivel mas alto.

Cuenta = { Numcta, saldo }

CuentaCorriente = { Numcta, saldodeudor }

Cuenta de Ahorros = { Numcta, tasainteres }

TABLA 1

CUENTA CTA AHORROS CTA CORRIENTE

Numcta Saldo Numcta TasaInteres Numcta SaldoDeudor

2.- Crear una tabla que incluya una columna para cada uno de los atributos de ese conjunto de entidades más una

columna para cada atributo del conjunto de entidades del nivel más alto.

CuentaCorriente = { Numcta, saldo, saldodeudor }

CuentaAhorros = { Numcta, saldo, tasainteres }

TABLA 2

CTAAHORROS CTACORRIENTE

Numcta Saldo TasaInteres Numcta Saldo SaldoDeudor

AGREGACIÓN

Una limitación del modelo E-R es que no se puede expresar relaciones entre relaciones. La relación es una

abstracción en la cual las relaciones se tratan como entidades de nivel más alto. Un conjunto de entidades de este

tipo se trata de la misma forma que cualquier otro conjunto de entidades.

Codemp Nomemp Codproy Nomproy

Trabajo

ISA

CodMaq NomMaq

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 19

Codemp Nomemp Codproy Nomproy

Nivel más alto

Trabajo

ISA

Nivel más bajo

CodMaq NomMaq

La transformación de un diagrama E-R que incluyen agregación a una forma tabular es directa.

Entidades:

EMPLEADO PROYECTO MAQUINARIA

CodEmp NomEmp CodProy NomProy CodMaq NomMaq

Relaciones:

TRABAJO ISA

CodEmp CodProy CodEmp CodProy CodMaq

DISEÑO DE UN ESQUEMA DE BASE DE DATOS DE E-R

El modelo E-R proporciona un alto grado de flexibilidad en el diseño de un esquema de BDD para modelar una

empresa dada.

Entre las decisiones a tomar se encuentran:

El uso de una relación ternaria o de un par de relaciones binarias.

Si un concepto de un mundo real se expresa mejor mediante un conjunto de entidades o por un

conjunto de relaciones.

El uso de un atributo de un conjunto de entidades.

El uso de un conjunto de entidades fuertes o débiles.

La oportunidad de usar agregación.

La oportunidad de usar generalización.

El diseñador de BDD necesita una buena comprensión de la empresa que se va a modelar para tomar esas

decisiones.

Proyecto Empleado

Maquinaria

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 20

DICCIONARIO DE DATOS

DEFINICIÓN

Es una herramienta que complementa a los Diagramas de Flujo de Datos para la especificación técnica de los

datos. Es un conjunto ordenado de definiciones de todos y cada uno de los elementos del DFD.

CONVENCIONALISMOS USADOS

Los operadores que se utilizan en las definiciones son:

Secuencia: [+] Concatenación de dos o más componentes.

Selección: [ / ] Selección de un componente, de dos o más.

Repetición: { } Repetición de uno o varios componentes.

Agrupación: ( ) Agrupación de un conjunto de datos.

FORMATO DE LAS DEFINICIONES DEL DICCIONARIO DE DATOS

Ficheros

Nombre del Fichero:

Composición: {Datos continuos / Definidos en sí mismo / Discretos}

Organización: Secuencial / Indexado / Directo.

Ubicación:

Nota :

Datos Continuos

Mnemónico :

Descripción :

Tipo : (Carácter / Numérico / Fecha / Memo)

Longitud :

Unidad : (Entero / Moneda)

Rango :

Datos Definidos en sí mismo

Mnemónico :

Descripción :

Tipo :

Longitud :

Nota :

Datos Discretos

Mnemónico : Tipo:

Descripción : Longitud:

Valores : Significado:

. .

. .

Nota:

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 21

Ejemplo de Fichero:

Nombre del fichero: Materiales

Composición : ( Codmat + Descripmat + Stock + StockMin + Stockmax + Unidad)

Datos definidos en sí mismo

1) Nombre : Codmat

Descripción : Código que identifica a un material

Tipo : carácter

Longitud : 10

2) Nombre : Descripmat

Descripción : Detalla las características propias de un material.

Tipo : carácter

Longitud : 40

3) Nombre : Stock

Descripción : Especifica la cantidad de materiales que hay en el almacén.

Tipo : Numérico.

Longitud : 8

4) Nombre : Stockmin

Descripción : Es la cantidad mínima de materiales que debe haber en el almacén.

Tipo : Numérico.

Longitud : 8

5) Nombre : Stockmax

Descripción : Es la cantidad máxima de materiales que debe haber en el almacén.

Tipo : Numérico.

Longitud : 8

6) Nombre : Unidad.

Descripción : Es la unidad de medida en la que se expresan los diferentes materiales.

Tipo : Carácter.

Longitud : 10

Organización: Indexado.

Nota: Archivo que contiene la única información sobre los materiales de se tienen en la empresa.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 22

MODELO RELACIONAL

El modelo relacional se ha establecido como principal modelo de datos para aplicaciones comerciales de

procesamiento de datos.

ESTRUCTURA DE LA BASE DE DATOS

Una BDD relacional consiste en una colección de tablas, cada una de las cuales se le asigna un nombre único.

Una fila de una tabla representa una relación entre un conjunto de valores.

ESTRUCTURA BÁSICA

Una tabla es una relación.

Una fila es una tupla.

Una tupla tiene atributos

Un atributo tiene un conjunto de valores llamado dominio.

Relación Depósitos: 5 tuplas , 4 atributos

NomSuc NumCta NomCli Saldo

Piura 101 López 800

Sullana 215 Benites 700

Paita 102 Sosa 400

Talara 305 Silupú 350

El alto 208 Martínez 900

Sea la variable tupla t, la primera tupla de la relación. Usaremos la notación t [ NomSuc] para indicar el valor de

t en el atributo nombre-sucursal, así : t[NomSuc] = “Piura”

t[NumCta] = 101

ESQUEMA DE LA BASE DE DATOS

En una BDD debemos diferenciar entre el esquema de la BDD o el diseño lógico y una instancia de la BDD. Es

convenientemente dar nombres al esquema de una relación. Adoptamos el convenio de usar nombres en

minúsculas para las relaciones y nombres, empezando con una letra mayúscula, para los esquemas de relaciones.

Esquema_depósito = (nomsuc, numcta, nomcli, saldo)

Esquema de Relación

Si depósito es una relación sobre el Equema_depósito por: deposito (Esquema_depósito)

El esquema de una relación es una lista de atributos y sus correspondientes dominios, cuando queremos definir

los dominios usaremos la notación:

(nombre_sucursal: cadena, numcta: entero, nomcli: cadena, saldo: entero)

Ejemplo: Relación Clientes

Nomcli Calle Ciudad

Reyes Grau Piura

Sullón Arequipa Sullana

Chávez Brasil Talara

Zapata Tacna Lima

Benites Marañón Lima

Esquema_Cliente = [nomcli, calle, ciudad]

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 23

El uso de atributos comunes en esquemas de relaciones es una forma de relacionar tuplas de distintas relaciones.

Ejemplo: Esquema_sucursal = (nomsuc, activo, ciudad)

Esquema_cliente = (nomcli, calle, ciudad)

Esquema_deposito = (nomsuc, numcta, nomcli, saldo)

Esquema_prestamo = (nomsuc , numpres, nomcli, cantidad)

CLAVES

Las nociones de superclave, clave candidata y clave primaria son iguales a las del modelo E-R.

LENGUAJES DE CONSULTAS

Un lenguaje de consultas es un lenguaje en el que un usuario solicita información de la BDD. Estos lenguajes

son de más alto nivel que los lenguajes estándar de programación. Se clasifican en lenguajes procedimentales y

lenguajes no procedimentales.

Lenguaje de Consulta Procedimental .- El usuario proporciona al sistema para que realice una secuencia de

operaciones de la BDD y poder calcular el resultado deseado.

Lenguaje de Consulta No Procedimental.- El usuario describe la información deseada sin dar un procedimiento

específico para obtener esa información.

Estudiaremos dos lenguajes “puros” que son álgebra relacional y cálculo relacional de tuplas

LENGUAJES RELACIONALES COMERCIALES

SQL (STRUCTURED QUERY LANGUAGE)

LENGUAJE DE CONSULTA ESTRUCTUIRADO

Es el lenguaje de BDD relacional estándar. El lenguaje SQL tiene varias partes:

Lenguaje de Definición de Datos (DDL).- El SQL DDL proporciona órdenes para definir esquemas de

relación, eliminar relaciones, crear índices y modificar esquemas de relaciones.

Lenguaje de Manipulación de Datos Interactivo (DML).- Incluye un lenguaje de consultas basado en el

álgebra relacional y el cálculo relacional de tuplas. También incluye órdenes para insertar, suprimir y

modificar tuplas en la base de datos.

Lenguaje de Manipulación de Datos Inmerso (DML).- La forma inmersa de SQL está diseñada para usar

dentro del los lenguajes de programación de propósito general. Tales como el PL/1, Cobol, Coreal, Fortran,

C, FoxPro, Visual Basic, etc.

Definición de Vistas.- El SQL DDL incluye órdenes para definir vistas.

Actualización.- El SQL DDL incluye órdenes para especificar derechos de acceso a relaciones y vistas.

Integridad.- Las versiones recientes de SQL incluyendo el ANSI estándar proporciona únicamente una

forma limitada de comprobación de la integridad.

Control de Transacciones.- SQL incluye órdenes para especificar el comienzo y final de las transacciones.

ESTRUCTURA BASICA

Consta de tres cláusulas SELECT, FROM, WHERE

SELECT: Corresponde a la operación de proyección del álgebra relacional. Se usa para listar los atributos

que se desean en el resultado de una consulta.

FROM: Corresponde a la operación de producto cartesiano del álgebra relacional. Lista las relaciones que

se van a utilizar.

WHERE: Corresponde al predicado de selección del álgebra relacional. Consta de un predicado que

implica atributos de las relaciones que aparecen en la cláusula FROM.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 24

SELECT A1 , A2,....,An

FROM R1,R2,......,Rn

WHERE p

SELECT * : selecciona todos los atributos de todas las relaciones que aparecen en la cláusula FROM.

Si se omite la cláusula WHERE, el predicado p = verdadero.

El resultado de una consulta en SQL es por supuesto una relación.

Ejemplo: Encontrar los nombres de todas las sucursales en la relación depósito.

SELECT nomsuc

FROM deposito

OPERACIONES DE CONJUNTOS Y TUPLAS DUPLICADAS

En los casos que queremos forzar la eliminación de duplicados, insertamos la palabra DISTINCT después de

SELECT.

SELECT DISTINCT nomsuc Si queremos quitar duplicados

FROM deposito SELECT ALL nomsuc Se especifica explícitamente que no se

FROM deposito eliminan los duplicados. Normalmente

no se utiliza ALL pues ya está implícita.

OPERACIONES DE CONJUNTOS:

SQL incluye operaciones de: Unión ( ), Intersect ( ), Minus ( ).

Ejemplo: Encontrar a todos los clientes que tienen una cuenta en la sucursal de Paita.

SELECT DISTINCT nomcli

FROM depósito

WHERE nomsuc = “Paita”

Ejemplo: Cliente que tenga un préstamo en la sucursal de Paita.

SELECT DISTINCT nomcli

FROM préstamo

WHERE nomsuc = “Paita”

Ejemplo: Encontrar a todos los clientes que tiene una cuenta, un préstamo en la sucursal de Paita.

(SELECT DISTINCT nomcli

FROM depósito

WHERE nomsuc = “Paita”)

UNION

(SELECT DISTINCT nomcli

FROM préstamo

WHERE nomsuc = “Paita”)

Ejemplo: Cliente que tiene una cuenta y un préstamo.

(SELECT DISTINCT nomcli

FROM depósito

WHERE nomsuc = “Paita”)

INTERSECT

(SELECT DISTINCT nomcli

FROM préstamo

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 25

WHERE nomsuc = “Paita”)

Ejemplo: Cliente de la sucursal de Paita que tienen una cuenta ,pero no un préstamo.

(SELECT DISTINCT nomcli

FROM depósito

WHERE nomsuc = “Paita”)

MINUS

(SELECT DISTINCT nomcli

FROM préstamo

WHERE nomsuc = “Paita”)

PREDICADOS Y CONECTORES

Ejemplo: Encontrar el nombre y la ciudad de todos los clientes que tienen un préstamo en alguna sucursal.

SELECT DISTINCT cliente. nomcli , ciudad

FROM préstamo, cliente

WHERE préstamo. nomcli = cliente. Nomcli

SQL usa los conectores lógicos AND ( ) , OR ( ) , NOT ( )

Las expresiones aritméticas tienen los operadores + , - , * y / operando sobre constantes o valores de

tuplas.

BETWEEN: Operador de comparación.

Ejemplo: Encontrar el nombre y la ciudad de todos los clientes de que tienen un préstamo en la sucursal de Piura.

SELECT DISTINCT cliente. nomcli , ciucli

FROM préstamo, cliente

WHERE préstamo. nomcli = cliente. Nomcli

AND nomsuc = “Piura”

Ejemplo: Encontrar aquellas cuentas cuyo saldo sea mayor igual que 90 000 y menor igual que 100 000.

SELECT numcta

FROM depósito

WHERE saldo 100 000 AND saldo 90 000

También: WHERE saldo BETWEEN 90 000 AND 100 000

Ejemplo: Encontrar aquellas cuentas cuyo saldo sea diferente al rango de 90 000 y 100 000.

SELECT numcta

FROM depósito

WHERE saldo NOT BETWEEN 90 000 AND 100 000

LIKE: es un operador de comparación de cadenas de caracteres.

%: El carácter % es igual a cualquier subcadena.

_: El carácter _ es igual a cualquier carácter.

ESCAPE ( \ ): se une antes de % o - cuando estos son un carácter normal.

“Pedro % ” es igual a cualquier cadena que empiece por Pedro.

“% 19 %” es igual a cualquier cadena que contenga la subcadena 19.

“_ _ _ “ es igual a cualquier cadena menor o igual a 3 caracteres.

SELECT nomcli

FROM Cliente

WHERE Calle LIKE “% Jr. % “

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 26

calle LIKE “ ab \ % cd % “ escape “\” Resultado: “ab %cd _______”

calle LIKE “ ab \\ cd % “ escape “\” Resultado: “ab \ cd _______”

PERTENENCIA A UN CONJUNTO

IN : Conector In Prueba si un conjunto pertenece si se es miembro de un conjunto, donde el conjunto es una

colección de valores producidos por la cláusula SELECT.

NOT IN : Prueba la de No Pertenecer al conjunto

Ejemplo:

Encontrar a todos los clientes que tienen un préstamo y una cuenta en la sucursal de Piura.

(SELECT nçnombre_cliente

FROM deposito

WHERE nombre_sucursal=“Piura”)

SELECT DISTINCT nombre_cliente

FROM prestamo

WHERE nombre_sucursal = “Piura” and

nombre_cliente IN ( SELECT nombre_cliente

FROM deposito

WHERE nombre_sucursal=“Piura”)

ò

SELECT DISTINCT nombre_cliente

FROM prestamo

WHERE nombre_sucursal = “Piura” and

<nombre_sucursal,nombre_cliente > IN

SELECT nombre_sucursal,nombre_cliente

FROM deposito)

Ejemplo: Tiene una cuenta pero no un préstamo.

SELECT DISTINC nomcli

FROM deposito

WHERE nomsuc = “Piura” AND

nomcli NOT IN (SELECT DISTINC nomcli

FROM prèstamo.

WHERE nomsuc = “Piura”)

VARIABLE DE TUPLA

Una variable de tupla en SQL debe estar asociada con una relación determinada. Se definen en la cláusula

FROM.

SELECT DISTINC T. Nomcli , ciudad

FROM prèstamo S, cliente T

WHERE S. nomcli = T. Nomcli

Ejemplo: Queremos encontrar a todos los clientes que tienen una cuenta en la misma sucursal en la que Javier

tiene cuentas.

SELECT DISTINC T. Nomcli

FROM deposito S, deposito T

WHERE S. nomcli = “Javier” AND

S. nomsuc = T. nomsuc

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 27

Otra manera:

SELECT DISTINC Nomcli

FROM deposito

WHERE nomsuc IN

(SELECT nomsuc

FROM deposito

WHERE nomcli = “Javier” )

COMPARACION DE CONJUNTOS

La frase “mayor que algún” se representa en SQL por >SOME.

Ejemplo: Encontrar los nombres de todas las sucursales que tienen un activo mayor que alguna sucursal situada

en Sullana.

SELECT DISTINC T. nomsuc

FROM sucursal S, sucursal T

WHERE T. activo > S. activo AND

S. ciudad = “ Sullana”

Ejemplo: Genera todos los activos de las sucursales de Sullana.

SELECT DISTINC nomsuc

FROM sucursal

WHERE activo > SOME

( SELECT activo

FROM sucursal

WHERE ciusuc = “Sullana”

SQL también permite las comparaciones < SOME , SOME , SOME , SOME , SOME.

(Any = Some)

La frase “mayor que todos” se representa > all.

SQL permite las comparaciones < ALL , ALL , ALL , ALL , ALL.

SELECT nomsuc

FROM sucursal

WHERE activo > ALL

(SELECT activo

FROM sucursal

WHERE ciusuc = “Sullana”)

Puesto que SELECT genera un conjunto de tuplas a veces queremos comparar conjuntos para determinar si un

conjunto contiene todos los miembros de algún otro conjunto. Tales comparaciones se hacen en SQL usando:

CONTAINS, NO CONTAINS

Ejemplo: Encontrar a todos los clientes que tienen una cuenta en todas las sucursales situadas en Piura.

SELECT DISTINC S. nomcli

FROM deposito S

WHERE ( SELECT T. nomsuc

FROM deposito T

WHERE S. nomcli = T. Nomcli ) Encuentra todas las sucursales en las

que el cliente tiene una cuenta.

CONTAINS

(SELECT nomsuc

FROM sucursal

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 28

WHERE ciusuc = “Piura”) Encuentra todas las sucursales de Piura.

El procesamiento de construcción CONTAINS por computadores es demasiado caro. Por lo que no aparece en

el ANSI estándar.

PRUEBAS PARA RELACIONES VACIAS

SQL incluye una característica para probar si una subconsulta tiene alguna tupla en su resultado. La construcción

EXISTS devuelve el valor TRUE si la subconsulta del argumento no está vacía. NO EXISTS devuelve el valor

TRUE si la subconsulta del argumento está vacía.

Ejemplo: Encontrar a todos los clientes que tienen una cuenta y un préstamo en la sucursal de Paita.

SELECT nomcli

FROM cliente

WHERE EXISTS (SELECT *

FROM deposito

WHERE deposito.nomcli = cliente. nomcli

ciudad = “Paita” )

AND EXISTS (SELECT *

FROM prestamo

WHERE prestamo. nomcli = cliente. nomcli

ciudad = “Paita” )

Ejemplo: Encontrar a todos los clientes de la sucursal de Paita que tienen una cuenta allí; pero no un préstamo.

SELECT nomcli

FROM cliente

WHERE EXISTS ( SELECT *

FROM deposito

WHERE deposito.nomcli = cliente. nomcli

ciudad = “Paita” )

AND NOT EXISTS ( SELECT *

FROM prestamo

WHERE prestamo. nomcli = cliente. nomcli

ciudad = “Paita” )

Ejemplo: Encontrar a todos los clientes que tienen una cuenta en todas las sucursales situadas en Sullana.

SELECT DISTINCT S. nomcli

FROM deposito S

WHERE NOT EXISTS ( ( SELECT nomsuc

FROM sucursal

WHERE ciudad = “ Sullana ” )

MINUS

( SELECT T. nomsuc

FROM depósito T

WHERE S. nomcli = T. nomcli ) )

ORDENACION DE LA PRESENTACION DE TUPLAS

La cláusula ORDER BY hace que las tuplas en el resultado de una consulta en un orden determinado, por

omisión SQL lista en orden ascendente.

Encuentra todas las

sucursales de

Sullana.

Encuentra todas las

sucursales donde el

cliente S tiene una

cuenta.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 29

Ejemplo: Para listar en orden alfabético todos los clientes que tienen un préstamo en la sucursal de Piura.

SELECT DISTINCT nomcli

FROM préstamo

WHERE nomsuc = “Piura”

ORDER BY nomcli

Ejemplo: Listar todos los datos de un préstamo ordenados desde la cantidad más pequeña y por número de

préstamo.

SELECT *

FROM préstamo

ORDER BY cantidad DESC,

numprest ASC

FUNCIONES DE AGREGACION

SQL ofrece la posibilidad de calcular funciones en grupos de tuplas usando la cláusula GROUP BY .El atributo

o atributos dados en la cláusula GROUP BY se usan para formar grupos. Las tuplas con el mismo valor se

colocan en un grupo.

Las funciones para calcular:

Promedio : AVG

Mínimo : MIN

Máximo : MAX

Total : SUM

Contar : COUNT

Ejemplo: Encontrar el saldo promedio de las cuentas de todas las sucursales.

SELECT nomsuc , AVG ( saldo)

FROM depósito

GROUP BY nomsuc

RECORDAR: SI SE QUIERE ELIMINAR DUPLICADOS USAR DISTINCT

Ejemplo: Encontrar el número de clientes con depósito para cada sucursal.

SELECT nomsuc , COUNT ( DISTINCT nomcli)

FROM depósito

GROUP BY nomsuc

Si se desea declarar una condición que se aplica a los grupos más que a las tuplas ,usaremos la cláusula

HAVING de SQL.

Ejemplo: Saldo promedio de las sucursales mayor que 1 200.

SELECT nomsuc , AVG ( saldo)

FROM depósito

GROUP BY nomsuc

HAVING AVG ( saldo ) > 1 200

Las funciones de Agregación no pueden componerse en SQL así:

MAX ( AVG (...) ) NO ESTA PERMITIDO.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 30

Ejemplo: Encontrar aquellas sucursales con el saldo promedio “mayor”.

SELECT nomsuc

FROM depósito

GROUP BY nomsuc

HAVING AVG ( saldo ) ALL (SELECT AVG ( saldo)

FROM depósito

GROUP BY nomsuc)

Cuando deseamos tratar la relación completa como un grupo único, no se usa la cláusula GROUP BY.

Ejemplo: Encontar el saldo promedio en todas las cuentas.

SELECT AVG ( saldo)

FROM depósito

La función Agregación COUNT se usa frecuentemente para contar el número de tuplas de una relación.

Ejemplo: Encontar el saldo promedio de todos los clientes con depósito ,que viven en Sullana y tienen por lo

menos tres cuentas.

SELECT AVG ( saldo)

FROM depósito , cliente

WHERE depósito. nomcli = cliente. nomcli AND

ciudad = “Sullana”

GROUP BY depósito. nomcli

HAVING COUNT ( DISTINCT numcta ) 3

ANSI de SQL permite utilizar COUNT como COUNT (*) o COUNT ( DISTINCT ... ). Se puede usar

DISTINCT con MAX y MIN aunque el resultado no cambia. La palabra clave ALL puede usarse en vez de

DISTINCT para especificar retención de duplicados; pero puesto que ALL está implícito no es necesario.

MODIFICACIÓN DE LA BDD

ELIMINACIÓN.- En SQL una supresión se expresa por medio de:

DELETE r r = relación

WHERE p p = predicado

La tupla T de r por la cual p(T) es verdadera será eliminada de r. DELETE opera sobre una sola relación.

Ejemplo: Suprimir todas las tuplas de la relación préstamo.

DELETE préstamo

Ejemplo: Suprimir todos los registros del cliente Pérez.

DELETE depósito

WHERE nomcli = “Pérez”

Ejemplo: Suprimir todos los préstamos cuyo número de préstamo esté entre 1300 y 1500.

DELETE préstamo

WHERE numpres BETWEEN 1300 AND 1500

Ejemplo: Suprimir todas las cuentas en la sucursal de Piura.

DELETE depósito

WHERE nomsuc IN ( SELECT nomsuc

FROM sucursal

WHERE ciudad = “Piura”)

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 31

INSERCIÓN.- Los valores de atributos para tuplas insertadas deben ser miembros del dominio de los atributos,

y las tuplas insertadas deben tener el número correcto de atributos.

INSERT INTO depósito

VALUES ( “Sullana” , 9825 , “García” , 1 200)

Los atributos se especifican en orden de esquema de la relación.

INSERT INTO depósito ( nomsuc , numcta , nomcli , saldo )

VALUES ( “Sullana” , 9825 , “García” , 1 200)

Ejemplo: Queremos proporcionar a todos los clientes con préstamo en la sucursal de Paita una cuenta de ahorros

con S/. 200,Y su número de préstamo será igual al número de su cuenta de ahorros.

INSERT INTO depósito

SELECT nomsuc , numpres , nomcli , 200

FROM préstamo

WHERE nomsuc = “Paita”

ACTUALIZACIÓN.- Cada vez que se desee actualizar registros con datos recientes podrá usarcé la sentencia

UPDATE.

Ejemplo: Todos los saldos se van a incrementar en un 5 % por pago de interés.

UPDATE depósito

SET saldo = saldo * 1.05

Ejemplo: Para cuentas con saldos mayores a 10 000 incrementar e interés en 6 % y para las menores las cuentas

menores que 10 000 el interés es de 5 %.

UPDATE depósito

SET saldo = saldo * 1.06

WHERE saldo > 10 000

UPDATE depósito

SET saldo = saldo * 1.05

WHERE saldo 10 000

En el caso de INSERT, DELETE, UPDATE cualquier SELECT incorporado en la cláusula WHERE no debe

hacer referencia a la relación que se está usando.

UPDATE depósito

SET saldo = saldo * 1.05

WHERE saldo > (SELECT AVG ( saldo)

FROM depósito )

VALORES NULOS

Usaremos la sentencia NULL

INSERT INTO depósito

VALUES ( “Sullana” , NULL , “García” , 1 200)

Todas las comparaciones que implica NULL son falsas por definición; sin embargo la palabra clave especial

NULL puede usarcé en un predicado para probar si hay un valor nulo.

SELECT DISTINCT nomcli

FROM depósito

WHERE cantidad IS NULL

El predicado IS NOT NULL prueba la ausencia de un valor no nulo.

No se puede, ésta

solicitud es ambigua.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 32

VISTAS

Usaremos la sentencia CREATE VIEW.

CREATE VIEW AS <expresión de consulta>

= nombre de la vista.

<Expresión de consulta > = cualquier expresión de consulta permitida.

Ejemplo : Queremos una vista que se llama “Todos_clientes” y que consta de sucursales y sus clientes.

CREATE VIEW Todos_clientes AS

( SELECT nomsuc , nomcli

FROM depósito)

UNION

( SELECT nomsuc , nomcli

FROM préstamo)

Dado que cada vista se considera como un archivo podría después usarse:

SELECT nomcli

FROM Todos_clientes

WHERE nomsuc = “Paita”

DEFINICIÓN DE DATOS

Una relación de SQL se define usando la orden:

CREATE TABLE r ( A1D1, A2D2, ... , AnDn )

r = Nombre de la relación.

A = Nombre de un atributo del esquema de la relación r. D = Es el tipo de datos de los valores en el dominio del atributo A. Ejemplo CHR (30) , Integer , Real ,

NOT NULL.

La relación recién creada está vacía. La orden INSERT puede usarcé para cargar los datos.

Para eliminar una relación de la BDD en SQL usaremos:

DROP TABLE r

Para añadir atributos en una relación existente se usa:

ALTER TABLE r ADD A D

DELETE r Elimina todas las tuplas de r

DROP TABLE r Elimina todas las tuplas de r y también el esquema de r .

Ejemplo: Crear la tabla clientes

CREATE TABLE clientes

( nomcli CHR(30) NOT NULL,

ciudad CHR(30),

calle CHR(30) )

¡Recordar!

A : nombre del atributo.

D : tipo .

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 33

AFIRMACIONES

Una afirmación es un predicado que se desea que siempre satisfaga la Base de Datos. Las restricciones de

dominio, las Dependencias Funcionales y las restricciones de integridad referencial son formas especiales de

afirmación.

Sin embargo existen muchas restricciones que no pueden expresarse usando solamente estas tres formas

especiales.

Ejemplo:

La suma de todas las cantidades de préstamos para cada sucursal debe ser menos que la suma de todos los saldos

de cuenta de la sucursal.

Cuando se hace una afirmación, el sistema prueba su validez. Si la afirmación es válida, entonces cualquier

modificación en la BDD está permitida solo si no provoca que se viole la afirmación.

La prueba puede introducir una cantidad significativa de tiempo si se han hecho afirmaciones complejas.

ASSERT < nombre_afirmación > ON < nombre_relación > : < predicado>

Ningún saldo negativo (Restricción de integridad)

ASSERT límite.saldo ON depósito : saldo >= 0

(Restricción de dominio)

Ningún empleado del banco puede ser su propio banquero personal

ASSERT límite_banquero ON persona :

nombre_cliente < > nombre_banquero

Las restricciones pueden restringirse para aplicarse solo a modificaciones de la BDD. En el caso que queramos

prevenir la adición de una cuenta (depósitos) a menos que el nombre del cliente aparezca en la relación cliente

(Restricción de Integridad Referencial)

ASSERT límite_dirección ON INSERTION TO depósito :

EXISTS ( SELECT *

FROM Cliente

WHERE Cliente. nomcli = Depósito.nomcli)

La forma más general de afirmación es:

ASSERT <nombre_afirmación > : <predicado>

Es cualquier clausula en SQL.

DISPARADORES (TRIGGER)

El disparador es una sentencia que el sistema ejecuta automáticamente como un efecto secundario de una

modificación de la BDD. Para diseñar un mecanismo de disparador, debemos:

Especificar las condiciones bajo las cuales se va a ejecutar el disparador.

Especificar las acciones que se van a tomar cuando se ejecute el disparador.

Ejemplo:

En vez de permitir saldos negativos de cuentas, el banco trata los saldos deudores poniendo el saldo de cuenta en

cero y creando un préstamo en la cantidad de saldo deudor.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 34

Insertar una nueva tupla S en la relación préstamo con:

S[nomsuc] = T[nomsuc]

S[numprest] = T[numcta]

S[cantidad] = T[saldo]

S[nomcli] = T[nomcli]

Poner T[saldo] a cero

Los disparadores no están incluidos en el SQL estándar

DEFINE TRIGGER saldodeudor

ON UPDATE OF deposito T

( IF NEW T.saldo < 0

THEN ( INSERT INTO préstamo VALUES

(T.Nomsuc, T.Numcta, T.nomcli , - NEW T.saldo)

UPDATE deposito S

SET S.Saldo =0

WHERE S.numcta = T.numcta ) )

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 35

RESTRICCIONES DE INTEGRIDAD

Las Restricciones de Integridad proporcionan un medio de asegurar que los cambios que se hacen en la BDD por

usuarios autorizados no resulten en una pérdida de consistencia de los datos.

Las Restricciones de Integridad protegen la BDD contra daños accidentales.

Las Restricciones de Integridad para el modelo E-R están en forma de:

Declaración de claves.

Forma de una relación (M a M, 1 a M, 1 a 1).

RESTRICCIONES DE DOMINIO

Los límites de dominio son la forma más elemental de restricciones de integridad.

Tipos de Dominio: Una definición adecuada de tipos de dominio no solo nos permite probar valores insertados

en la BDD, sino que también nos permite probar consultas para asegurar que la comparación que se hace tiene

sentido.

* Varios atributos pueden tener el mismo sentido.

( nombre_cliente , nombre_empleado ) = conjunto de todos los nombres de personas.

* Atributo con diferente dominio.

saldo y nombre_sucursal o nombre.cliente y nombre.sucursal.

Tipos de Dominios en SQL:

Cadena de caracteres de longitud fija, longitud especificada por el usuario.

Número en coma fija, con precisión especificada por el usuario.

Entero (dependiente de la máquina).

Entero pequeño (dependiente de la máquina).

Número en coma flotante y en coma flotante de doble precisión, con precisión dependiente de la máquina.

Fecha.

La transformación de tipo de dominio se denomina “Coacción de Tipo” (Convertir de entero pequeño a

entero.)

Para SQL Estándar, nombre.sucursal y nombre.cliente aunque tengan dominio de cadena de caracteres de

longitud diferente, SQL considera los dos dominios compatibles.

Valores Nulos: SQL estándar permite que la declaración del dominio de un atributo incluya la especificación

“NOT NULL “. Esto prohíbe la inserción de un valor nulo para este atributo.

Cualquier modificación en este caso genera un diagnóstico de error.

Hay muchas situaciones en las que la prohibición de valores nulos es deseable. Así: Cuando el atributo es

una clave primaria de un esquema de relación.

INTEGRIDAD REFERENCIAL

A menudo queremos asegurar que un valor que aparece en una relación para un conjunto de atributos dados

también aparece para un conjunto de atributos en otra relación.

Conceptos Básicos: Considérese un par de relaciones r( R ) y d ( D ) y el producto natural r ||d, puede

darse el caso de que haga una tupla t en r que no se corresponda con ninguna tupla en d. Estas tuplas se llaman

“Tuplas Colgadas”.

Dependiendo del conjunto de entidades o del conjunto de relaciones que se esté modelando, las tuplas colgadas

pueden ser aceptables o no.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 36

Un atributo de una relación que es una clave primaria de otra relación se denomina “Clave Exterior”.

Los requerimientos de esta forma se llaman Restricciones de Integridad Referencial o Dependencia de

Subconjuntos.

Integridad Referencial en Modelo E-R: Estas restricciones se presentan frecuentemente. Si obtenemos el Esquema

de BDD Relacional construyendo tablas desde diagramas de E-R. Todas las relaciones que surgen de un

conjunto de relaciones tienen restricciones de integridad referencial.

Del esquema de relaciones, es una clave exterior que conduce a una restricción de Integridad referencial.

Otra fuente de Integridad Referencial es el conjunto de entidades débiles. El Esquema de Relaciones para cada

conjunto de Entidades débiles incluye una clave exterior que conduce a una restricción de Integridad

Referencial.

Modificación de la BDD: La modificación de la BDD puede causar violaciones de integridad Referencial.

Πα( r2) Πk ( r1 )

Insertar: Si una tupla t2 se inserta en una relación r2, el sistema debe asegurar que existe una tupla t1 en

r1 tal que: t1(k) = t2(α). Es decir t2(α) ϵ Πk ( r1 )

Eliminar: Si una tupla t1 se elimina de r1, el sistema debe calcular el conjunto de tuplas en r2 que hacen

referencia a t1. Ϭα = t1(k) (r2) Si este conjunto no está vacío, o la orden de eliminar se rechaza como un error, o se debe eliminar

las tuplas que hacen referencia a t1.

Actualizar: Actualizar en la relación que hace la referencia (r2) ó actualizar en la relación referenciada (r1)

Si se actualiza una tupla t2 en la relación r2 y modifica valores para la clave exterior (α),

entonces se hace una prueba similar a la del caso de insertar.

Si se actualiza una tupla t1 en la relación r1 y modifica valores para la clave primaria (k),

entonces se hace una prueba similar a la del caso de eliminar.

Integridad Referencial en SQL: Una característica de “Intensificación de Integridad” ha sido aprobada como un

añadido al estándar. Esta característica permite la especificación de claves primarias, candidatas y claves

exteriores como parte de al sentencia CREATE TABLE:

La cláusula "Primary Key" incluye una lista de atributos que comprenden la clave primaria.

La cláusula "Unique Key" incluye una lista de atributos que comprenden la clave candidata.

La cláusula "Foreign Key" incluye una lista de atributos que comprenden la clave exterior y el

nombre de la relación a la que hace referencia la clave exterior ( Reference).

Cualquier atributo que sea miembro de una clave candidata debe ser declarado NOT NULL.

Ejemplo: DEFINICION DE DATOS EN SQL PARA UNA PARTE DE LA BDD (SQL DDL)

CREATE TABLE cliente

( nombre_cliente CHR( 30 ) NOT NULL,

calle CHR( 30 ),

ciudad_cliente CHR( 30 ),

PRIMARY KEY ( nombre_cliente ) )

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 37

CREATE TABLE sucursal

( nombre_sucursal CHR( 20 ) NOT NULL,

activo INTEGER ,

ciudad_sucursal CHR( 30 ) ,

PRIMARY KEY ( nombre_sucursal ) )

CREATE TABLE depósito

( nombre_sucursal CHR( 20 ) NOT NULL,

numero_cta CHR( 10 ) NOT NULL,

nombre_cliente CHR( 30 ) NOT NULL,

saldo INTEGER ,

PRIMARY KEY ( numero_cta , nombre_cliente) ,

FOREING KEY ( nombre_sucursal ) REFERENCE Sucursal ) ,

FOREING KEY ( nombre_cliente ) REFERENCE Cliente ) )

DEPENDENCIAS FUNCIONALES:

Las dependencias funcionales son una restricción al conjunto de relaciones legales. Nos permite expresar hechos

acerca de la empresa que estamos modelando con la base de datos.

Las dependencias funcionales nos permiten expresar restricciones que no pueden expresarse por medio de

superclaves.

Usaremos las dependencias funcionales de dos formas:

1. Para especificar restricciones en el conjunto de relaciones legales. Así pues nos interesaremos sólo por las

relaciones que satisfagan un conjunto dado de dependencias funcionales.

Si queremos limitarnos a la relación del esquema R que satisfacen F, decimos que F se cumple en R.

2. Para probar si una relación es legal bajo un conjunto dado de dependencias funcionales. Si una relación r es

legal bajo un conjunto F de dependencias funcionales, decimos que r satisface a F.

Relación r A B C D

a1 B1 c1 d1

a1 B2 c1 d2

a2 B2 c2 d2

a2 b3 c2 d3

a3 b3 c2 d4

A C } Dependencia Funcional

Hay dos tuplas que tienen el valor de a1 en A. Estas tuplas tienen el mismo valor en C = c1.

Dos tuplas de valor a2 en A tienen el valor en C = c2.

C A } No satisfacen las Dependencia Funcional

Porque las tres tuplas con valor C = c2 tienen diferentes valores en A = ( a1, a3La relación r satisface muchas

otras Dependencias Funcionales, incluyendo por ejemplo la dependencia funcional.

AB D

Hay Dependencia Funcional que son "Triviales", porque se satisfacen por todas las relaciones.

Ejemplo: A A

AB A => α B Es trivial si B α

RELACION CLIENTES

nomcli calle ciudad

Javier Vásquez Av. Grau 123 Piura

Jannette Luna Av. Las Palmeras 231 Talara

Katia Vásquez Jr. Gardenias 65 Piura

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 38

Calle Ciudad Puede haber el nombre de una calle en dos ciudades diferentes (no incluiremos esta

dependencia en el conjunto de Dependencias Funcionales que se cumplen en este esquema.

RELACION SUCURSAL

nomsuc activo Se exige que se cumpla en el esquema préstamo.

activo nomsuc No queremos exigir que se cumpla ya que es posible que varias

sucursales tengan el mismo valor de activos.

RELACION PRESTAMO

Nomsuc Numprest nomcli ciudad

P1 17 Javier Vásquez Piura

T1 15 Marco Valencia Sullana

S1 23 Jannette Luna Talara

P2 18 Katia Vásquez Piura

numprest catidad Queremos exigir que la relación préstamo satisfaga esta dependencia en todo

momento. Imponemos la restricción de que se cumpla numprest cantidad

en el esquema préstamo.

Al diseñar una base de datos relacional primeros listamos aquellas dependencias funcionales que se deben

cumplir siempre.

Ejemplo:

* En Esquema Sucursal

nombre_sucursal ciudad_sucursal

nombre_sucursal activo

*En Esquema Cliente

nombre_cliente ciudad_cliente

nombre_cliente calle

* En Esquema Préstamo

numprest cantidad

numprset nombre_sucursal

CIERRE DE UN CONJUNTO DE DEPENDENCIAS FUNCIONALES

No es suficiente considerar un conjunto dado de Dependencias Funcionales. Además, necesitamos considerar

todas las Dependencias Funcionales que se cumplan.

R = ( A,B,C,G,H,I ) D.F. A B CG H B H

A C CG I

Las Dependencias Funcionales A H se implica lógicamente. Es decir podemos demostrar que se cumpla el

conjunto dado de Dependencias Funcionales, A H también debe cumplirse:

A B y B H A H

Nomsuc Activo ciudad

P1 1 000 000 Piura

S1 800 000 Talara

T1 500 000 Sullana

P2 300 000 Piura

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 39

Sea F un conjunto de Dependencias Funcionales. El cierre de F ( F) es el conjunto de Dependencias

Funcionales que F implica lógicamente.

Existen técnicas para deducir Dependencias Funcionales:

La primera técnica se basa en tres axiomas o reglas de inferencia para Dependencias Funcionales. Aplicando

estas reglas repetidamente podemos encontrar F+ completo dado en F.

CONVENIOS: Letras griegas ( ...) representan conjunto de atributos

Letras romanas en mayúsculas representan atributos individuales

Axiomas de Armstromg.-

Reglas de Flexibilidad.- Si es un conjunto de atributos y entonces se cumple .

Regla de Aumento.- Si se cumple es un conjunto de atributos, entonces se cumple .

Regla de Transitividad.- Si se cumple y se cumple , entonces se cumple

Estas reglas son seguras porque no generan Dependencias Funcionales incorrectas.

Las reglas son completas porque para un conjunto dado de F de Dependencias Funcionales nos permiten

generar un F+ completo.

Para simplificar esta tarea, listaremos algunas reglas auxiliares.

Regla de Unión.- Si se cumple y se cumple , entonces se cumple

Regla de Descomposición.- Si se cumple , entonces se cumple y

Regla de Pseudotransitividad.- Si se cumple y , entonces se cumple

A continuación mostramos algunos miembros de F+:

A H Se cumple A B y B H Por regla de Transitividad A H

CG HI Se cumple CG H y CG I Por regla Unión CG HI

AG I Se cumple A C Por regla de Aumento AG CG.

Se cumple CG I Por regla de Transitividad AG I.

RECUBRIMIENTO CANONICO:

Para minimizar el número de Dependencias Funcionales que necesitan ser probadas en caso de una

actualización, restringimos un conjunto dado F de Dependencias Funcionales a un recubrimiento canónico Fc.

Fc debe tener las siguientes características:

a) Cada una de las Dependencias Funcionales en Fc no contienen atributos extraños a . Los

atributos extraños son atributos que pueden eliminarse de sin cambiar Fc+. Así A es extraño a si

A y Fc implica lógicamente a ( Fc .

b) Cada una de las Dependencias Funcionales en Fc no contienen atributos extraños a .

Así A es extraño a si A y ( Fc implica lógicamente a Fc.

c) Cada lado izquierdo de una Dependencia Funcional en Fc es único ( No existen dos dependencias

y en Fc, tales que )

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 40

Para calcular un recubrimiento canónico para F, utilizo la Regla de Unión para sustituir cualquier dependencia en

F ( y

Pruébese cada dependencia funcionalpara ver si hay un atributo extraño a o a Este proceso se

debe repetir hasta que no ocurran cambios.

Ejemplo:

A BC

B C

A B

AB C

Paso C

A BC A BC

A B

Paso A

A es extraño en AB C porque existe B C

Al suprimir A de AB C obtenemos B C que

ya está en el conjunto de dependencias funcionales.

El conjunto de Dependencias funcionales Fc es: A BC y B C

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 41

DISEÑO DE BASES DE DATOS RELACIONALES

El objetivo del diseño de una base de datos relacional es generar un conjunto de esquemas de relaciones que nos

permiten almacenar información sin redundancia innecesaria, pero que a la vez nos permitan recuperar

información fácilmente.

PELIGROS EN EL DISEÑO DE BDD RELACIONALES

Entre las propiedades indeseables que un mal diseño pueda tener están:

Repetición de Información

Incapacidad para representar cierta información.

Pérdida de información

REPRESENTACIÓN DE LA INFORMACIÓN:

Diseño Original

(1) Esquema_sucursal = ( nomsuc, activo, ciudad_suc)

Esquema_prestamo = ( nomsuc, numprest, nomcli, cantidad )

Diseño Alternativo

(2) Esquema_prestar = ( nomsuc, activo, ciudad_suc, numprest, nomcli, cantidad )

La repetición de información que requiere el uso del diseño alternativo no es conveniente. La repetición de

información desperdicia espacio. Además, complica la actualización de la base de datos.

Ejemplo:

a) Añadir un nuevo préstamo en 1 y en 2

b) Actualizar la ciudad de una sucursal

¿Por qué es malo el diseño alternativo?

a) Sabemos que una sucursal bancaria está situada en una ciudad, así se cumple la Dependencias Funcionales.

nomsuc ciudad_suc

Sabemos que una sucursal pude hacer muchos prestamos. No se cumple la Dependencias Funcionales.

nomsuc numprest

El hecho de que una sucursal esté situada en una ciudad y el hecho de que una ciudad realice préstamos son

procesos independientes. Estos hechos se representan mejor en relaciones separadas.

b) No podemos representar directamente la información referente a una sucursal (nomsuc, activo, ciudad_suc) a

menos que exista por lo menos un préstamo en la sucursal (deben tener valores de numprest, cantidad y nomcli).

Peor aún tendríamos que suprimir esta información cuando se hubieran pagado todos los préstamos.

PÉRDIDA DE INFORMACIÓN

El ejemplo anterior nos sugiere que debemos descomponer un esquema de relaciones con muchos atributos en

varios esquemas con menos atributos. Sin embargo si la descomposición se hace sin cuidado puede llegarse a

otra forma de diseño defectuoso.

Ejemplo:

El esquema préstamo se descompone en:

Esquema_cantidad = (cantidad, nomcli)

Esquema_prestamo = (nomsuc, numprest, cantidad)

Queremos encontrar aquellas sucursales de las que Juan tiene un préstamo, ninguna de las relaciones de la Base

de Datos alternativa contiene estos datos. Podemos hacerlo escribiendo cantidad |x| préstamo.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 42

Si sucede que varios préstamos tienen la misma cantidad, no podemos decir a qué cliente corresponde cada

préstamo. Ya no somos capaces de representar en la Base de Datos, que clientes tienen prestamos de qué

sucursal.

Debido a esta pérdida de información, a esta descomposición la llamaremos Descomposición con pérdida o

descomposición de producto con pérdida.

Debe estar claro, que una descomposición de productos con pérdida es un mal diseño de la Base de Datos.

Esquema_prestar Esquema_prestamo Esquema_prestamo Esquema_cantidad = {cantidad}

Esquema_cantidad inapropiado

Esquema_prestar Esquema_sucursal Esquema_sucursal Esquema_prestamo = {nomsuc}

Esquema_prestamo

Para tener una descomposición de producto sin pérdida, necesitamos imponer ciertas restricciones en el conjunto

de las relaciones posibles. Una de estas restricciones son las dependencias funcionales.

Ejemplo:

* R = Esquema_prestar r : relación prestar

R1= Esquema_cantidad r1 : relación cantidad r r1 |x| r2 Hay pérdida de la información

R2= Esquema_prestamo r2 : relación préstamo

* Esquema_prestar = Esquema_prestamo |x| Esquema_sucursal Sin pérdida debido a la dependencia

funcional nomsuc activo, ciudad_suc.

NORMALIZACION POR MEDIO DE DEPENDENCIAS FUNCIONALES

Usando Dependencias Funcionales, podemos definir varias “formas normales” que representen diseños buenos

de Base de Datos. Existe un gran número de formas normales. Las que trataremos aquí son BCNF y 3NF.

PROPIEDADES DESEABLES DE UNA DESCOMPOSICION

Esquema_prestar = ( nomsuc, activo, ciudad_suc, numprest, nomcli, cantidad)

El conjunto F de Dependencias Funcionales que es necesario que se cumpla en el esquema_prestar es :

nomsuc activo, ciudad_suc

numprest cantidad, nombre_sucursal

Descomposición De Producto Sin Pérdida

El criterio para determinar si una descomposición sea sin pérdida: Sea R un esquema de relaciones y F es un

conjunto de Dependencias Funcionales en R. R1 y R2 forman una descomposición de R.

Esto es una descomposición de producto sin pérdida de R si por lo menos una de las dependencias funcionales

siguientes está en F+.

R1 R2 R1

R1 R2 R2

1) Ejemplo: Esquema_prestar en:

Esquema_sucursal = ( nomsuc, activo, ciudad_suc)

Esquema_prestamo = ( nomsuc, numprest, nomcli, cantidad)

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 43

Puesto que:

nomsuc activo, ciudad_suc F

(Regla de Aumento para Dependencias funcionales)

nomsuc nomsuc, activo, ciudad_suc F+

Esquema_sucursal Esquema_prestamo = {nomsuc} => Esquema_sucursal es OK

2) Ejemplo Esquema_prestamo:

Esque_Info_prestamo = ( nomsuc, numprest, cantidad)

Esque_prest_cliente = ( nomcli, numprest)

Puesto que:

numprest cantidad, nomsuc F

(Regla de Aumento para Dependencias funcionales)

numprest numprest , cantidad, nomsuc F+

Esque_Info_prestamo Esque_prest_cliente = {numprest} => Esquema_info_prestamo es OK

Conservación de las Dependencias

Cuando se hace una actualización de la Base de Datos, el sistema debe poder comprobar que la actualización no

creará una relación ilegal - es decir, una que no satisfaga todas las dependencias funcionales dadas.

Para comprobar las actualizaciones eficientemente es conveniente diseñar esquemas de Base de Datos

relacionales que permitan validar una actualización sin calcular los productos.

Ejemplo:

Podemos demostrar que la descomposición del Esquema_prestar conserva las dependencias. Para ver estos,

consideramos cada uno de los miembros del conjunto F de Dependencias funcionales que necesitamos que se

cumplan en el Esquema_prestar y mostraremos que cada uno puede probarse en por lo menos una relación de la

descomposición.

D.F. nomsuc activo, ciudad_suc puede probarse usando el esquema sucursal.

D.F. numprest cantidad, nomsuc puede probarse usando Esquema_info_prestamo.

Repetición De Información

La descomposición de Esquema_prestar no padece del problema de la repetición de información.

Ejemplo:

Esquema_Prestar repetía la ciudad y el activo de la sucursal para cada préstamo. La descomposición repara

los datos de sucursal y de préstamo en relaciones distintas, eliminando esta redundancia.

Si se hace un solo préstamo a varios clientes, debemos repetir la cantidad del préstamo una vez por cada

cliente (así como la cantidad y el activo de la sucursal). En la descomposición, la relación del esquema del

Esquema_prestamo_cliente contiene la relación numprest, nomcli, cosa que no sucede en las demás

esquemas. En el Esquema_info_prestamo, solo se necesita que aparezca una tupla por préstamo.

Claramente, la falta de redundancia que presenta la descomposición es deseable. Las distintas formas normales

representan los grados de eliminación de redundancia que pueden lograrse.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 44

FORMA NORMAL DE BOYCE-CODD

Una de las formas normales más deseables que podemos obtener es la BCNF. Un esquema de la relación R está

en BCNF con respecto a un conjunto F de Dependencias Funcionales, si para todas las Dependencias

Funcionales en F+ de la forma , donde R y R, por lo menos se cumple una de las siguientes

condiciones :

es una dependencia funcional trivial (Es decir )

es una superclave del esquema R.

Un diseño de la Base de Datos está en BCNF si cada uno de los miembros del conjunto de los esquemas de

relaciones que comprende el diseño está en BCNF.

Ejemplo :

Esquema_sucursal = ( nomsuc, activo, ciudad_suc)

nomsuc activo, ciudad_suc

Esquema_cliente = ( nomcli, calle, ciudadcliente)

nomcli calle, ciudadcliente

Esquema_depósito = ( nomsuc, numcuenta, nomcli, saldo)

numcuenta saldo, nomsuc

Esquema_prestamo = ( nomsuc, numprest, nomcli, cantidad)

numprest cantidad , nomsuc

Esquema cliente esta en BCNF:

1. Nomcli es una clave candidata en el esquema cliente

2. La única Dependencia funcional no trivial que se cumpla en esquema cliente tiene nomcli en el lado izquierdo

de la flecha.

Esquema sucursal está en BCNF:

1. Nomsuc es una clave candidata en el esquema sucursal

2. Dependencia Funcional no trivial que se cumple tiene nomsuc en el lado izquierdo de la flecha.

Esquema préstamo no está en BCNF:

1. numprest no es una superclave del esquema préstamo (por haber préstamos de dos o más personas,

mancomunadas). Este esquema está en una forma no deseable, ya que padece del problema de repetición de

información.

Tenemos como punto de partida los esquemas que no están en BCNF y los descomponemos en:

Esquema_info_prestamo = ( nomsuc, numprest, cantidad )

Esquema_prestamo_cliente = ( nomcli, numprest )

a) Esto es una descomposición de productos sin pérdida.

b) Hay que determinar que Dependencias Funcionales les son aplicables:

numprest cantidad, nomsuc (Esquema_info_préstamo)

c) numprest es una clave candidata de Esquema_info_préstamo

d) En el Esquema_préstamo_cliente sólo se aplican dependencias funcionales triviales.

Entonces los dos esquemas están en BCNF.

Esquema depósitos no está en BCNF

Esquema_info_cuenta = ( nomsuc, numcuenta, saldo )

Esquema_cuenta_cliente = ( nomcli, numcuenta )

Ejemplos:

Esquema_prestar = ( nomsuc, activo, ciudad_suc, numprest, nomcli, cantidad)

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 45

Dependencias Funcionales:

nomsuc activo, ciudad_suc

numprest cantidad, nomsuc Este esquema no está en BCNF

Claves: (numprest, nomcli)

Realizar una descomposición de producto sin pérdida, que conserven las dependencias y que estén en BCNF.

Siempre hay que satisfacer los tres objetivos del diseño.

BCNF

Producto sin pérdida

Conservación de las dependencias

No todas las descomposiciones BCNF conservan las dependencias funciones :

Esquema_banquero = (nomsuc, nomcli, nombre_banquero)

D.F. nombre_banquero nomsuc

nomcli, nomsuc nombre_banquero

Esquema Banquero no está en BCNF, ya que nombre_banquero no es una superclave.

Esquema_sucursal_banquero = ( nombre_banquero , nomsuc )

Esquema_banquero_cliente = ( nomcli, nombre_banquero)

Los esquemas descompuestos conservan sólo nombre_banquero nomsuc (y las dependencias triviales).

El cierre de { nombre_banquero nomsuc } no incluye nomcli, nomsuc nombre_banquero . La violación

de esta dependencia no puede detectarse a menos que se calcule un producto.

Toda descomposición BCNF de esquema banquero debe fallar a la conservación de

nomcli, nomsuc nombre_banquero.

TERCERA FORMA NORMAL

En aquellos casos en los que no pueden satisfacerse los tres criterios de diseño, abandonamos BCNF y

aceptamos una forma normal más débil, llamada 3NF. (Siempre se puede conseguir llegar a esta 3NF)

BCNF requiere que todas las Dependencias Funcionales no triviales sean de la forma donde es una

superclave.

3NF permite Dependencias Funcionales que el lado izquierdo no sea una superclave.

Un esquema de relaciones R está en 3NF con respecto a un conjunto de Dependencias Funcionales, si para todos

las Dependencias Funcionales en F+ de la forma , donde R y R, por lo menos se cumple una de

las condiciones siguientes:

es una Dependencias Funcionales trivial.

es una superclave de R.

Cada atributo A en - está contenido en una clave candidata en R.

- BCNF no acepta el 3er criterio. Dependencias Transitivas.

- Todo esquema BCNF está también en 3NF.

- BCNF es más restrictiva que 3NF.

Esquema banquero si está en 3NF. Se sabe que nomcli y nomsuc es una clave candidata.

La Dependencia Funcional no trivial { nomcli, nomsuc nombre_banquero }

Esta dependencia no viola la definición de 3NF.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 46

Ejemplo:

Esquema_info_banquero = (nomsuc, nomcli, nombre_banquero, numoficina)

D.F. nombre_banquero nomsuc, numoficina

nomcli, nomsuc nombre_banquero

Descomposición sin pérdida.

Esquema_oficina_banquero = (nombre_banquero, numoficina)

Esquema_banquero = (nomcli, nomsuc, nombre_banquero)

Puesto que el esquema banquero contiene una clave candidata del Esquema_oficina_banquero, hemos hecho un

proceso de descomposición.

COMPARACION DE BCNF Y 3NF

La 3NF tiene la ventaja de que sabemos que siempre es posible obtener un diseño 3NF sin sacrificar un producto

sin pérdida o la conservación de las dependencias.

No obstante, 3NF tiene una desventaja, sino eliminamos las Dependencias Funcionales transitivas, puede ser

necesario utilizar valores vacíos para representar alguna de las posibles relaciones significativas entre los datos,

y esta el problema de la repetición de información.

Ejemplo:

Esquema_banquero = ( nomcli, nombrebanquero, nomsuc) y un Dependencias Funcionales asociados

nombrebanquero Nomsuc

1. Para hacer esto, bien debe haber un valor correspondiente para nomcli o bien debemos utilizar un valor nulo

para el atributo nomcli.

2. Se presenta repetición de información. (nomcli nomsuc .)

Si nos vemos obligados a elegir entre BCNF y la conservación de las dependencias con 3NF, generalmente es

preferible optar por 3NF.

Si no podemos probar la conservación de las dependencias eficientemente, pagamos un alto precio en el

rendimiento del sistema o un riesgo de integridad de los datos de la Base de Datos. Ninguna de estas alternativas

resulta atractiva.

Con tales alternativas, la cantidad limitada de redundancia impuesta por las dependencias transitivas, permitidas

en 3NF es la menos mala. Así pues, normalmente elegimos asegurar la conservación de las dependencias y

sacrificios BCNF.

Resumen:

El objeto de un diseño de Base de Datos relacional es:

BCNF

Producto sin pérdida

Conservación de las dependencias.

si no se puede lograr esto, aceptamos :

3NF

Producto si pérdida

Conservación de las dependencias.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 47

Ejemplo:

Órdenes de compra del catálogo de clientes de diferentes ciudades

Codcli nomcli ciudad

precio de

entrega

precio

unidad

No de

Inventariosolicitud Fecha

C1 John Chiclayo 0.75 8,25 13 1

2

06/05

10/12

C2 Jane Piura 195 4,01

8,20

2,00

12

13

11

1

2

3

05/15

C3 Pedro Chiclayo 0.75 4,01

2,01

12

11

1

2

08/10

10/10

C4 Rita Lima 225 10,51 14 1 05/05

Dependencias Funciones:

nomcli, num_inventario, fecha solicitud

num_inventario precio unidad

codcli nomcli, ciudad

ciudad precio_ent

Resultado:

orden = ( codcli, num_inventario, fecha, solicitud)

inventario = ( num_inventario, precio unidad)

cliente = (codcli, nomcli, ciudad)

preciodeentrega =(ciudad, precio_ent)

Están en 3FN y BCNF

Ejemplo:

Relación Proyecto-PC-Programador

#proyecto PC Programador

P01 IBM Renzo

P01 APPLE Aurelia

P15 ATARI Herbert

P23 IBM Renzo

P30 IBM Javier

Siguientes reglas Semánticas:

1. Para cada proyecto, una PC dada es usada por un sólo programador aún cuando el programador trabaje en más

proyectos.

2. Un proyecto puede usar distintos tipos de PC

3. Un programador se especializa sólo en un tipo de PC, pero una PC se puede compartir entre distintos

programadores, para distintos proyectos.

Dependencias Funcionales: #proyecto, PC Programador

Programador PC

Resultado:

Programador-PC = (programador, PC) = Programador-PC

Proyecto-Programador = (#proyecto, programador)

Esta en BCNF

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 48

DEPENDENCIAS MULTIEVALUADAS

Generalmente, un proceso de normalización termina cuando todas las relaciones divididas pertenecen a la tercera

forma normal. Sin embargo si una relación contiene dependencias de valores múltiples, es necesaria una

normalización posterior.

B A

El atributo A de esta relación se dice ser dependencia multivaluada (DMV) del atributo B si un rango

especificado de valores del atributo A está determinado por un valor particular de B.

A, B C DMV trivial

A B

C DMV no trivial

Relación Inventario = (#inventario, color, talla, precio)

#inventario Precio Color Talla

L1

L1

L1

L1

L1

L1

L1

L1

L2

L2

L2

L2

L2

L2

2

2

2

2

2

2

2

2

4

4

4

4

4

4

azul

azul

azul

azul

rojo

rojo

rojo

rojo

verde

verde

rojo

rojo

blanco

blanco

1

2

3

4

1

2

3

4

1

2

1

2

1

2

#inventario color DMV no

talla trivial

#inventario precio DF no trivial

Las Dependencias multivaluadas se pueden eliminar siguiendo uno de los dos siguientes métodos.

1) Crear una nueva relación para cada atributo DMV

relación Talla = ( #inventario, talla )

relación Color = ( #inventario, color ) 4FN

relación Precio = ( #inventario, precio)

2) Reemplazar un atributo DMV con atributos funcionalmente dependientes.

Relación Talla = ( #inventario, talla )

Relación Inventario = (#inventario, precio, color1, color2, color3) 4FN

I1 2 Azul Rojo ---

I2 4 Rojo Verde Blanco

Una relación está en 4FN, si está en BCNF y no contiene DMV (no triviales)

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 49

Ejemplo : Relación R = (A, B, C, D, E, F, G, H, I)

A D A I, C A, B H B E, F F G

D dependencia multivaluada de A

H dependencia funcional de AB

IC dependencia funcional de A

EF dependencia funcional de B

G dependencia funcional de F o dependencia transitiva de B

R D

A I C Separar relaciones DMV

H

B E F G

R2 A I , C R1 A D

H Separar no claves que no son totalmente

B E , F , G dependientes de la clave principal

R4 A R3 A I , C R1 A D

H

B R5 B E , F , G Eliminar dependencias transitivas

R4 A R3 A I , C R1 A D

H

B R6 B E , F R7 F G

Resultado: R1, R3, R4, R6, R7

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 50

NORMALIZACIÓN

Primera forma normal (1FN):

Una relación esta en 1FN.-

Si y solo si todos los dominios simples subyacentes contienen valores atómicos ó

Si y solo si todos los campos en cada registro contienen un solo valor tomado de su dominio respectivo.

Segunda forma normal (2FN):

Una relación esta en 2FN.-

Si y solo si está en 1FN y todos los atributos no claves dependen por completo de la clave principal ó

Si y solo si está en 1FN y cada atributo no claves de la relación es total y funcionalmente dependiente de la clave

principal.

Tercera forma normal (3FN):

Una relación esta en 3FN.-

Si y solo si está en 2FN y todos los atributos no claves dependen de manera no transitiva de la clave principal ó

Si y solo si está en 2FN y ningún atributo no clave en la relación es funcionalmente dependiente de algún otro

atributo no clave.

Ejemplo:

R = ( CodCli, ciudad, situación, CodPro, cantidad)

DF: CodCli, CodPro cantidad

CodCli ciudad, situación

Ciudad situación

1FN: R1 = ( CodCli, CodPro, cantidad )

R2 = ( CodCli, ciudad, situación )

2FN: R1 y R2 cumplen la condición

3FN: R1 = ( CodCli, CodPro, cantidad )

R21 = ( CodCli, ciudad )

R22 = ( ciudad, situación )

Ejemplo:

R = (Codcli, nomcli, ciudad, tarifa, numinv, preuni, cant, fecha)

DF: Codcli nomcli, ciudad, tarifa

Numinv preuni

Codcli, numinv, fecha cant

1FN: R1 = ( codcli nomcli, ciudad, tarifa )

R2 = ( numinv, preuni )

R3 = ( codcli, numinv, fecha, cant )

2FN: R1 y R2 cumplen la condición

3FN: R11 = ( codcli nomcli, ciudad )

R12 = ( ciudad, tarifa )

R2 = ( numinv, preuni )

R3 = ( codcli, numinv, fecha, cant )

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 51

Forma normal de Boyce – Cobb (BCFN):

Una relación esta en BCFN.-

Si y solo si está en 3FN y todo determinante es una clave candidata. Se puede presentar una de las siguientes

condiciones:

a) Hay varias claves candidatas

b) Las claves candidatas son compuestas

c) Las claves candidatas se traslapan (por lo menos un atributo en común)

La combinación de las condiciones se presenta muy raras veces. Si se presenta, las tablas están en 3FN.

Un determinante es un atributo del cual depende funcionalmente algún otro atributo.

a) Dos claves candidatas sin atributos comunes

R = ( CodCli, nombre, situación, ciudad )

Determinantes: {CodCli} y {nombre}

Claves candidatas: {CodCli} o {nombre}

DF: CodCli nombre, situación, ciudad o nombre CodCli, situación, ciudad

R esta en BCNF

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 52

MOTORES DE PERSISTENCIA

Es generalmente sabido que una aplicación informática consta de dos componentes

principales que colaboran para llevar a cabo la funcionalidad que el usuario desea. El

primero de estos componentes es la base de datos, que guarda la información necesaria

para operar la aplicación, en forma de datos en disco. El segundo de estos componentes

es el programa propiamente dicho, que recupera esos datos de la base de datos, realiza

los cálculos necesarios y presenta los resultados deseados al usuario.

Para que estos dos componentes puedan funcionar juntos deben poder comunicarse

intercambiando datos, como se observa en la figura 1. En otras palabras, deben ser

compatibles. Sin embargo, durante los últimos treinta años la evolución de estos dos

componentes ha sido divergente, de forma que cada vez se ha hecho más difícil que

colaboren en una misma aplicación.

Así, desde los años 70 a la actualidad, las bases de datos utilizan un modelo teórico llamado “relacional”, que se

ha convertido en un estándar y que es utilizado en la práctica totalidad de aplicaciones de software.

En cambio, los programas han usado, desde los años 80, un modelo llamado “orientado a objetos”, que difiere en

mucho del modelo relacional y que se ha extendido cada vez más. Es por ello que aparece un conflicto a la hora

de reunir estos dos componentes en una aplicación, ya que cada uno responde a diferente modelo y forma de

operar. Cada componente maneja los datos con un formato diferente. Metafóricamente, podríamos afirmar que el

programa y la base de datos hablan idiomas diferentes y, por lo tanto, la comunicación entre ellos resulta difícil.

Este artículo comienza con una descripción de los dos modelos mencionados y de las diferencias que dificultan

su combinación en una sola aplicación. A continuación, se exploran las diferentes soluciones a este problema y

se acaba concluyendo que la mejor manera de resolverlo es usando un motor de persistencia. El artículo finaliza

indicando los nombres de los motores de persistencia más usados, con el fin de que el lector pueda elegir el que

más se adapta a sus necesidades.

MODELO ORIENTADO A OBJETOS El modelo orientado a objetos es el modelo teórico que usa la mayoría de los programas actuales. La

programación orientada a objetos hunde sus raíces en los años sesenta (en los que aparecieron los primeros

lenguajes de este tipo, llamados “Simula I” y “Simula 67”, desarrollados en el Centro Noruego de Computación,

en Oslo). En los primeros 70, aparece “Smalltalk”, un lenguaje fundamental en la historia de la orientación a

objetos.

Sin embargo, no es hasta la segunda mitad de los años 80 cuando la orientación de objetos se generaliza,

convirtiéndose en el estándar predominante en los años 90, de la mano de lenguajes como C++ y Java. El triunfo

de la programación orientada a objetos ha sido impulsado por la enorme difusión de otras tecnologías (como la

interfaz gráfica o las arquitecturas distribuidas) que son más fáciles de implementar mediante este tipo de

desarrollo que mediante una programación tradicional.

Hoy en día, la práctica totalidad de los lenguajes de programación que surgen son orientados a objetos y esta

tecnología se ha convertido en el estándar actual de programación que, a su vez, está generando nuevos

desarrollos muy prometedores para el futuro (como, por ejemplo, la programación orientada a aspectos).

La idea de la orientación a objetos es modelar los programas de una forma parecida a cómo percibimos la

realidad. Para la mente humana, el universo está compuesto por una serie de “objetos” (en el sentido más amplio

de la palabra, incluyendo seres vivos, ideas, etc.). Cada objeto tiene unas características que lo diferencian de los

demás y, con cada objeto, se pueden realizar unas acciones que son propias y específicas del mismo.

Así, por ejemplo, un determinado auto tiene unas características (color rojo, caja de cambios automática, diesel,

etc.) y puede realizar unas determinadas acciones (acelerar, frenar, etc.).

La programación orientada a objetos intenta modelar estos objetos reales con estructuras de programa, llamadas

“objetos de software” o, simplemente, “objetos”. Cada uno de estos objetos de software, está compuesto por una

serie de características (llamadas “atributos”) y una serie de acciones (llamadas “métodos”), al igual que un

objeto de la vida real. Una representación gráfica de un objeto de software se muestra en la figura 2.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 53

La forma de programar estos objetos de software es similar a la forma en la que se comportan los objetos en la

realidad. Así, por ejemplo, en la vida real un auto contiene piezas. Análogamente, en el programa, un objeto de

software “Auto” contiene objetos “Pieza”, como podemos observar en la figura 3.

Es importante remarcar que el modelo orientado a objetos es un modelo que incluye tanto la parte estática de un

objeto (los “atributos” del mismo, es decir, sus características) como su parte dinámica (los “métodos”, es decir,

sus acciones). Usando una terminología bien conocida en desarrollo, incluye tanto los “datos” como los

“procesos”.

En resumen, la programación orientada a objetos se basa en la realidad. Su mayor ventaja es que simplifica el

mantenimiento de los programas y hace posible programar y mantener hasta los programas más enormes al

dividirlos en partes más pequeñas, es decir, en objetos. Como consecuencia, produce reducciones de costos y

mayor calidad del código y se ha convertido en el estándar actual de programación.

MODELO RELACIONAL Muy ajeno a la revolución que supuso la orientación a objetos, el área de las bases de datos sigue fiel a un

modelo antiguo pero que ha probado su eficacia, el llamado “modelo relacional”.

El modelo relacional se basa en un artículo publicado por E.F.Codd en 1970. Las primeras bases de datos

relacionales comerciales aparecen en la segunda mitad de los años setenta. Desde entonces, el modelo relacional

se convierte en un estándar prácticamente universal para el acceso a datos, dominando totalmente el área de las

bases de datos hasta la actualidad.

El modelo relacional es muy diferente del modelo orientado a objetos. Por una parte, el modelo relacional sólo se

ocupa de la parte estática de la aplicación (de los “datos”) y no de la parte dinámica (“los procesos”). Usando el

ejemplo anterior, en el modelo relacional, sólo me interesan las características del auto (su color, su tipo de caja

de cambios, etc.) y no las acciones que puedo hacer con él (acelerar, frenar, etc.) . Este énfasis en los datos es

lógico en un modelo cuyo objetivo es modelar la parte estática de la aplicación, es decir, la base de datos.

Hay otras diferencias entre los dos modelos. Por ejemplo, la forma en la que el modelo relacional trata los datos

es muy diferente a como lo hace el modelo orientado a objetos. Mientras en este último, los datos son modelados

en forma de objetos, en el modelo relacional son modelados como registros, los cuales son una serie de datos

pertenecientes a una misma entidad de la vida real. Un registro difiere de un objeto en que sólo modela datos y

que éstos no tienen estructura. La representación gráfica de un registro aparece en la figura 4.

Los registros similares se agrupan en tablas. Podemos imaginarnos las tablas como listados de datos parecidos a

los listados de impresión que hay en las empresas (de empleados, de facturas, etc.). En esta comparación, cada

registro sería una línea del listado.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 54

Usando el ejemplo anterior, cada registro contendría los datos de un determinado auto (color rojo, caja de

cambios automática, diesel, etc.) y las tablas no serían más que listas de autos con todos sus datos, como se

observa en la figura 5.

El modelo relacional no refleja la estructura de la realidad. Como hemos dicho, si un auto contiene piezas, un

objeto de software “Auto” contiene objetos “Pieza”. Sin embargo, en el modelo relacional, los registros de los

autos y piezas están por separado (esto se muestra en la figura 5) y se relacionan por un mecanismo implícito

llamado “clave foránea”. El programador debe saber que hay una relación entre los autos y las piezas y debe

programar de acuerdo a ello. Sin embargo, el modelo no refleja explícitamente esta relación y, en general, la

estructura de la realidad, al contrario del modelo orientado a objetos.

APLICACIONES TRADICIONALES Como conclusión de lo que se ha dicho hasta ahora, una aplicación está formada por un programa y una base de

datos que se comunican entre sí. El programa suele estar diseñado según el modelo orientado a objetos y, por lo

tanto, trabaja con datos en formato de objetos. Por el contrario, la base de datos está diseñada según el modelo

relacional y, por lo tanto, trabaja con datos en formato de registros. Esto introduce una dificultad importante,

porque los dos formatos de datos (objetos y registros) son incompatibles entre sí. Así, cuando el programa quiere

guardar o recuperar los datos en disco (para que no se pierdan entre ejecuciones), lo hace n forma de objetos,

pues es el formato de datos que conoce. Sin embargo, la base de datos no puede guardar o recuperar objetos,

pues está diseñada para guardar o recuperar registros (y no objetos), que es el formato de datos que ella

reconoce. Esto se muestra en la figura 6. Resumiendo, los formatos de datos que utilizan el programa y la base

de datos son incompatibles entre sí. Podemos decir que el programa y la aplicación hablan “idiomas diferentes”

y, por lo tanto, debemos encontrar una solución para que se comuniquen.

La solución más obvia a este problema es hacer que uno de los componentes hable el idioma del otro. Es decir,

que un componente use el formato de datos del otro. Así, la primera opción que examinamos en este artículo es

la de que el programa esté diseñado para tratar con datos relacionales, la cual se refleja en la figura 7. En esta

opción, tanto el programa como la base de datos hablan un mismo idioma: el relacional y utilizan como formato

de datos el de registro. Por lo tanto, la comunicación es posible.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 55

Ésta era la forma de programar universalmente adoptada antes de la aparición de la orientación a objetos y sigue

siendo la arquitectura dominante en El Salvador. Aún entre las empresas que utilizan lenguajes orientados a

objetos, la mayoría programa sin tener en cuenta la orientación a objetos a la hora de usar los datos, los cuales se

gestionan de forma relacional.

El problema de esta arquitectura es que se desaprovechan las grandes ventajas de flexibilidad, facilidad de

mantenimiento y facilidad de gestión de sistemas complejos que da la programación orientada a objetos.

Asimismo, el código que opera con datos relacionales suele ser complejo, difícil de mantener y de ampliar y muy

dependiente de la estructura de los datos.

BASES DE DATOS ORIENTADAS A OBJETOS Como hemos visto en el apartado anterior, la opción

consistente en que toda la aplicación use un mismo

modelo teórico relacional no es la más adecuada.

Examinemos ahora la opción en que toda la aplicación

tenga un único modelo teórico, pero que éste sea el de

orientación a objetos. Esta opción, que se refleja en la

figura 8, implica que el formato de datos que usa toda la

aplicación es el formato de objetos.

Para un programa resulta natural trabajar con objetos. Sin

embargo, esto es imposible para las bases de datos tradicionales, basadas en el modelo relacional. Para resolver

este problema han aparecido las bases de datos orientadas a objetos. Al contrario de sus homólogas relacionales,

que trabajan con registros, las bases de datos orientadas a objetos guardan y recuperan objetos. Por lo tanto, la

comunicación de este tipo de base de datos con un programa orientado a objetos es posible.

Aunque, sobre el papel, ésta es la mejor opción para implementar una aplicación de base de datos, en la práctica

presenta una serie de problemas importantes, debido a las características actuales de las bases de datos orientadas

a objetos. Éstas no están tan maduras como sus homólogas relacionales y, por lo tanto, no gozan de la

abundancia de herramientas, la fiabilidad, facilidad de administración y rendimiento de estas últimas.

Lo que es peor, las bases de datos orientadas a objetos frecuentemente son incompatibles entre ellas. Esto hace

imposible migrar una aplicación desde una base de datos orientada a objetos a otra, lo que nos obliga a depender

de un único proveedor (fenómeno conocido como “vendor lock-in”), con todas las inconveniencias que esto

supone (obligación de aceptar los aumentos de precio del proveedor, falta de soporte si el proveedor sale del

mercado, etc.).

Como conclusión, aunque ésta pueda ser la opción preferible en un futuro, en el que las bases de datos orientadas

a objetos alcancen una madurez y estandarización suficientes, en el presente resulta arriesgado aplicarla.

MOTORES DE PERSISTENCIA Hemos visto que las opciones que se basan en imponer un único modelo teórico (un único formato de datos) a

toda la aplicación padecen de graves inconvenientes. En el caso de que toda la aplicación siga el modelo

relacional, perdemos las ventajas de la orientación a objetos. En el caso de que toda la aplicación siga el modelo

orientado a objetos, tenemos que las bases de datos que debemos usar están inmaduras y tienen un bajo nivel de

estandarización.

Examinemos ahora la opción de que el programa sea orientado a objetos y la base de datos sea relacional, lo que,

en principio, constituye la opción más natural. Sin embargo, plantea el problema de cómo hacemos que dos

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 56

componentes con formatos de datos muy diferentes puedan comunicarse y trabajar conjuntamente. Siguiendo la

metáfora anterior, se trata de hacer que dos personas que hablan idiomas diferentes se comprendan.

La solución es la misma que se daría en la vida real. Se debe encontrar un traductor que sepa traducir de cada

idioma al otro. De esta forma, las dos personas se entenderán sin necesidad de que uno hable el idioma del otro.

En el mundo de la programación este traductor no es más que un componente de software (concretamente, una

capa de programación), al que se le dan los nombres de “capa de persistencia”, “capa de datos”,

“correspondencia O/R” (“OR mapping”) o “motor de persistencia”.

El motor de persistencia traduce entre los dos formatos de datos: de registros a objetos y de objetos a registros.

La situación se ejemplifica en la figura 9. Cuando el programa quiere grabar un objeto llama al motor de

persistencia, que traduce el objeto a registros y llama a la base de datos para que guarde estos registros. De la

misma manera, cuando el programa quiere recuperar un objeto, la base de datos recupera los registros

correspondientes, los cuales son traducidos en formato de objeto por el motor de persistencia.

El programa sólo ve que puede guardar objetos y recuperar objetos, como si estuviera programado para una base

de datos orientada a objetos. La base de datos sólo ve que guarda registros y recupera registros, como si el

programa estuviera dirigiéndose a ella de forma relacional. Es decir, cada uno de los dos componentes trabaja

con el formato de datos (el “idioma”) que le resulta más natural y es el motor de persistencia el que actúa de

traductor entre los dos modelos, permitiendo que los dos componentes se comuniquen y trabajen conjuntamente.

Esta solución goza de las mejores ventajas de los dos modelos.

Por una parte, podemos programar con orientación a objetos, aprovechando las ventajas de flexibilidad,

mantenimiento y reusabilidad.

Por otra parte, podemos usar una base de datos relacional, aprovechándonos de su madurez y su

estandarización así como de las herramientas relacionales que hay para ella.

Se calcula que un motor de persistencia puede reducir el código de una aplicación en un 40%, haciéndola menos

costosa de desarrollar. Además, el código que se obtiene programando de esta manera es más limpio y sencillo y,

por lo tanto, más fácil de mantener y más robusto. Por añadidura, el motor de persistencia no sólo simplifica la

programación, sino que permite hacer ciertas optimizaciones de rendimiento que serían difíciles de programar

por nosotros mismos.

Como conclusión, ésta es la mejor opción en la actualidad para implementar una aplicación de software.

OPCIONES PARA MOTORES DE PERSISTENCIA Una ventaja del motor de persistencia es que es el mismo para todas las aplicaciones. De esta forma sólo debe

programarse una vez y puede usarse para todas las aplicaciones que se desarrollen en nuestra empresa. Sin

embargo, un motor de persistencia es difícil de programar y de mantener, por lo que necesita un gran esfuerzo en

costo y tiempo de desarrollo.

Es por ello que hay dos opciones a la hora de usar un motor de persistencia:

Programarlo dentro de nuestra empresa. Como se ha dicho, esto no es lo más recomendable, por la

complejidad y costo que introduce esta opción.

Utilizar un motor que ya esté programado, comprándolo a un vendedor o bien usando un motor gratuito

de código abierto.

Base de Datos I

Escuela Tecnológica Superior - UDEP Página 57

Se recomienda fuertemente la segunda opción, que es la menos costosa y la menos propensa a fallos. Se debe

escoger un motor de persistencia de los que están programados, estudiarlo y aplicarlo a todas las aplicaciones de

una misma empresa. A continuación, explicamos algunos de los motores de persistencia más importantes para la

plataforma Java y para la plataforma .NET, con el fin de que el lector pueda comenzar una investigación que le

lleve a escoger el que más se ajuste a sus necesidades.

En cuanto a la plataforma Java, los servidores de aplicaciones basados en la especificación EJB (“Enterprise

JavaBeans”), incorporan un motor de persistencia a través del mecanismo conocido como “entity beans”. Sin

embargo, los “entity beans” no son un mecanismo de persistencia totalmente recomendable, pues no permiten

implementar algunas características de la programación orientada a objetos (por ejemplo, herencia) y además,

obligan a una forma de programar diferente a los objetos normales de Java (o POJOs, por “Plain Old Java

Objects”).

Hay motores de persistencia más completos que no tienen este tipo de inconvenientes que se acaba de

mencionar. Entre los de código abierto podemos destacar: Hibernate, Castor, Torque, OJB y Cayenne. Entre los

comerciales, podemos destacar TopLink, Cocobase y FastObjects. En los últimos años se ha creado una

especificación llamada JDO, para estandarizar la forma de programar en Java con esos motores de persistencia.

Ejemplos de motores de persistencia que cumplen el estándar JDO son Kodo, JDO Genie, LiDo, Exadel JDO,

IntelliBO, JRelay JDO (todos ellos comerciales), TJDO y XORM (de código abierto).

La plataforma .NET, por su relativa novedad, está más inmadura que la plataforma Java. Además, al ser una

plataforma propietaria, cuesta más encontrar proyectos de código abierto para ella. Por todo ello que no hay tanta

variedad de motores de persistencia en esta plataforma. Recientemente, Microsoft ha anunciado un motor de

persistencia llamado Objectspaces para .NET 2004. Mientras tanto, se puede usar ORM.NET, que es un motor

de persistencia comercial para .NET.