Sie sind auf Seite 1von 113

Bases de Datos

Modelo Entidad Relacin y


Modelo Relacional
Ingeniera de Sistemas de
Informacin!
Grado en Ingeniera en Tecnologas de
Telecomunicacin"
GSyC"

2012 Departamento GSyC, URJC"


Algunos derechos reservados. Este trabajo se
distribuye bajo la licencia Creative Commons
Attribution-NonCommercial-ShareAlike 3.0
Unported License"

GSyC"

2"

Contenidos"
Bases de Datos: Introduccin"
Diseo conceptual mediante el modelo Entidad
Relacin"
El modelo de datos relacional"
Conversin de un modelo ER a un modelo de datos
relacional"

GSyC"

3"

Bases de Datos
Introduccin"

Bases de Datos"
Base de Datos (BD, en ingls DB): Conjunto
de datos relacionados !
Normalmente es un conjunto de datos muy
grande. "

Tpicamente modelan el mundo real: "


entidades: personas, carreras, universidades,
salarios, equipos, juegos. . ."
relaciones: El usuario U est en la localizacin
geogrfica G, El estudiante X estudia la
asignatura Y, el cliente C ha gastado M minutos
de su tarifa plana" GSyC"

5"

Dnde se usan hoy las BD?"


En todas partes. "
Ejemplo: Bsquedas en Internet: "
Entidades: palabras, documentos "
Relaciones: "
palabra est-en documento "
documento enlaza-con documento "

Ejemplo: Sistemas de comparticin de archivos P2P:"


Entidades: palabras, (nombres de) ficheros, mquinas "
Relaciones: "
palabra est-en (nombre de) fichero "
fichero disponible-en mquina "
GSyC"

6"

Ejemplo"

GSyC"

7"

Ejemplo"

GSyC"

8"

Ejemplo"

GSyC"

9"

Ejemplo"

GSyC"

10"

Perspectiva histrica"
Principios de los 60: Charles Bachman en GE crea Integrated Database
Store."
Finales de los 60: IBM crea Information Management System (IMS), base
de datos jerrquica. American Airlines e IBM crean SABRE, sistema para
reservas areas. "
1969: Edgar Codd en IBM crea las bases de datos relacionales. Las BD
pasan a ser una disciplina acadmica y a utilizarse masivamente en la
industria"
Aos 80: Consolidacin del modelo relacional. Aparece el lenguaje de
interrogacin de bases de datos SQL (derivado del trabajo de IBM en el
Sistema R). Jim Gray crea el concepto de transaccin para permitir la
ejecucin concurrente de programas que acceden a una base de datos. "
Aos 90: Las bases de datos entran en la era de Internet y se integran en
las tecnologas Web."
Aos 200X: NoSQL. BD con modelo de datos no relacional basado en el
concepto de tabla de smbolos, sin JOIN, que relajan de las propiedades
ACID de las BD transaccionales para mejorar la escalabilidad"
GSyC"

11"

Sistema de gestin de Bases


de Datos"
Un SGBD (DBMS en ingls) es un software
diseado para utilizar, mantener y almacenar bases
de datos. "
SGBDR (RDBMS): Sistema de Gestin de Bases de
Datos Relacionales. "
Aunque hay BD de muchos tipos, hoy se utilizan
principalmente las BD relacionales con
transacciones, lo que lleva a que se utilice el trmino
general SGBD aplicado concretamente a BD
relacionales con transacciones. "
GSyC"

12"

SGBD versus Sistemas de


Ficheros"
Una alternativa a usar un SGBD es almacenar la informacin
en uno o ms ficheros, y gestionar esa informacin mediante
programas que los consulten y actualicen."
Ventajas de un SGBD frente a sistemas de ficheros: "
1. Permiten a las aplicaciones acceso concurrente a los datos y
recuperacin ante cadas (gracias a las transacciones) "
2. Permiten a las aplicaciones ser ms eficientes en el acceso a
grandes cantidades de datos "
3. Proporcionan a las aplicaciones mayor independencia frente a la
forma y el tipo de los datos almacenados, estandarizando el mtodo
de consultar y almacenar los datos"
4. Facilita a las aplicaciones la gestin de los datos: integridad de los
datos, control de concurrencia, recuperacin de fallos"
GSyC"

13"

Ejemplos de SGBD"
Propietarios: "

Oracle "
IBM DB2"
IBM Informix"
Ingres"
Interbase (Borland)"
Microsoft Access (derivada de Ingres) "
Microsoft SQL Server"
Sybase "

Libres: "
MySQL "

PostgreSQL (derivada de Ingres) "


SQLite"
Firebird (derivada de Interbase) "
GSyC"

14"

Esquemas: Niveles de abstraccin"


Esquemas externos: describen cmo los usuarios acceden a los datos. Pueden
ser adaptados a distintos usuarios (o grupos de usuarios) para la misma BD. Un
esquema externo se compone de una o ms vistas de la base de datos.

Esquema conceptual o
lgico: define la estructura
lgica de la BD.
Esquema fsico:
especifica detalles
adicionales de
almacenamiento,
fundamentalmente los
ficheros que se usarn
y los ndices que
permitirn acelerar las
bsquedas.

GSyC"

15"

Esquemas: Ejemplo de BD de una


Universidad"
Esquema Conceptual: "
Alumnos(nif
: string, nombre
: string,
email
: string, fecha_nacimiento: date,
nota_media: float)
Asignaturas(cdigo : int, nombre_as: string,
crditos: int)
Matriculados(nif : string, cdigo: string,
nota: float)

Esquema Fsico:"
las relaciones se guardarn cada una en un fichero sin
ordenar "
Mantenemos un ndice de la primera columna de
Asignaturas para hacer las bsquedas ms rpidas"
GSyC"

16"

Esquemas: Ejemplo de BD de una


Universidad"
Esquema Externo (vista): "
Info_Cursos (cdigo: string, matriculados: int)

No se define Info_Cursos como una relacin del


esquema conceptual anterior, ya que su informacin puede
calcularse a partir de las que ya hay, por lo que su inclusin
sera aadir a la BD informacin redundante "

GSyC"

17"

Transacciones"
Las aplicaciones que utilizan los usuarios que acceden a una BD se ejecutan
concurrentemente"
Estamos ante un caso claro de acceso concurrente a datos compartidos (la BD): El entrelazado en el
servidor de BD de las operaciones de acceso a los datos puede dar lugar a datos inconsistentes"

Transaccin: Secuencia Atmica de acciones (lecturas/escrituras) sobre una


BD: o se ejecutan todas las operaciones de una transaccin o ninguna. Ej.
transaccin: aadir una fila a tabla M y otra a tabla N: o las dos o ninguna"

El entrelazado de operaciones ha de ser equivalente a una ejecucin serie


(primero T1, luego T2,): Isolation!
Una transaccin lleva a una BD de un estado Consistente a otro. "
Las acciones de una transaccin no pueden realizarse en parte: o se realizan
todas, o no se realiza ninguna (Atomicidad)"
Los efectos de una transaccin comprometida han de permanecer (Durability)"
Propiedades ACID (Atomicity, Consistency, Isolation, Durability)"
GSyC"

18"

