Beruflich Dokumente
Kultur Dokumente
I. BD Orientadas a Objetos
Tema 1. Bases de Datos Orientadas a Objetos
Tema 2. El modelo de clases de UML
Ejercicios de modelado conceptual OO
Tema 3. El modelo objeto-relacional
Prcticas de BDOR en Oracle
Tema 4. Diseo de BDOR
Ejercicios de diseo de BD (objeto-)relacionales con UML
II. BD Activas
Tema 5. Bases de Datos Activas
Tema 6. Disparadores en Oracle
Prcticas de Disparadores en Oracle
www.kybele.urjc.es
Diseo de BD Objeto-Relacionales
Bibliografa
Tecnologa y Diseo de Bases de Datos. Piattini, M., Marcos, E.,
Calero, C. y Vela, B. Ra-ma, 2006 (cap. 20).
Bases de Datos Objeto Relacionales. Marcos, E., Vela, B. y Vara
J.M. Dickinson, Septiembre 2005.
ndice
1. Etapas de diseo
2. Reglas de transformacin
2.1. Clases
2.2. Interrelaciones
2.3. Generalizaciones
2.4. Agregacin/Composicin
3. Ejemplo
www.kybele.urjc.es
1. Etapas de diseo
Diseo lgico
Diseo conceptual
UML
SQL-92 (BDR)
ODMG (BO)
SQL:2003 (BDOR)
www.kybele.urjc.es
1. Etapas de diseo
Diseo
Conceptual en
notacin
UML
Diseo estndar
SQL:2003/UML
Diseo especfico
BDOR
(Oracle, DB2...)
www.kybele.urjc.es
1. Etapas de diseo
Anlisis
Diseo
Implementacin
UML
UML
Estereotipos SQL
:2003
Estereotipos Producto
UML
Diagrama de Clases
Diseo Fsico
Especificacin
SQL:2003
www.kybele.urjc.es
Especificacin
en Producto
Implementacin
en Producto con
Optimizacin
2. Reglas de transformacin
Atributos
Asociaciones
UML
SQL:2003
Oracle10g
Clase
Multivaluado
Array/Multiset
Varray/Nested Table
Compuesto
ROW/Tipo Estructurado
(Columna)
Calculado
Trigger/Mtodo
Trigger/Mtodo
1a1
Ref/Ref
Ref/Ref
1aN
Ref+ Multiset/Array
NaM
Multiset/Array Multiset/Array
Agregacin
Multiset/Array
Composicin
Multiset/Array
Generalizacin
Types/Typed Tables
Types/Typed Tables
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
SQL:2003
Plano
<<persistent>>
Plano_Id
Fecha_Fin
Num_Figuras
Grafico
<<udt>>
<<persistent>>
Oracle10g
INTEGER,
INTEGER,
BLOB);
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
UML
Atributo
<<PK>>
<<AK>>
<<CA>>
<<MA>>
<<DA>>
Niveles de
visibilidad
<<Mtodo>>
Atributos
SQL:2003
Atributo del tipo
PK en la tabla
UNIQUE en la tabla
Tipo ROW/TO sin extensin
ARRAY/MULTISET
Mtodo / Disparador
---
ORACLE
Atributo del tipo
PK en la tabla
UNIQUE en la tabla
TO sin extensin
VARRAY/NT
Mtodo / Disparador
---
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
SQL:2003
INTEGER,
VARCHAR(30),
VARCHAR(15));
www.kybele.urjc.es
Oracle10g
2. Reglas de transformacin
2.1. Clases
Atributos compuestos
SQL:2003
Linea
<<persistent>>
<<PK>> Linea_Id
<<CA>> Origen
<<CA>> Final
Longitud
Oracle10g
2. Reglas de transformacin
2.1. Clases
Atributos multivaluados
Plano
<<persistent>>
<<PK>> Plano_Id
Fecha_Fin
<<MA>>Arquitectos
Grfico
SQL:2003
Diseo estndar
UML
Plano
<<OT>>
<<PK>> Plano_Id
Fecha_Fin
<<Array>>Arquitectos
Grfico
<<udt>>
<<OT>>
Oracle10g
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
Atributos derivados I
Linea
<<persistent>>
<<PK>> Linea_Id
<<CA>> Origen
<<CA>> Final
<<DA>> Longitud
Diseo estndar
UML
Linea
<<OT>>
<<PK>> Linea_Id
<<CA>> Origen
<<CA>> Final
Longitud
Calc_Longitud
<<udt>>
<<OT>>
SQL:2003
www.kybele.urjc.es
2. Reglas de transformacin
Atributos derivados II
2.1. Clases
Linea
<<persistent>>
<<PK>> Linea_Id
<<CA>> Origen
<<CA>> Final
<<DA>> Longitud
Diseo estndar
UML
Linea
<<OT>>
<<PK>> Linea_Id
<<CA>> Origen
<<CA>> Final
Longitud
Calc_Longitud
<<udt>>
<<OT>>
Oracle10g
END Calc_Longitud;
END
/
CREATE TABLE Linea OF T_Linea
( PRIMARY KEY(Linea_Id));
www.kybele.urjc.es
2. Reglas de transformacin
2.2. Interrelaciones
En OR no es necesario evitar los grupos repetitivos.
Las asociaciones pueden implementarse en uno u otro sentido (o
ambos) independiente de las cardinalidades uso de referencias y
tipos de objetos.
2. Reglas de transformacin
2.2. Interrelaciones
SQL: 2003
1:1
2. Reglas de transformacin
2.2. Interrelaciones
Jefe Proyecto
<<persistent>>
<<PK>> Codigo_Id
<<AK>> Nombre
Telefono
Proyecto
<<persistent>>
1:1
1..1
0..1
<<PK>> Proyecto_Id
<<AK>> Nombre
Fecha_Fin
Diseo estndar
UML
Jefe Proyecto
<<OT>>
<<PK>> Codigo_Id
<<unique>> Nombre
Telefono
<<Ref>> Dirige:{Proyecto}
<<udt>>
<<OT>>
<<Composes>>
<<Composes>>
www.kybele.urjc.es
Proyecto
<<OT>>
<<udt>>
<<OT>>
<<PK>> Proyecto_Id
<<unique>> Nombre
Fecha_Fin
<<NOT NULL>> <<Ref>> Dirigido_Por:{JefeProyecto}
2. Reglas de transformacin
2.2. Interrelaciones
Jefe Proyecto
<<OT>>
<<PK>> Codigo_Id
<<unique>> Nombre
Telfono
<<Ref>> Dirige:{Proyecto}
Proyecto
<<OT>>
<<PK>> Proyecto_Id
<<unique>> Nombre
Fecha_Fin
<<NOT NULL>>
<<Ref>> Dirigido_Por:{JefeProyecto}
<<udt>>
<<udt>>
<<OT>>
<<OT>>
<<Composes>>
<<Composes>>
SQL:2003
www.kybele.urjc.es
2. Reglas de transformacin
2.2. Interrelaciones
Jefe Proyecto
<<OT>>
<<PK>> Codigo_Id
<<unique>> Nombre
Telfono
<<Ref>> Dirige:{Proyecto}
Proyecto
<<OT>>
<<PK>> Proyecto_Id
<<unique>> Nombre
Fecha_Fin
<<NOT NULL>>
<<Ref>> Dirigido_Por:{JefeProyecto}
<<udt>>
<<udt>>
<<OT>>
<<OT>>
<<Composes>>
<<Composes>>
Oracle10g
www.kybele.urjc.es
2. Reglas de transformacin
2.2. Interrelaciones
Figura
<<persistent>>
Plano
<<persistent>>
1..1
<<PK>> Figura_Id
<<AK>> Nombre
Color
1..*
<<PK>> Figura_Id
<<MA>> Arquitectos
<<DA>> Num_Figuras
SQL:2003
Figura
<<OT>>
<<udt>>
<<persistent>>
<<PK>> Figura_Id
<<UNIQUE>> Nombre
Color
<<NOT NULL>><<Ref>>Pertenece_a:{Plano}
<<Composes>>
<<Composes>>
Plano
<<OT>>
<<PK>> Plano_Id
<<ARRAY>> Arquitectos :{5, VARCHAR(20)}
Num_Figuras
<<NOT NULL>><<MULTISET>>Tiene_Fig:{<<Ref>>:{Figura}}
www.kybele.urjc.es
<<udt>>
<<persistent>>
2. Reglas de transformacin
Figura
<<persistent>>
<<udt>>
<<persistent>>
<<PK>> Figura_Id
<<UNIQUE>> Nombre
Color
<<NOT NULL>><<Ref>>Plano_Pert:{Plano}
Perimetro()
Area()
<<Composes>>
<<udt>>
<<persistent>>
<<PK>> Figura_Id
<<array>> Arquitectos: {5, varchar(30)}
<<NOT NULL>><<Array>>Tiene_Fig:{100, <<Ref>>:{Figura}
<<trigger>> Num_Figuras
Oracle10g
2.2. Interrelaciones
NT_Figura
<<NT>>
<<Composes>>
Figura
<<OT>>
Plano
<<persistent>>
<<Composes>>
<<Ref>>:{Figura}
<<Composes>>
<<udt>>
<<OT>>
<<PK>> Figura_Id
<<UNIQUE>> Nombre
Color
<<NOT NULL>><<Ref>>Plano_Pert:{Plano}
Plano
<<OT>>
<<Composes>>
<<udt>>
<<OT>>
<<PK>> Figura_Id
<<varray>> Arquitectos: {5, VARCHAR2(30)}
Tiene_Fig: NT_Figura
<<trigger>> Num_Figuras
www.kybele.urjc.es
2. Reglas de transformacin
2.3. Generalizacin
Figura
<<persistent>>
Figura_Id
Nombre
Color
Perimetro()
Area()
Poligono
<<persistent>>
Numero_Lineas
<<redef>>Area()
SQL:2003
2. Reglas de transformacin
2.3. Generalizacin
Oracle 8i NO soporta herencia por lo que las
generalizaciones se implementan siguiendo el mismo
procedimiento que se utilizaba en relacional, mediante
claves ajenas.
2. Reglas de transformacin
2.3. Generalizacin
Figura
<<persistent>>
Figura_Id
Nombre
Color
Perimetro()
Area()
Poligono
<<persistent>>
Numero_Lineas
<<redef>>Area()
Oracle 10g
RETURNS NUMBER)
2. Reglas de transformacin
2.4. Agregacin
Proyecto
<<persistent>>
Plano
<<persistent>>
1..*
<<PK>> Proyecto_Id
<<AK>> Nombre
<<PK>> Plano_Id
<<MA>> Arquitectos
<<DA>> Num_Figuras
SQL:2003
Proyecto
<<OT>>
<<udt>>
Plano
<<OT>>
<<OT>>
<<PK>> Proyecto_Id
<<UNIQUE>> Nombre
<<MULTISET>>Tiene_Plano:{<<Ref>>:{Plano}}
<<Composes>>
<<udt>>
<<OT>>
<<PK>> Plano_Id
<<array>> Arquitectos:{5,varchar(30)}
<<trigger>> Num_Figuras
2. Reglas de transformacin
2.4. Agregacin
Oracle10g
NT_Planos
<<NT>>
<<Ref>>:{Plano}
<<Composes>>
Proyecto
<<OT>>
<<PK>> Proyecto_Id
<<UNIQUE>> Nombre
Tiene_Plano: NT_Plano
<<Composes>>
Plano
<<OT>>
<<udt>>
<<OT>>
<<udt>>
<<OT>>
<<PK>> Plano_Id
<<varray>> Arquitectos :{5,varchar(30)}
<<trigger>> Num_Figuras
2. Reglas de transformacin
2.5. Composicin
Linea
<<persistent>>
Poligono
<<persistent>>
1..*
Poligono_Id
Num_Lineas
SQL:2003
Poligono
<<persistent>>
Poligono_Id
Num_Lineas
<<MULTISET>>Tiene_Lineas:{Linea}
<<PK>> Linea_Id
Origen
Final
Longitud
Linea
<<udt>>
<<udt>>
<<persistent>>
<<Composes>>
Linea_Id
Origen
Final
Longitud
2. Reglas de transformacin
Oracle 10g
2.5. Composicin
NT_Lineas
<<NT>>
<<Composes>>
Poligono
<<persistent>>
{Linea}
<<Composes>>
Linea
<<udt>>
<<udt>>
<<persistent>>
Num_Lineas
Tiene_Lineas: NT_Lineas
<<PK>> Linea_Id
Origen
Final
Longitud
3. Ejemplo
Diagrama de clases UML
JefeProyecto
<<persistent>>
<<PK>> Cod_JefeProyecto
<<AK>> Nombre
<<CA>> Direccion: {Tipo_Via, Nombre_Via,
Poblacion, CP, Provincia}
Telefono
Proyecto
<<persistent>>
dirige
0..1
<<PK>> Cod_Proyecto
Nombre
1..*
Figura
<<persistent>>
<<PK>> Figura_Id
<<AK>> Nombre
Color
Plano
<<persistent>>
tiene
0..*
1..1
<<PK>> Cod_Plano
Fecha_Entrega
<<MA>> Arquitectos
Dibujo_Plano
<<DA>> Num_Figuras
Linea
<<persistent>>
Poligono
<<persistent>>
<<PK>> Id_Linea
<<DA>> Longitud
<<MA>><<CA>> Puntos: {Coord_X, CoordY}
Num_Lineas
1..*
www.kybele.urjc.es
3. Ejemplo
Modelo Lgico Estndar: SQL:2003
Tipo_Direccion
<<udt>>
Tipo_Via
Nombre_Via
Poblacion
CP
Provincia
JefeProyecto
<<persistent>>
<<Composes>>
Proyecto
<<persistent>>
<<udt>>
<<persistent>>
<<PK>> Cod_JefeProyecto
<<UNIQUE>> Nombre
Direccion: Tipo_Direccion
Telefono
<<Ref>> Dirige: {Proyecto}
<<Composes>>
<<Composes>>
<<udt>>
<<persistent>>
<<PK>> Cod_Proyecto
Nombre
<<NOT NULL>> <<Ref>> Dirigido_Por: {JefeProyecto}
<<Multiset>>Tiene_Planos: {<<Ref>> Plano}
<<Composes>>
Figura
<<persistent>>
<<Composes>>
<<PK>> Cod_Figura
Nombre
Color
<<NOT NULL>><<Ref>>Plano_Pert: {Plano}
<<Trigger>>ActualizarNumFiguras
Poligono
<<persistent>>
Num_Lineas
<<Multiset>>Tiene_Lineas: {Linea}
Plano
<<persistent>>
<<udt>>
<<persistent>>
<<PK>> Cod_Plano
Fecha_Entrega
<<Array>> Arquitectos: {10, VARCHAR(15)}
Dibujo_Plano
Num_Figuras
<<Multiset>>Tiene_Fig: {<<Ref>> Figura}
<<Composes>>
Linea
<<persistent>>
<<udt>>
<<persistent>>
<<Composes>>
<<udt>>
<<persistent>>
<<PK>> Id_Linea
<<Array>>Tiene_Puntos: {2, Punto}
<<Composes>>
Punto
<<udt>>
Coord_X
Coord_Y
Longitud()
www.kybele.urjc.es
3. Ejemplo
Modelo Lgico Especfico: Oracle 10g
JefeProyecto
<<OT>>
Tipo_Direccion
<<udt>>
Tipo_Via
Nombre_Via
Poblacion
CP
Provincia
<<udt>>
<<persistent>>
<<Composes>>
<<PK>> Cod_JefeProyecto
<<UNIQUE>> Nombre
Direccion: Tipo_Direccion
Telefono
<<Ref>> Dirige:{Proyecto}
<<Composes>>
Proyecto
<<OT>>
<<udt>>
<<persistent>>
<<Composes>>
<<PK>> Cod_Proyecto
1..*
Nombre
<<NOT NULL>><<Ref>> Dirigido_Por: {JefeProyecto}
Tiene_Planos: NT_Planos
<<Composes>>
Tipo_Nombres
<<VARRAY>>
<<udt>>
<<persistent>>
NT_Planos
<<NT>>
VARCHAR2(15) [10]
<<PK>> Cod_Figura
Nombre
Color
<<NOT NULL>> <<Ref>>Plano_Pert: {Plano}
<<Ref>> {Plano}
<<Composes>>
NT_Figuras
<<NT>>
<<Trigger>>ActualizarNumFiguras
<<Composes>>
<<Ref>> {Figura}
<<Composes>>
<<udt>>
<<persistent>>
Num_Lineas
Tiene_Lineas: NT_Lineas
<<NOT NULL>> <<Ref>> Es_Figura:{Figura}
Linea
<<udt>>
NT_Lineas
<<NT>>
Linea
<<udt>>
<<persistent>>
Id_Linea
Tiene_Puntos: Tipo_Puntos
Longitud()
<<Composes>>
Plano
<<OT>>
<<PK>> Cod_Plano
Fecha_Entrega
Arquitectos: Tipo_Nombres
Dibujo_Plano
Num_Figuras
Tiene_Fig:NT_Figuras
<<Composes>>
Poligono
<<OT>>
<<Composes>>
<<Composes>>
Tipo_Puntos
<<VARRAY>>
<<Composes>>
<<Composes>>
www.kybele.urjc.es
Punto [2]
<<Composes>>
Figura
<<OT>>
Punto
<<udt>>
Coord_X
Coord_Y
Base de Datos @KYBELE
3. Ejemplo
Diagrama de clases UML
Profesor
<<persistent>>
<<PK>> Profesor_ID
Nombre
<<CA>> Direccin
E-Mail
Aula
<<persistent>>
ReservarAula
reserva
reservado_por
0..1
<<PK>> Aula_ID
Edificio
Campus
Estado
ReservarAula()
Tiene
0..*
Estudiante
<<persistent>>
<<PK>> Estudiante_ID
Nombre
<<CA>> Direccin
E-Mail
Ordenador
<<persistent>>
ReservarOrdenador
*
reserva
reservado_por
<<PK>> Ordenador_ID
Estado
ReservarOrdenador()
www.kybele.urjc.es