Ejecucin consistente de
transacciones"
Cada transaccin ejecutada aisladamente deja la BD en un estado consistente
(Isolation). "
Objetivo: Ejecutar las operaciones de cada transaccin {T1, T2... Tn} de
forma que el resultado sea consistente, equivalente a una ejecucin serie: primero
todas las operaciones de T1, luego todas las de T2,... "
Solucin trivial: serializar las transacciones en un orden concreto: limita la
concurrencia "
Mejor: permitir el entrelazado concurrente de las acciones de las transacciones de
forma que el resultado sea equivalente a haber serializado las transacciones en
un orden concreto. "
Mtodo optimista: permitir un entrelazado arbitrario y al acabar de ejecutar todas las operaciones de
una transaccin, comprobar si la concurrencia con ops de otras transacciones ha violado la
equivalencia serie, en cuyo caso se deshacen los cambios, y si no se comprometen"
Mtodo pesimista: las transacciones intentan echar cerrojos (locks) sobre cada uno de los datos
que van a leer/escribir. Hasta que no se tienen todos los cerrojos no se realizan las acciones. Al
terminar la transaccin se liberan todos los cerrojos. As es imposible un entrelazado ilegal."

Si dos transacciones echan cerrojos sobre datos que la otra necesita se produce un interbloqueo"
Una de las dos se aborta y la otra consigue todos sus cerrojos y termina comprometiendo sus cambios"

GSyC"

19"

Transacciones abortadas: Log de


una BD"
Una transaccin puede verse interrumpida antes de completarse: "
Cada del sistema"
Interbloqueo entre transacciones que usan cerrojos"
Ejecucin no equivalente serie con control de concurrencia optimista "

En estos casos, el SGBD debe asegurarse de poder deshacer los


cambios hechos en la BD por las acciones ya realizadas de la transaccin
incompleta. "
Para ello, el SGBD mantiene un log:"
Cuando se va a escribir un dato, primero se aade una entrada en el log con
el valor antiguo y el nuevo, se graba el log en disco, y luego se modifica el
dato de la BD "
Cuando se comprometen (commit) los cambios de una transaccin (se han
conseguido los cerrojos y se han modificado los datos tras apuntarlos en el
log), o cuando se aborta, se apunta en el log el commit/abort"
Al recuperarse de un fallo, se aplican los cambios del log por si alguno se
qued a medias"
GSyC"

20"

Funciones del SW del SGBDR"

Optimizacin y Ejecucin de Interrogaciones"


Operadores relacionales"
Mtodos de acceso a ficheros"
Gestin de buffers"
Gestin de espacio en disco"
Control de concurrencia "
Recuperacin tras fallos"

GSyC"

21"

Diseo Conceptual mediante


el modelo Entidad Relacin"

Diseo conceptual"
El Diseo Conceptual se realiza una vez se
ha realizado el anlisis de requisitos (historias
de usuario-BDD) "
Herramienta complementaria a la hora de capturar
requisitos"
Sirve para obtener un modelo de los datos del
mundo real que se van a gestionar en el sistema"
Genera una descripcin de alto nivel de los datos
que se almacenarn"

El Modelo Entidad Relacin (ER) es una


herramienta para realizar el diseo conceptual"
GSyC"

23"

Diseo conceptual"
Cules son las entidades del sistema que estamos
diseando?"
Empleados, departamentos"

Cules son las relaciones entre las entidades?"


Empleado dirige departamento, empleado trabaja en departamento"

Qu informacin de las entidades y relaciones identificadas


debemos guardar en la BD?"
Ej. de cada empleado su nif y su nombre, de cada departamento su
nombre y su director"

Cules son las restricciones de integridad o reglas del


negocio que rigen las entidades y relaciones identificadas?"
Ej. un departamento tiene que estar dirigido por uno y slo un empleado"

GSyC"

24"

Concepto"
El Modelo Entidad-Relacin (E-R o ER) es un modelo de
datos semntico. "
Permite expresar una descripcin de los datos que refleje los
requisitos de la aplicacin. "
El modelo ER permite expresar las carctersticas de los
datos grficamente mediante diagramas ER."
Al capturar los requisitos de la aplicacin normalmente: "
1. se expresa la descripcin de los datos usando diagramas ER"
2. se convierten los diagramas ER a esquemas de un modelo
relacional. "

Suele resultar ms fcil hacerlo en 2 pasos que expresar


directamente los datos en el modelo relacional. "
GSyC"

25"

Entidades"
Entidad!
Objeto del mundo real, distinguible de otros"
Ejemplo: un alumno de una universidad"
Se define en trminos de atributos. Ejemplo: nombre, dni, nmero de
expediente"
Cada atributo tiene un dominio: valores permitidos!
Cada atributo SLO puede almacenar UN valor!
Cada atributo es atmico: no se descompone en partes. (Ej. atributo direccin
no se descompone en ciudad, calle, piso,)"

Conjunto de entidades!
Coleccin de entidades, todas con los mismos atributos"
Ejemplo: todos los alumnos de una universidad"
Los conjuntos de entidades no tienen por qu ser disjuntos:"
Ejemplo: alumnos de una universidad, alumnos de primer curso"

Cada conjunto de entidades tiene una clave!


GSyC"

26"

Entidades"
Clave!
Conjunto de atributos cuyos valores identifican de
forma nica a una entidad dentro de un conjunto"
No hay un subconjunto de ellos que tambin
identifiquen de forma nica a una entidad"
En caso contrario, no es una clave sino una superclave"

Puede haber varios conjuntos de atributos


candidatos a ser clave"
En este caso se elige uno de estos conjuntos como clave primaria!
Los otros son claves candidatas!

GSyC"

27"

Diagrama ER de un conjunto de
Entidades"

Conjunto de Entidades: rectngulo"


Se utilizan sustantivos para nombrarlos"
Atributos: valos"
Clave primaria: nombres de atributos subrayados"
GSyC"

28"

Relaciones"
Relacin"
Asociacin entre 2 o ms entidades"
Ejemplo: El alumno Jos Prez estudia Ing. Teleco"
Puede tener atributos asociados. En ese caso son meramente
descriptivos!

Conjunto de Relaciones"
Coleccin de relaciones similares"
Puede representarse como un conjunto de tuplas"
{(e1, ..., en)|e1 E1, ..., en En}, en donde ei es una entidad del
conjunto de entidades Ei "
Ej: {(Jos Prez, Ing. Teleco), (Alfonso Gmez, Arquitectura, }"
Un mismo conjunto de entidades puede participar en distintos
conjuntos de relaciones, o en la misma relacin con varios roles
(empleado supervisa empleado) "
GSyC"

29"

Diagrama ER de un conjunto de
relaciones"

Coleccin de relaciones similares: rombo"


Se suelen utilizan verbos para nombrarlos"
Atributos descriptivos: valos"
GSyC"

30"

Relaciones"
Ejemplo de una instancia del conjunto de relaciones
binarias Trabaja_En:

GSyC"

31"

Relaciones"
Ejemplo de un conjunto de relaciones ternarias (3
entidades)

GSyC"

32"

Restricciones de integridad de
clave"
Dependiendo de los datos del mundo real que se estn modelando
pueden existir restricciones de clave en un conjunto de relaciones"
Dado un conjunto de entidades que participa en un conjunto de
relaciones, se dice que el conjunto de relaciones es de: "
muchos-a-muchos (many-to-many): cuando cada entidad de cada
conjunto de entidades puede aparecer en varias de las relaciones"
1-a-muchos (1-to-many): cuando las entidades de uno de los conjuntos
de entidades puede aparecer como mucho en 1 de las relaciones. "
1-a-1 (1-to-1): (slo en conjuntos de relaciones binarias) cuando una
entidad del primer conjunto de entidades slo puede aparecer como
mucho 1 vez, y una entidad del otro conjunto slo puede aparecer como
mucho 1 vez. "

GSyC"

33"

Restricciones de integridad de
clave"

1-to-1

1-to-Many

Many-to-1

GSyC"

Many-to-Many

34"

Restricciones de integridad de
clave"

En los diagramas, el conjunto de entidades de cardinalidad


1 se une al conjunto de relaciones con una punta de flecha"

Trabaja_En: Un empleado puede tener muchos dptos. en los que trabaja. Y un dpto.
pueden tener muchos empleados trabajando en l"
Dirige: Un empleado puede tener muchos departamentos dirigidos, pero un
departamento slo puede tener como mucho un empleado que lo dirija."
GSyC"

35"

Restricciones de integridad de
clave"
Ejemplo:"

Ahora, Dirige2 es una relacin uno-a-uno: Un empleado slo


puede tener un departamento dirigido, y un departamento slo puede
tener un empleado que lo dirija."
GSyC"

36"

Restricciones de integridad de
participacin"
Dependiendo de los datos del mundo real que se
estn modelando pueden existir restricciones de
participacin en un conjunto de relaciones"
La participacin de un conjunto de entidades en
un conjunto de relaciones puede ser: "
Total: Cuando todas las entidades aparecen en alguna relacin del
conjunto de relaciones. En los diagramas, se representan por una
lnea gruesa uniendo el conjunto de entidades al de relaciones. "
Parcial: Cuando no todas las entidades aparecen en alguna
relacin del conjunto de relaciones. "

GSyC"

37"

Restricciones de integridad de
participacin"
Ejemplo:"

En la relacin Dirige, la participacin de los Departamentos es


total, ya que todos los departamentos tienen un (y slo un) empleado
que los dirija, pero la participacin de los Empleados es parcial, ya
que NO todos los empleados dirigen un departamento"
En cuanto a Trabaja_En la participacin es total en ambos casos:
todos los empleados trabajan en al menos un departamento y todos
los departamentos tienen al menos un empleado que trabaja en ellos"
GSyC"

38"

Entidades dbiles"
Una entidad dbil es la que slo se puede identificar
mediante la clave de otra entidad que la posee!
El conjunto de entidades que posee y el conjunto de
entidades dbil deben participar en un conjunto de
relaciones uno-a-muchos (un poseedor, muchas entidades
dbiles posedas)."
La participacin del conjunto de entidades dbiles debe
ser total en este conjunto de relaciones."
nombre
dni

fecha_nac

Empleados

coste

Pliza

f_nombre

edad

Familiares

Las entidades dbiles tienen clave parcial (subrayada discontnua)"


Marcamos con lnea gruesa la entidad dbil y la relacin que la une a su
entidad poseedora (Empleados)"
GSyC"

39"

Jerarquas de Entidades: Relacin


ES-UN"
En ocasiones resulta interesante distinguir subgrupos o
jerarquas dentro de las entidades de un determinado
conjunto de entidades. "
En estos casos se establece una relacin especial, de
nombre ES-UN (IS-A), entre la entidad derivada y aquella
de la que deriva. "
La entidad derivada hereda los atributos de aquella de la
que deriva. "
En las jerarquas de entidades pueden aparecer nuevas
restricciones:"

restricciones de solapamiento: un entidad de un conjunto de entidades


derivado, se permite que est tambin en otro conjunto de entidades
derivado?"
restricciones de recubrimiento: una entidad del conjunto de entidades
del que se deriva, tiene que estar en alguna de las entidades derivadas? "
GSyC"

40"

Jerarquas de Entidades: Relacin


ES-UN"
Ejemplo:"

GSyC"

41"

Agregaciones"
Se usan cuando tenemos que modelar una relacin en la que hay
involucrado un conjunto de relaciones y un conjunto de relaciones"
La agregacin permite tratar el conjunto de relaciones como si fuera
un conjunto de entidades en lo relativo a su participacin en otras
relaciones"
Agregacin vs. Ternaria: Supervisa
"
es una realacin distinta, con su propio"
atributo (hasta)"
Y podramos expresar que cada "
hasta
proyecto patrocinado es supervisado "
Supervisa
por un solo empleado"
comienzo
desde

ppresupuesto

pid

Proyectos

Depende

GSyC"

did

dnombre

dpresupuesto

Departamentos

42"

Diseo conceptual con el modelo


ER"
Cuestiones de diseo"
Un cierto concepto del dominio de la aplicacin: debe
ser modelado como entidad o como atributo?"
Un cierto concepto del dominio de la aplicacin: debe
ser modelado como entidad o como relacin?"
Al identificar una relacin debe ser modelada como
binaria o como ternaria?"
Al identificar una relacin debemos agregarla?"

Restricciones en el modelo ER"


Hay que capturar muchos aspectos semnticos de los
datos"
Pero no todas las restricciones del mundo real se
pueden expresar en los diagramas ER"
GSyC"

43"

Cuestiones de Diseo: entidad o


atributo de entidad"
Depende de la forma en que queramos usar
el concepto a modelar: "
El valor de un atributo para una entidad dada es
nico."
Por tanto, si una entidad X puede tener asociados
varios de estos conceptos, el concepto debe ser una
entidad distinta Y, y establecerse una relacin entre
X e Y"

Si el concepto tiene estructura (es decir, tiene


partes, componentes ms pequeos), debe ser
una entidad, ya que los valores de un atributo
son atmicos "
GSyC"

44"

Cuestiones de Diseo: entidad o


atributo de entidad. Ejemplo."
Ejemplo: La direccin debe ser un atributo de
la entidad Empleados o debe ser una entidad
relacionada con la entidad Empleados?"
Atributo si slo guardamos una direccin por empleado,
entidad si guardamos ms de una direccin (pues los
atributos no pueden tener varios valores), y
establecemos relacin vive-en entre Empleado y
Direccin "
Si la estructura es importante (ciudad, calle, piso,)
tiene que ser una entidad (pues los atributos son
atmicos)"

GSyC"

45"

Cuestiones de Diseo: relacin o


atributo de relacin. Ejemplo."

Con este esquema, un empleado no puede trabajar para un


departamento ms de un periodo de tiempo."
GSyC"

46"

Cuestiones de Diseo: relacin o


atributo de relacin. Ejemplo."

Este esquema s permite reflejar que un empleado pueda


trabajar para un departamento ms de un perodo de
tiempo"
GSyC"

47"

Cuestiones de Diseo: entidad o


relacin"
Este diseo es vlido

siempre que el
dni
director de un
departamento
obtenga un
presupuesto extra
para cada dpto. que
dirige"
Si un director obtiene
un presupuesto extra
nico para todos los
departamentos que
dirige, mejor este
diseo: ni sugiere que
hay presupuesto extra
por dpto., ni se
almacena 1 vez por
dpto"

nombre

desde

Fecha_nac

dep_id

Dirige

Empleados

Dep_nombre presupuesto

Departamentos

presup_extra

nombre
dni

Fecha_nac

desde

dep_id Dep_nombre presupuesto

Dirigido por

Empleados

Departamentos

Es director

direccion_id

GSyC"

Direcciones

presup_extra

48"

Cuestiones de Diseo: relacin


binaria o ternaria"
Cada pliza slo puede
pertenecer a un
empleado, pero esa
restriccin de clave hace
que una pliza slo
pueda cubrir un familiar!"

dni

nombre

f_nombre

fecha_nac

Empleados

Plizas
poli_id

Un familiar slo puede


ser beneficiario de una
pliza, pero una pliza
puede beneficiar a
varios familiares. Un
empleado puede
comprar varias plizas,
pero una pliza slo
puede ser comprada por
un empleado"

dni

Familiares

Cubre

Mal diseo

edad

coste

nombre

f_nombre

fecha_nac

edad

Familiares

Empleados
Compra

Mejor diseo
GSyC"

Beneficia

Plizas
poli_id

coste

Cuestiones de Diseo: relacin


binaria o ternaria"
El ejemplo anterior muestra un caso en el
que dos relaciones binarias son mejores
que una ternaria"
Un ejemplo contrario: la relacin ternaria
Contrata relaciona los conjuntos de
entidades Productos, Departamentos y
Proveedores, y tiene un atributo
descriptivo cantidad. No hay una
combinacin de relaciones binarias que sea
un substituto adecuado"
Veamos ejemplo" GSyC"

50"

Cuestiones de Diseo: relacin


binaria o ternaria"
cantidad

Productos

Departamentos

Contrata

Mejor diseo
Proveedores
Productos

necesita

Departamentos

Mal diseo
Puede-suministrar

Proveedor

trabaja-con

Proveedor Puede-suministrar Producto, Departamento necesita


Producto, y Departamento trabaja con Proveedor, pero eso no
implica que Departamento va a comprar Producto a Proveedor."
Y, cmo registrar la cantidad a comprar?"
GSyC"

51"

Otras cuestiones de diseo"


Es difcil dar muchas reglas generales. "
Aunque el modelo ER es bastante expresivo y cercano a la forma en
que las personas piensan en las aplicaciones que necesitan, es
impreciso en algunos aspectos: hay restricciones que no se podran
aplicar hasta la fase de diseo lgico (relacional)"
Muchas veces un mal diseo lleva a tener informacin redundante, lo
que es indeseable pues provoca: "
Almacenamiento redundante en la BD"
Anomalas en actualizaciones (si un cambio no actualiza toda la
informacin redundante)"
Anomalas en las inserciones (para aadir cierta informacin necesito
aadir tambin otra informacin no relacionada) "
Anomalas en el borrado (no es posible borrar cierta informacin sin tener
que borrar tambin otra no relacionada)."
Se soluciona con la normalizacin de la BD (que no estudiaremos en este
curso)"
GSyC"

52"

Resumen: Modelo Entidad


Relacin (ER)"
Utiliza elementos expresivos, cercanos al
dominio de la aplicacin para modelar
conceptos de la realidad"
Ojo: Hay muchas notaciones distintas para
diagramas ER"
Elementos principales: entidades,
relaciones, y atributos (de entidades y de
relaciones)."
Algunos elementos adicionales: entidades
dbiles, jerarquas es-un, agregacin."
GSyC"

53"

Resumen: Modelo Entidad


Relacin (ER)"
Varios tipos de restricciones impuestos por la semntica de los datos
usados en la realidad (reglas de negocio):"
Restricciones de clave!
Restricciones de participacin!
Hay muchas otras restricciones que no pueden expresarse en el
diagrama ER"
p.ej. Cuando un empleado abandona el cargo hay que aadirlo como exempleado!

Los requisitos juegan un papel fundamental a la hora de determinar el


mejor diseo de la BD"

GSyC"

54"

Resumen: Modelo Entidad


Relacin (ER)"
El diseo de un modelo ER es subjetivo. Hay muchas
formas de modelar los datos de una aplicacin"
Analizar las alternativas puede ser controvertido, sobre
todo en un modelo grande. "
Frecuentemente hay que decidir entre:"
Entidad vs. atributo"
Entidad vs. relacin "
Relacin binaria y n-aria"
Usar o no relaciones ES-UN"
Agregacin"

Cmo obtener un buen diseo de la BD? El esquema


relacional tiene que ser analizado y refinado usando:"
Informacin de dependencias funcionales"
Tcnicas de normalizacin"
GSyC"

55"

El modelo de datos Relacional"

Modelos de datos"
Diseo lgico!
Tras el diseo conceptual utilizando ER realizamos ahora el diseo lgico"
Consiste en convertir la descripcin de alto nivel del diagrama ER en un modelo de
datos adecuado al SGBD que usemos"

Modelo de Datos Relacional: Modelo de datos que utiliza tablas, claves


primarias y claves forneas/Foreign Keys (FK) para modelar los datos"
Otros modelos de datos: "

Modelo de Datos Jerrquico"


Modelo de Datos en Red"
Modelo de Datos Orientado a Objetos "
Modelo de Datos Objeto-Relacional "

En este tema siempre utilizaremos un Modelo de Datos Relacional, lo que


convierte a las BD en BD relacionales y al los SGBD en SGBDR. "

GSyC"

57"

Modelo Relacional: definiciones"


Una BD relacional es un conjunto de relaciones!
Relacin: formada por 2 partes"
Instancia: una tabla, con filas (o tuplas) y columnas"
N de filas: cardinalidad, N de columnas: grado"
Todas las filas son distintas"

Esquema: nombre de la relacin, nombre y tipo de cada columna (o campo, o


atributo), restricciones"
"

Ejemplo de esquema: "


Alumnos(nif: string, nombre: string, email: string,
edad: int, nota_media: float)

Ejemplo de una instancia (tabla) de la relacin Alumnos: "


nif!

Nombre!

Email!

Edad!

Nota_media!

123456789A

Luis Gmez Sanz

lag@gmail.com

18

7.8

443666789F

Pedro A. lvarez Gil

pgg@gmail.com

19

8.0

436375531H

Jos Snchez Cid

jss@gmail.com

21

7.2

Cardinalidad: 3, Grado: 5, todas las filas distintas.


GSyC"

58"

Lenguajes de interrogacin
relacionales"
Interrogacin (query): Pregunta sobre los datos almacenados en una BD: "
Cul es el nombre del alumno cuyo NIF es 443666789F? "
Cuntos alumnos estn matriculados de las asignaturas de nombre IARO y SAT"
Cuntos alumnos tienen menos de un 5.0 en SAT? "

Cada SGBD define un lenguaje de interrogacin con el que pueden formularse


las interrogaciones a sus BD."
El modelo relacional tiene entre sus carctetsticas que permite definir lenguajes
de interrogacin muy potentes para las BD relacionales."
Las interrogaciones es escriben de modo intuitivo"
Un SGBD trata de que la evaluacin de las interrogaciones se haga de la forma
ms eficiente posible. "
La semntica de las interrogaciones est bien definida en trminos de un
lgebra relacional, lo que permite al optimizador reordenar operaciones "
La eficiencia tambin depende de cmo se han almacenado los datos y de
cmo se han indexado (qu ndices se han definido) "

GSyC"

59"

SQL"
Cada SGBD define"
un Lenguaje de Definicin de Datos (DDL) para especificar el
Esquema Conceptual y los Esquemas Externos (vistas) de las BD."
un Lenguaje de Manipulacin de Datos (DML) para que los usuarios
de una BD puedan crear, modificar e interrogar la BD. El lenguaje de
interrogacin es, por lo tanto, parte del DML. "
SQL, Standarized Query Language, pese a su nombre, no es
simplemente un lenguaje de interrogacin, sino que incluye tanto un DDL
como un DML."
Est estandarizado pero cada SGBD (Oracle, PostgreSQL, SQLite,
MySQL) aade su propias extensiones."

GSyC"

60"

Creacin de relaciones en SQL"


CREATE TABLE Alumnos
(nif CHAR(10),
nombre CHAR (30),
email CHAR (30),
edad INT,
nota_media FLOAT
); "

CREATE TABLE Matriculados


(nif CHAR(10),
asignatura CHAR (30),
nota FLOAT
); "

Alumnos
nif!

Nombre!

Email!

Edad!

Nota_media!

123456789A

Luis Gmez Sanz

lag@gmail.com

18

7.8

443666789F

Pedro A. lvarez Gil

pgg@gmail.com

19

8.0

436375531H

Jos Snchez Cid

jss@gmail.com

21

7.2

nif!

asignatura!

Nota!

123456789A

ISI

5.8

123456789A

Circuitos

10.0

436375531H

Latn

10.0

Matriculados
GSyC"

61"

Destruccin y modificacin de
relaciones"
Destruccin de la relacin, su esquema y sus tuplas:"
DROP TABLE Alumnos;

Aadir columna al esquema:"


ALTER TABLE Alumnos
ADD COLUMN aoIngreso INT;
Se aade campo a las tuplas existentes, con valor NULL;"

GSyC"

62"

Aadir, Eliminar y Modificar tuplas"


Aadir tupla en una tabla:"
INSERT INTO Alumnos(nif, nombre, email, edad, nota_media)
VALUES ('1234234N', 'Pepe Leches', 'pepe@gmail.com', 22, 2.3); "

Borrar datos de una tabla"


DELETE FROM Alumnos
WHERE nombre = 'Pepe Leches';"

Modificar una tupla:"


UPDATE Alumnos
SET nombre='Jose Leches'
WHERE nif= '1234234N';

GSyC"

63"

Interrogacin SQL"
Alumnos
nif!

Nombre!

Email!

Edad!

Nota_media!

123456789A

Luis Gmez Sanz

lag@gmail.com

18

7.8

443666789F

Pedro A. lvarez Gil

pgg@gmail.com

19

8.0

436375531H

Jos Snchez Cid

jss@gmail.com

21

7.2

Para encontrar todos los estudiantes de 18 aos:"


SELECT *
FROM Alumnos A
WHERE A.edad=18;

Para encontrar slo nombres e emails:"


SELECT A.nombre, A.email
FROM Alumnos A
WHERE A.edad=18;
GSyC"

64"

JOIN: Interrogacin SQL en varias


tablas"
Alumnos
nif!

Nombre!

Email!

Edad!

Nota_media!

123456789A

Luis Gmez Sanz

lag@gmail.com

18

7.8

443666789F

Pedro A. lvarez Gil

pgg@gmail.com

19

8.0

436375531H

Jos Snchez Cid

jss@gmail.com

21

7.2

nif!

Asignatura!

Nota!

123456789A

ISI

5.8

123456789A

Circuitos

10.0

436375531H

Latn

10.0

Matriculados

Para encontrar todos los estudiantes con matrcula de honor:"


SELECT A.nombre, M.asignatura
FROM Alumnos A, Matriculados M
WHERE A.nif = M.nif AND M.nota=10.0;

A.Nombre!

M.Asignatura!

Luis Gmez Sanz

Circuitos

Jos Snchez Cid

Latn

SELECT A.nombre, M.asignatura FROM Alumnos A


JOIN Matriculados M ON A.nif = M.nif AND
M.nota = 10.0;

Resultado
GSyC"

65"

El modelo de datos relacional:


Restricciones de Integridad

Restricciones de Integridad
Integrity Constraints (ICs)"
Restricciones de integridad: Condicin que debe cumplirse en cualquier
instancia de la BD"
Ej: restricciones de dominio: el campo X almacena nmeros enteros"

Las restricciones se expresan cuando se define el esquema"


Las restricciones se comprueban cuando se modifican las relaciones"
Una instancia legal de una relacin es la que satisface todas las
restricciones de integridad"
Los DBMS no deben permitir instancias ilegales"

Si el DBMS comprueba las restricciones de integridad, los datos


almacenados son ms fieles a su significado en el mundo real"
Y adems se evitan errores en la introduccin de datos"

Tipos de Restricciones de Integridad: "


Restricciones de Dominio "
Restricciones de Clave Primaria "
Restricciones de Clave Fornea "
Restricciones de Tabla"
Restricciones Complejas (Aserciones). "

GSyC"

67"

Restricciones de dominio"
Dominio: El conjunto valores permitidos para cada columna (campo/
atributo) de una tabla. "
Cada valor para una columna debe estar entre el rango permitido en su
dominio al definirla. "
Al declarar el dominio de una columna puede darse un valor por defecto
para ella. "
Al declarar el dominio de una columna puede especificarse si se permite
un valor nulo para ella. "
Si se intenta aadir una fila que no cumple todas las restricciones de
dominio para los valores de todos sus campos, la insercin ser
rechazada. "
Con SQL hay dominios predefinidos y pueden definirse nuevos. "

GSyC"

68"

Restricciones de dominio: Ejemplo"


En SQL:
CREATE TABLE Estudiantes(nif VARCHAR(20) NOT NULL,
nombre VARCHAR(30) NOT NULL, login VARCHAR(20), edad
INT NOT NULL, nota_media FLOAT DEFAULT '0.0' NOT
NULL); "
NOT NULL: Indica que este campo no puede tener valor nulo. "
DEFAULT: Indica el valor por defecto para este campo."

En Rails utilizamos las validaciones como


validate_presence_of :campo

GSyC"

69"

Restricciones de Clave Primaria y


candidatas"
Clave o Clave candidata: Conjunto de campos de una tabla que identifica
unvocamente una tupla/fila, cumplindose adems que ningn
subconjunto de ellos lo hace. "
Superclave: Conjunto de campos que identifica unvocamente una fila,
siendo que un subconjunto de ellos tambin lo hace. "
Clave primaria: Una de las claves candidatas ser la clave primaria,
elegida al definir el esquema"
La restriccin de clave primaria en una tabla implica que no pueden
aadirse dos filas con los mismos valores en la clave primaria. "
Si se han definido otras claves candidatas, tampoco podrn aadirse dos
filas con los mismos valores en esos campos. "

GSyC"

70"

Restricciones de Clave Primaria y


candidatas. Ejemplo"
CREATE TABLE Estudiantes(nif VARCHAR(20), nombre
VARCHAR(30), login VARCHAR(20), fecha_nac DATE, nota_media
FLOAT, UNIQUE(nombre, fecha_nac), PRIMARY KEY(nif));
UNIQUE define una clave candidata, si la hubiera. "
PRIMARY KEY define la clave primaria."

En Rails se utiliza como clave primaria de todas las entidades una clave
surrogada en lugar de la clave natural obtenida del modelo ER. "
La clave surrogada es una columna adicional que se aade automticamente: el
campo id de los modelos que her ActiveRecord "
Se garantiza que es nica y que no se reutiliza"
Pero debemos mantener como clave candidata la clave natural identificada en el
modelo ER, para garantizar las restricciones de integridad identificadas en el
diseo conceptual expresado en el diagrama ER"
En el ejemplo, nombre y fecha_nac por un lado, y nif por otro."

GSyC"

71"

Restricciones de Clave Primaria y


Candidatas. Ejemplo con Rails"
Creamos modelo y migracin: "
rails generate model estudiante nif:string nombre:string
login:string fecha_nac:date nota_media:float

El campo de clave primaria id es implcito, no lo


vemos en la migracin"
Efectos en la BD al aplicar la migracin:"
sqlite3 db/development.sqlite3
sqlite> .schema estudiantes
CREATE TABLE "estudiantes" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT
NULL, "nif" varchar(255), "nombre" varchar(255), "login" varchar(255),
fecha_nac" date, "nota_media" float, "created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL);

GSyC"

72"

Restricciones de Clave Primaria y


Candidatas. Ejemplo con Rails"
Modificamos el modelo app/models/estudiante.rb para que no se
puedan crear dos tuplas con el mismo nif (restriccin de clave primaria
natural nif) ni dos tuplas con la misma clave candidata (nombre,
fecha_nac) :
class Estudiante < ActiveRecord::Base
attr_accessible :nif, :nombre, :login, :fecha_nac, :nota_media
validates_uniqueness_of :nif
validates_uniqueness_of :nombre, :scope => [:fecha_nac]
end

Lo representamos grficamente as, donde PK significa Primary Key y CK


Candidate Key:"

GSyC"

73"

Restricciones de clave fornea


Integridad referencial"
La clave fornea se utiliza en el modelo relacionar para implementar las
relaciones del modelo ER"
Clave Fornea: Conjunto de campos de una tabla que son clave primaria
de otra tabla"
se usan para referirse a una fila de esa otra tabla, como un puntero lgico "

En una misma tabla puede haber varias columnas con claves forneas de
tablas distintas. "
Un clave fornea puede referirse a la clave primaria de la propia tabla."
Ej: empleado supervisa empleado"

Si se fuerzan todas las restricciones de clave fornea se consigue la


Integridad referencial: no hay referencias apuntando a tuplas de otras
tablas que no existen"

GSyC"

74"

Restricciones de clave fornea


Integridad referencial: ejemplo SQL/Rails"
Ejemplo SQL: en la tabla Matriculados nif es una FK que apunta a la tabla
de Estudiantes"

CREATE TABLE Matriculados (nif CHAR(10), asignatura


CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura)
FOREIGN KEY (nif) REFERENCES Estudiantes);

En Rails: Creamos modelo y migracin: "


rails generate model matriculado asignatura:string nota:float

Aadimos clave fornea para la tabla estudiantes:"


class CreateMatriculados < ActiveRecord::Migration
def change
create_table :matriculados do |t|
t.string :asignatura
t.float :nota
t.references :estudiante
t.timestamps
end
end
end

GSyC"

75"

Restricciones de clave fornea


Integridad referencial: ejemplo SQL/Rails"
Efecto de aplicar la migracin en la BD:"
sqlite3 db/development.sqlite3"
sqlite> .schema matriculados"
CREATE TABLE "matriculados" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"asignatura" varchar(255), "nota" float, "estudiante_id" integer, "created_at"
datetime NOT NULL, "updated_at" datetime NOT NULL);

GSyC"

76"

Restricciones de clave fornea


Integridad referencial: ejemplo SQL/Rails"
Ahora reflejamos en los modelos la asociacin que existe entre ellos:"
has_many en el modelo estudiante, pues un estudiante tiene muchos matriculados"
En la notacin grfica, el * al lado de matriculado significa que cada estudiante tiene muchos (0 o ms)
matriculados"

belongs_to en el modelo que tiene la FK: en matriculado, pues un matriculado


pertenece a un estudiante"
En la notacin grfica, el 0..1 al lado de estudiante significa que cada matriculado pertenece a 0 o 1 estudiantes"

class Matriculado < ActiveRecord::Base


attr_accessible :asignatura, :nota
validates_uniqueness_of :estudiante_id, :scope => [:asignatura]
belongs_to :estudiante
end
class Estudiante < ActiveRecord::Base
attr_accessible :nif, :nombre, :login, :fecha_nac, :nota_media
validates_uniqueness_of :nif
validates_uniqueness_of :nombre, :scope => [:fecha_nac]
has_many :matriculados
end
GSyC"

77"

Restricciones de clave fornea:


implicaciones en operaciones SQL"
Cmo forzamos las restricciones de integridad de las FK para que no existan en
Matriculados claves forneas que no correspondan a alumnos de la tabla
Alumnos?"
Insercin: Se rechaza la insercin de un fila en la que el valor de los campos de
las claves forneas no aparece en ninguna fila de la tabla referenciada."
Borrado: Cuando se borra una fila de una tabla referenciada en otra mediante
clave fornea se puede optar entre: "
1. Rechazar el borrado de esa fila su en la otra tabla alguna fila referencia a la que se quiere borrar. "
2. Borrar tambin todas las filas de otra tabla que referenciaban a la fila borrada (a travs de su clave
fornea). "
3. Cambiar el valor de la clave fornea de las filas afectadas a un valor por defecto (si est
establecido al definir el campo en la tabla original). "
4. Cambiar el valor de la clave fornea de las filas afectadas al valor nulo (si est permitido al definir el
campo en la tabla original). "

Actualizacin: Cuando se cambia la clave primaria de una tabla referenciada en


otra mediante clave fornea, es un caso anlogo al del borrado, con las mismas
opciones "
GSyC"

78"

Restricciones de clave fornea:


ejemplo SQL"
CREATE TABLE Matriculados (nif CHAR(10), asignatura
CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura)
FOREIGN KEY (nif) REFERENCES Alumnos
ON DELETE CASCADE);
Significa: cuando se borre en la tabla alumnos una tupla se deben borrar en Matriculados las tuplas que
pertenezcan a aquella"

CREATE TABLE Matriculados (nif CHAR(10), asignatura


CHAR (30), nota FLOAT, PRIMARY KEY (nif, asignatura)
FOREIGN KEY (nif) REFERENCES Alumnos
ON DELETE CASCADE
ON UPDATE NO ACTION);

ON DELETE especifica el comportamiento al borrar una entrada de la tabla referenciada, y ON UPDATE


al actualizar la clave primaria en una entrada de esa tabla. "

NO ACTION especifica rechazar el cambio (es el valor por defecto)."


CASCADE especifica borrar o actualizar las entradas afectadas. "
SET DEFAULT especifica poner el valor por defecto en la clave fornea de las entradas afectadas. "
SET NULL especifica poner el valor nulo en la clave fornea de las entradas afectadas. "

GSyC"

79"

Restricciones de clave fornea:


ejemplo Rails"
En Rails "
class Estudiante < ActiveRecord::Base
attr_accessible :nif, :nombre, :login, :fecha_nac, :nota_media
validates_uniqueness_of :nif
validates_uniqueness_of :nombre, :scope => [:fecha_nac]
has_many :matriculados, :dependent => :destroy
end

GSyC"

80"

Restricciones de Clave Primaria


Precauciones"
Cuidado con cmo elegimos las claves, candidatas
y primarias:"

As, slo guardamos una nota para cada pareja de asignatura y alumno (SQL y Rails)
CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif,
asignatura));
class Matriculado < ActiveRecord::Base
attr_accessible :nif, :asignatura, :nota
validates_uniqueness_of :nif, :scope => [:asignatura]
end

As, cada alumno slo puede estar matriculado en una asignatura, y recibir slo una nota
para esa asignatura, y en cada asignatura no puede haber un alumno con la misma nota.
Seguro que queremos eso? "
CREATE TABLE Matriculados (nif CHAR(10), asignatura CHAR (30), nota FLOAT, PRIMARY KEY (nif),
UNIQUE (asignatura, nota));

class Matriculado < ActiveRecord::Base


attr_accessible :nif, :asignatura, :nota
validates_uniqueness_of :nif
validates_uniqueness_of :asignatura, :scope => [:nota]
end

GSyC"

81"

Modelo Relacional: Resumen"


Representacin de los datos en tablas/relaciones"
Simple, intuitivo, el ms usado "
Las restricciones de integridad las puede especificar el
administrador de la BD o el programador de la aplicacin,
basndose en la semntica de la aplicacin"
El DBMS comprueba si hay violaciones"
Restricciones de clave primaria y de clave fornea"
Restricciones de dominio"

Hay lenguajes de interrogacin potentes como SQL"


Hay reglas para traducir del modelo ER al modelo
relacional"

GSyC"

82"

Conversin de un Modelo ER
a un Modelo de datos
Relacional"

Rails ActiveRecord: claves


primarias"

En Rails se utiliza una clave surrogada, que no tiene que


ver con los datos reales, en lugar de usar las claves
naturales identificadas en el modelo ER"
Sin embargo conservamos las claves naturales identificadas
como claves candidatas, y nos aseguramos de su unicidad:"
1. En el modelo, aadiendo validacin validate_uniqueness_of, para que Rails
compruebe que no se repiten al crear modelos"
2. Opcionalmente, podemos tambin aadir un ndice a la BD en la migracin , para que
el SGBDR compruebe que no se repiten al almacenar en la BD"

No es redundante: podra haber condicin de carrera entre dos transacciones distintas que comprueben la
validacin del modelo. Con el ndice se evitan."
Ejemplo:"
class CreateEmpleados < ActiveRecord::Migration
def self.change
create_table :empleados do |t|
t.string
dni'
t.string
nombre'
t.datetime fecha_nac
end
add_index :empleados, :dni, :unique => true
end
end

GSyC"

84"

Conjuntos de Entidades como


tablas"
Cada atributo del conjunto de entidades se convierte
en un campo de la tabla. "
Los atributos clave se convierten en la clave primaria
de la tabla. "

GSyC"

85"

Conjuntos de Entidades como


tablas: Ejemplo"

CREATE TABLE Empleados (dni VARCHAR(10),


nombre VARCHAR(30),
fecha_nac DATE,
PRIMARY KEY (dni));

Rails:
GSyC"

86"

Conjuntos de Relaciones sin


restricciones como tablas"
Los atributos de la tabla que representa al
conjunto de relaciones incluyen: "
los atributos descriptivos asociados al conjunto de
relaciones "
los atributos clave de cada conjunto de entidades,
definidos como claves forneas "

Los atributos clave de cada conjunto de entidades


pasan a ser la clave primaria de la tabla"
Recuerda que en RoR, ActiveRecord utiliza una clave
primaria surrogada, distinta de la clave natural
identificada por el modelo ER"
La clave natural pasa a ser candidata"
GSyC"

87"

Conjuntos de Relaciones sin


restricciones como tablas: ejemplo"

CREATE TABLE Trabaja_En2 (dni VARCHAR(20), dep_id INT,


direccion VARCHAR(30),
fecha_ingreso DATE,
PRIMARY KEY (dni, dep_id, direccion),
FOREIGN KEY (dni) REFERENCES Empleados,
FOREIGN KEY (dep_id) REFERENCES Departamentos,
FOREIGN KEY (direccion) REFERENCES Sedes);
GSyC"

88"

Conjuntos de Relaciones sin


restricciones como tablas: ejemplo"
Rails:

GSyC"

89"

Conjuntos de Relaciones con


restricciones de clave"
Opcin 1: Convertirla en una tabla como en el caso
anterior, con la modificacin siguiente: "
los atributos clave de un conjunto de entidades de la que salga una
flecha 1-a-muchos hacia el conjunto de relaciones se convierten
(ellos solos) en una clave candidata para la tabla"
todas las claves de las entidades participantes en la relacin se
convierten en claves forneas de la tabla de la relacin "

Opcin 2 (preferible): Incluir la informacin de la relacin


en la tabla del conjunto entidad del que sale la flecha 1-amuchos: "
incluir como claves forneas los atributos clave de las otras
entidades relacionadas"
incluir los atributos descriptivos "
GSyC"

90"

Conjuntos de Relaciones con


restricciones de clave"
Ventajas de la opcin 2: "
Una tabla menos "
Las interrogaciones sobre ese conjunto de relaciones se harn
sobre una sola tabla, no cruzando la informacin de dos "

Inconveniente de la opcin 2: "


Si la participacin del conjunto de entidades en el conjunto de
relaciones es parcial, se desperdicia espacio en la BD (los campos
aadidos tendrn valor nulo). "

GSyC"

91"

Conjuntos de Relaciones con


restricciones de clave: Ejemplo"
Opcin 1!

CREATE TABLE Dirige (dni VARCHAR(20), dep_id INT,


fecha_comienzo DATE,
PRIMARY KEY (dep_id),
FOREIGN KEY (dni) REFERENCES Empleados,
FOREIGN KEY (dep_id) REFERENCES Departamentos);

GSyC"

92"

Conjuntos de Relaciones con


restricciones de clave: Ejemplo"
Opcin 1!

Rails:

GSyC"

93"

Conjuntos de Relaciones con


restricciones de clave: Ejemplo"
Opcin 2!

CREATE TABLE Departamento_Dirigido


(dep_id INT, dep_nombre VARCHAR(20),
presupuesto FLOAT(20,2),
dni VARCHAR(20),
fecha_comienzo DATE,
PRIMARY KEY (dep_id),
FOREIGN KEY (dni) REFERENCES Empleados);

GSyC"

94"

Conjuntos de Relaciones con


restricciones de clave: Ejemplo"
Opcin 2!

Rails:

GSyC"

95"

Conjuntos de Relaciones con


restricciones de participacin"
En algunos casos una restriccin de participacin total puede representarse
con restricciones NOT NULL utilizando la opcin 2 del caso anterior. "
Pero algunas restricciones de participacin, como la del ejemplo, son ms
difciles de trasladar al modelo relacional: necesitan restricciones de tabla en
SQL o aserciones para poder expresarse: ejemplo, todo empleado trabaja en
algn dpto y todo dpto. tiene al menos un trabajador"
En Rails tendremos que escribir el cdigo que garantice que cada vez que se
aade un empleado o un dpto. se aade una entrada en la relacin "

96"

Conjuntos de Relaciones con


restricciones de participacin:
ejemplo"

CREATE TABLE Depart_Dir (dep_id INT, dep_nombre VARCHAR(20),


presupuesto FLOAT(20,2),
dni VARCHAR(20) NOT NULL,
fecha_comienzo DATE,
PRIMARY KEY (dep_id),
FOREIGN KEY (dni) REFERENCES Empleados
ON DELETE CASCADE);

GSyC"

97"

Conjuntos de Relaciones con


restricciones de participacin:
ejemplo"

Rails:

GSyC"

98"

Relaciones ES-UN"
Alternativa 1: "
Tanto el conjunto de entidades base como los conjuntos de entidades
derivados se trasladan a tablas diferentes."
Las tablas de las entidades derivadas incluyen como campos: "
sus atributos especficos"
los atributos clave de la entidad base son clave primaria y clave fornea en la derivada"

Para cada fila de la tabla de la entidad derivada, los campos heredados


se guardan en una fila de la tabla de la entidad base (referenciada a travs
de la clave fornea). "
Si se borra la fila de la clase de la entidad base, debe borrarse la de la
entidad derivada."
Las queries de la entidad base son inmediatas. Las de la entidad derivada
requieren join con la base para obtener algunos de los atributos"

Alternativa 2: Slo se convierten en entidades las derivadas, que


incluyen los campos de la base."
Obliga a que cada empleado tenga que estar en alguna de las derivadas "
GSyC"

99"

Relaciones ES-UN: ejemplo"

CREATE TABLE Emp_Tpo_Parcial (horas_trab INT,


sueldo_hora FLOAT,
dni VARCHAR(20),
PRIMARY KEY (dni),
Alternativa 1
FOREIGN KEY (dni) REFERENCES Empleados
ON DELETE CASCADE);
CREATE TABLE Emp_Tpo_Parcial (nombre VARCHAR(20), fecha_nac DATE,
horas_trab INT,
sueldo_hora FLOAT,
dni VARCHAR(20),
Alternativa 2
PRIMARY KEY (dni),
FOREIGN KEY (dni) REFERENCES Empleados
ON DELETE CASCADE);
GSyC"

100"

Relaciones ES-UN: ejemplo"

Alternativa 1

Rails:
GSyC"

101"

Relaciones ES-UN: ejemplo"

Alternativa 2

Rails:

GSyC"

102"

Conjuntos de entidades dbiles"


El conjunto de entidades dbil y el conjunto de relaciones
se convierten a una sola tabla "
Cuando el dueo de la entidad se borre, todas las
entidades dbiles que posee deben borrarse"

GSyC"

103"

Conjuntos de entidades dbiles:


ejemplo"
nombre
dni

fecha_nac

Empleados

coste

Pliza

f_nombre

edad

Familiares

CREATE TABLE Fam_Poliza (f_nombre VARCHAR(20),


edad INT,
coste FLOAT,
dni VARCHAR(10) NOT NULL,
PRIMARY KEY (f_nombre, dni),
FOREIGN KEY (dni) REFERENCES Empleados
ON DELETE CASCADE);

GSyC"

104"

Conjuntos de entidades dbiles:


ejemplo"
nombre
dni

fecha_nac

Empleados

coste

Pliza

f_nombre

edad

Familiares

Rails:

GSyC"

105"

Agregaciones"
Ejemplo 1:"
Una tabla para Supervisa, con los atributos clave de
Empleados y Depende, y el descriptivo de
Supervisa
Las dems entidades y la relacin Depende, se
convierten normalmente"

Ejemplo 2: "
Si Depende no tuviese atributo descriptivo y su
participacin en Supervisa fuese total, podemos
eliminar la tabla de Depende, pues toda instancia de
Depende se puede obtener en las columnas pid y
did de Supervisa
GSyC"

106"

Agregaciones: ejemplo 1"


Ejemplo 1: 1 tabla para cada entidad, 1 para
Depende, y esta para Supervisa:
CREATE TABLE Supervisa

(dni VARCHAR(20),
pid INT,
did INT,
hasta DATE,
PRIMARY KEY (dni,
FOREIGN KEY (dni)
FOREIGN KEY (pid)
FOREIGN KEY (did)

pid, did),
REFERENCES Empleados,
REFERENCES Proyectos,
REFERENCES Departamentos);

Supervisa

hasta

comienzo
desde

ppresupuesto

pid

Proyectos

Depende

GSyC"

did

dnombre

dpresupuesto

Departamentos

107"

Agregaciones: ejemplo 2"


Ejemplo 2: 1 tabla para cada entidad, NO hay tabla para
Depende, y esta para Supervisa:
CREATE TABLE Supervisa

(dni VARCHAR(20),
pid INT,
did INT,
hasta DATE,
PRIMARY KEY (dni,
FOREIGN KEY (dni)
FOREIGN KEY (pid)
FOREIGN KEY (did)

pid, did),
REFERENCES Empleados,
REFERENCES Proyectos,
REFERENCES Departamentos);

Supervisa

hasta

comienzo
did

ppresupuesto

pid

Proyectos

Depende

GSyC"

dnombre

dpresupuesto

Departamentos

108"

Ejemplo adicional 1"


Una tabla para Empleados
Las restricciones de clave nos permiten combinar
Comprador con Plizas, y Beneficiario con
Familiares
Las restricciones de participacin nos hacen usar
nombre
f_nombre
edad
NOT NULL"
fecha_nac
dni
Familiares

Empleados
Comprador

Beneficiario

Plizas
GSyC"
GSyC"

poli_id

coste

109"

Ejemplo adicional 1"


CREATE TABLE Plizas (poli_id INT,
coste FLOAT,
dni VARCHAR(10) NOT NULL,
PRIMARY KEY (poli_id),
FOREIGN KEY (dni) REFERENCES Empleados
ON DELETE CASCADE);

CREATE TABLE Familiares (f_nombre VARCHAR(20),


edad INT,
poli_id INT NOT NULL,
PRIMARY KEY (f_nombre, poli_id)
FOREIGN KEY (poli_id) REFERENCES Plizas
ON DELETE CASCADE);

GSyC"

110"

Ejemplo adicional 2"


Supongamos en este otro ejemplo que Pliza es una entidad dbil "
Una tabla para Empleados
Lo dems es parecido pero:"
La clave primaria de Plizas pasa a ser poli_id, dni"
Y por tanto la primaria y la fornea de Familiares tambin incorporan dni "

dni

nombre

f_nombre

fecha_nac

edad

Familiares

Empleados
Comprador

Beneficiario

Plizas
GSyC"

poli_id

coste

111"

Ejemplo adicional 2"


CREATE TABLE Plizas (poli_id INT,
coste FLOAT,
dni VARCHAR(10) NOT NULL,
PRIMARY KEY (poli_id, dni),
FOREIGN KEY (dni) REFERENCES Empleados
ON DELETE CASCADE);

CREATE TABLE Familiares (f_nombre VARCHAR(20),


edad INT,
poli_id INT NOT NULL,
dni VARCHAR(10) NOT NULL,
PRIMARY KEY (f_nombre, poli_id, dni)
FOREIGN KEY (poli_id, dni) REFERENCES Plizas
ON DELETE CASCADE);

GSyC"

112"

Referencias""
Database Management Systems, 3rd edition.
Raghu Ramakrishnan, Johannes Gehrke.
Ed. Mc Graw Hill, 2003. Captulos 1,2,3,5."
Learning SQL. Alan Beaulieu. Ed. OReilly.
2005."
A Guide to Active Record Associations"
http://guides.rubyonrails.org/association_basics.html"

The Rails 3 Way, 2nd ed. Obie Fernndez.


Ed. Addison Wesley 2011. "
GSyC"

113"

Das könnte Ihnen auch gefallen