Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.
SQL: 2003 has been published. A. Eisenberg, J. Melton, K. Kulkarni, J. Michels, F. Zemke. ACM SIGMOD Record Volume 33 , Issue 1 (Marzo 2004). SQL:1999, formely known as SQL3. A. Eisemberg and J. Melton. SIGMOD Record, Vol. 28, No. 1, Marzo 1999, pp. 131-138.
SQL: 1999. Understanding object-relational and other advances features. Jim Melton Morgan Kauffman, 2002. SQL99, SQL/MM, and SQLJ: An Overview of the SQL Standards. Nelson M. Mattos. IBM Database Common Technology, 1999.
www.kybele.urjc.es Base de Datos @KYBELE
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
www.kybele.urjc.es
1. Etapas de diseo
www.kybele.urjc.es
1. Etapas de diseo
Anlisis
Diseo
Diseo Lgico Estndar
Implementacin
Diseo Lgico Especfico
UML
+
UML
+
:2003
Estereotipos Producto
Diseo Fsico
Especificacin SQL:2003
Especificacin en Producto
www.kybele.urjc.es
2. Reglas de transformacin
UML
Clase Multivaluado Atributos Compuesto Calculado 1a1 1aN Asociaciones
SQL:2003
Tipo Estructurado + Tabla Tipada Array/Multiset ROW/Tipo Estructurado (Columna) Trigger/Mtodo Ref/Ref Ref+ Multiset/Array
Oracle10g
Tipo de Objeto + Tabla de Objeto Varray/Nested Table Tipo de Objeto (Columna) Trigger/Mtodo Ref/Ref Ref+ Nested Table/Varray
NaM
Agregacin Composicin Generalizacin
Multiset/Array Multiset/Array
Multiset/Array Multiset/Array Types/Typed Tables
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
SQL:2003
Oracle10g
CREATE TYPE Plano AS OBJECT ( Plano_Id NUMBER, Fecha_Fin DATE, Num_Figuras NUMBER, Grafico BFILE) / CREATE TABLE Tabla_Plano OF Plano;
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
SQL:2003
Oracle10g
CREATE TYPE Figura AS OBJECT ( Figura_Id INTEGER, Nombre VARCHAR2(30), Color VARCHAR2(15)) / CREATE TABLE Tabla_Figura OF Figura (PRIMARY KEY (Figura_Id), UNIQUE (Nombre));
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
Oracle10g
CREATE TYPE T_Coordenada AS OBJECT ( EjeX NUMBER, Tipo de Objeto EjeY NUMBER) / CREATE TYPE Linea AS OBJECT ( Linea_Id NUMBER, Origen T_Coordenada, Destino T_Coordenada, Longitud Number) / CREATE TABLE Tabla_Linea OF Linea ( PRIMARY KEY(Linea_Id));
www.kybele.urjc.es Base de Datos @KYBELE
Atributos multivaluados
CREATE TYPE Plano AS ( Plano_Id INTEGER, Fecha_Fin DATE, Arquitectos VARCHAR(30) ARRAY[5], Grfico BLOB); CREATE TABLE Tabla_Plano OF Plano (...);
SQL:2003
<<udt>> <<OT>>
Oracle10g
CREATE TYPE Tipo_Nombre AS VARRAY(5) OF VARCHAR2(30) / CREATE TYPE Plano AS OBJECT ( Plano_Id NUMBER, Fecha_Fin DATE, Arquitectos Tipo_Nombre, Grfico BFILE) / CREATE TABLE Tabla_Plano OF Plano;
www.kybele.urjc.es
2. Reglas de transformacin
2.1. Clases
Linea <<persistent>> <<PK>> Linea_Id <<CA>> Origen <<CA>> Final <<DA>> Longitud
Atributos derivados I
Linea <<OT>> <<PK>> Linea_Id <<CA>> Origen <<CA>> Final Longitud Calc_Longitud
<<udt>> <<OT>>
SQL:2003
CREATE TYPE Linea AS ( Linea_Id INTEGER, Origen ROW (EjeX INTEGER,EjeY INTEGER), Destino ROW (EjeX INTEGER,EjeY INTEGER), Longitud INTEGER, METHOD Calc_Longitud RETURNS INTEGER); CREATE METHOD Calc_Longitud FOR Linea BEGIN ..... END;
www.kybele.urjc.es
Atributos derivados II
CREATE TYPE T_Coordenada AS OBJECT ( EjeX NUMBER, EjeY NUMBER) / CREATE TYPE T_Linea AS OBJECT ( Linea_Id NUMBER, Origen T_Coordenada, Destino T_Coordenada, Longitud INTEGER, MEMBER FUNCTION Calc_Longitud RETURN NUMBER) / CREATE OR REPLACE TYPE BODY T_Linea IS MEMBER FUNCTION Calc_Longitud RETURN NUMBER IS BEGIN END Calc_Longitud; END / CREATE TABLE Linea OF T_Linea ( PRIMARY KEY(Linea_Id));
www.kybele.urjc.es Base de Datos @KYBELE
Linea <<OT>> <<PK>> Linea_Id <<CA>> Origen <<CA>> Final Longitud Calc_Longitud
<<udt>> <<OT>>
Oracle10g
REF en cada tipo de objeto que participa en la relacin. Cardinalidad mnima 1 NOT NULL 1:N REF en el tipo de objeto de cardinalidad N + ARRAY/ MULTISET de REF en el tipo de objeto de cardinalidad 1. Cardinalidad mnima 1 NOT NULL N:M ARRAY/MULTISET de REF en cada tipo de objeto implicado en la relacin ORACLE10g 1:1 REF en cada tipo de objeto que participa en la relacin. Cardinalidad mnima 1 NOT NULL 1:N REF en el tipo de objeto de cardinalidad N + VARRAY /NESTED TABLE de REF en el tipo de objeto de cardinalidad 1. Cardinalidad mnima 1 NOT NULL N:M VARRAY/NESTED TABLE de REF en cada tipo de objeto implicado en la relacin
www.kybele.urjc.es Base de Datos @KYBELE
2. Reglas de transformacin
2.2. Interrelaciones
Jefe Proyecto <<persistent>> <<PK>> Codigo_Id <<AK>> Nombre Telefono
1:1
1..1 0..1
<<udt>> <<OT>>
<<udt>> <<OT>>
<<Composes>>
<<Composes>>
www.kybele.urjc.es
<<Composes>>
<<Composes>>
Proyecto <<OT>> <<PK>> Proyecto_Id <<unique>> Nombre Fecha_Fin <<NOT NULL>> <<Ref>> Dirigido_Por:{JefeProyecto}
<<OT>>
<<udt>>
SQL:2003
CREATE TYPE Jefe_Proyecto AS (Codigo_Id NUMBER, Nombre VARCHAR (30), Telefono NUMBER, Dirige REF Proyecto); CREATE TABLE T_Jefe_Proyecto OF Jefe_Proyecto (Codigo_id PRIMARY KEY, Nombre UNIQUE);
CREATE TYPE Proyecto AS ( Proyecto_Id NUMBER, Nombre VARCHAR (30), Fecha_Fin DATE, Dirigido_Por REF Jefe_Proyecto); CREATE TABLE T_Proyecto OF Proyecto (Proyecto_ID PRIMARY KEY, Nombre UNIQUE, Dirigido_Por NOT NULL);
www.kybele.urjc.es
<<Composes>>
<<Composes>>
Proyecto <<OT>> <<PK>> Proyecto_Id <<unique>> Nombre Fecha_Fin <<NOT NULL>> <<Ref>> Dirigido_Por:{JefeProyecto}
<<OT>>
<<udt>>
Oracle10g
CREATE OR REPLACE TYPE Jefe_Proyecto AS OBJECT (Codigo_Id NUMBER, Nombre VARCHAR2(30), Telefono NUMBER, Dirige REF Proyecto) / CREATE TABLE T_Jefe_Proyecto OF Jefe_Proyecto (Codigo_id PRIMARY KEY, Nombre UNIQUE);
CREATE OR REPLACE TYPE Proyecto AS OBJECT ( Proyecto_Id NUMBER, Nombre VARCHAR2(30), Fecha_Fin Date, Dirigido_Por REF Jefe_Proyecto) / CREATE TABLE T_Proyecto OF Proyecto (Proyecto_ID PRIMARY KEY, Nombre UNIQUE, Dirigido_Por NOT NULL);
www.kybele.urjc.es
Plano <<persistent>>
<<PK>> Figura_Id <<MA>> Arquitectos <<DA>> Num_Figuras
SQL:2003
Figura <<OT>>
<<udt>> <<persistent>>
<<Composes>>
Plano <<OT>>
<<udt>> <<persistent>>
<<Composes>>
CREATE TYPE Figura AS ( Figura_Id INTEGER, Nombre VARCHAR(30), Color VARCHAR(10), Plano_Pert REF (Plano)); CREATE TABLE Tabla_Figura OF Figura (Figura_id PRIMARY KEY, Nombre UNIQUE, Plano_Pert NOT NULL);
CREATE TYPE Plano AS ( Plano_Id INTEGER, Arquitectos VARCHAR(30) ARRAY[5], Num_Figuras INTEGER, Tiene_Fig REF(Figura) MULTISET); CREATE TABLE Tabla_Plano OF Plano (Plano_id PRIMARY KEY, Tiene_Fig NOT NULL);
www.kybele.urjc.es
2. Reglas de transformacin
Figura <<persistent>>
<<udt>> <<persistent>>
<<Composes>>
Plano <<persistent>>
<<udt>> <<persistent>>
<<Composes>>
<<PK>> Figura_Id <<array>> Arquitectos: {5, varchar(30)} <<NOT NULL>><<Array>>Tiene_Fig:{100, <<Ref>>:{Figura} <<trigger>> Num_Figuras
Oracle10g
NT_Figura <<NT>> <<Ref>>:{Figura}
2.2. Interrelaciones
<<Composes>>
<<Composes>>
<<udt>> <<OT>>
Plano <<OT>> <<PK>> Figura_Id <<varray>> Arquitectos: {5, VARCHAR2(30)} Tiene_Fig: NT_Figura <<trigger>> Num_Figuras
<<udt>> <<OT>>
<<Composes>>
CREATE OR REPLACE TYPE Figura AS OBJECT (Figura_Id NUMBER, Nombre VARCHAR2(30), Color VARCHAR2(10), Plano_Pert REF Plano) / CREATE TYPE NT_Figura AS TABLE OF REF Figura / CREATE TABLE T_Figura OF Figura{....};
www.kybele.urjc.es
CREATE OR REPLACE TYPE Plano AS OBJECT ( Plano_Id NUMBER, Num_Figuras NUMBER, Arquitectos Tipo_Nombres, Tiene_Fig NT_Figura) / CREATE TABLE T_Plano OF Plano nested table Tiene_Fig store AS T_Lista_Figura;
2. Reglas de transformacin
Figura <<persistent>> Figura_Id Nombre Color Perimetro() Area()
2.3. Generalizacin
SQL:2003
CREATE TYPE Figura AS (Figura_Id INTEGER, Nombre VARCHAR(30), Color VARCHAR(10) INSTANTIABLE NOT FINAL METHOD Perimetro() RETURNS INTEGER, METHOD Area() RETURNS INTEGER); CREATE TABLE Tabla_Figura OF Figura;
CREATE TYPE Poligono UNDER Figura AS (Numero_Lineas INTEGER INSTANTIABLE FINAL OVERRIDING METHOD Area() RETURNS INTEGER);
CREATE TABLE Tabla_Poligono OF Poligono UNDER Tabla_Figura;
www.kybele.urjc.es Base de Datos @KYBELE
Oracle 9i y 10g S soportan herencia, pero solo de tipos. No soporta herencia de tablas. No se propagan las restricciones definidas sobre las tablas (Primary Keys, Forgein Keys ) Las filas insertadas correspondiente al subtipo no pertenencen automticamente a las tablas del supertipo.
www.kybele.urjc.es Base de Datos @KYBELE
2. Reglas de transformacin
Figura <<persistent>> Figura_Id Nombre Color Perimetro() Area()
2.3. Generalizacin
Oracle 10g
CREATE OR REPLACE TYPE Figura AS ( Figura_Id NUMBER, Nombre VARCHAR2(30), Color VARCHAR2(10), MEMBER FUNCTION Perimetro() RETURNS NUMBER, MEMBER FUNCTION Area() RETURNS NUMBER) INSTANTIABLE NOT FINAL / CREATE TABLE T_Figura OF Figura; CREATE TYPE Poligono UNDER Figura CREATE TYPE Tipo_Figura AS AS ( Num_Lineas NUMBER, TABLE OF Ref Figura; INSTANTIABLE FINAL OVERRIDING MEMBER FUNCTION Area() / CREATE TABLE Tabla_Poligono OF Poligono;
www.kybele.urjc.es
RETURNS NUMBER)
SQL:2003
Proyecto <<OT>>
<<udt>> <<OT>>
<<udt>> <<OT>>
CREATE TYPE Proyecto AS ( Proyecto_Id INTEGER, Nombre VARCHAR(30), Tiene_Plano REF(Plano) MULTISET); CREATE TABLE Tabla_Proyecto OF Proyecto (PRIMARY KEY (Proyecto_Id) UNIQUE nombre);
www.kybele.urjc.es Base de Datos @KYBELE
2. Reglas de transformacin
Oracle10g
<<Composes>>
2.4. Agregacin
NT_Planos <<NT>> <<Ref>>:{Plano} <<Composes>> Plano <<OT>>
<<udt>> <<OT>>
<<udt>> <<OT>>
CREATE TYPE Plano AS OBJECT (Plano_ID NUMBER, Fecha_Fin DATE, Num_Figuras NUMBER, Arquitectos Tipo_Nombre) / CREATE TABLE T_Plano OF Plano (PRIMARY KEY (Plano_Id)); CREATE OR REPLACE TYPE NT_Planos AS TABLE OF REF Plano /
www.kybele.urjc.es
CREATE TYPE Proyecto AS OBJECT ( Proyecto_Id NUMBER, Nombre VARCHAR2(30), Tiene_Plano NT_Planos) / CREATE TABLE T_Proyecto OF Proyecto (PRIMARY KEY (Proyecto_ID), UNIQUE (Nombre)) NESTED TABLE Tiene_Plano STORE AS Tabla_Planos;
2. Reglas de transformacin
2.5. Composicin
Poligono <<persistent>> 1..* Poligono_Id Num_Lineas Linea <<persistent>> <<PK>> Linea_Id Origen Final Longitud
SQL:2003
<<udt>> <<persistent>>
CREATE TYPE Linea AS (Linea_ID NUMBER, ); CREATE TYPE Poligono AS ( Poligono_ID NUMBER, Num_Lineas INTEGER, Tiene_Lineas Linea MULTISET) );
CREATE TABLE Tabla_Poligono OF Poligono();
www.kybele.urjc.es Base de Datos @KYBELE
2.5. Composicin
<<udt>> <<persistent>>
CREATE TYPE Linea AS OBJECT (Linea_ID NUMBER, ) / CREATE OR REPLACE TYPE NT_Lineas AS TABLE OF Linea / CREATE TYPE Poligono AS OBJECT (Poligono_Id NUMBER, Numero_Lineas NUMBER, Tiene_Lineas NT_Lineas) / CREATE TABLE T_Poligono OF Poligono (PRIMARY KEY (Poligono_ID)) NESTED TABLE Tiene_Lineas STORE AS Tabla_Lineas;
www.kybele.urjc.es Base de Datos @KYBELE
1..* Figura <<persistent>> <<PK>> Figura_Id <<AK>> Nombre Color tiene 0..* 1..1 Plano <<persistent>> <<PK>> Cod_Plano Fecha_Entrega <<MA>> Arquitectos Dibujo_Plano <<DA>> Num_Figuras
Linea <<persistent>> <<PK>> Id_Linea <<DA>> Longitud <<MA>><<CA>> Puntos: {Coord_X, CoordY}
www.kybele.urjc.es
3. Ejemplo
Modelo Lgico Estndar: SQL:2003
JefeProyecto <<persistent>> <<PK>> Cod_JefeProyecto <<UNIQUE>> Nombre Direccion: Tipo_Direccion Telefono <<Ref>> Dirige: {Proyecto}
<<udt>> <<persistent>>
<<Composes>>
Proyecto <<persistent>>
<<udt>> <<persistent>>
<<Composes>>
<<PK>> Cod_Proyecto Nombre <<NOT NULL>> <<Ref>> Dirigido_Por: {JefeProyecto} <<Multiset>>Tiene_Planos: {<<Ref>> Plano}
<<Composes>>
Figura <<persistent>>
<<PK>> Cod_Figura Nombre Color <<NOT NULL>><<Ref>>Plano_Pert: {Plano} <<Trigger>>ActualizarNumFiguras
<<udt>> <<persistent>>
Plano <<persistent>> <<Composes>> <<Composes>> <<PK>> Cod_Plano Fecha_Entrega <<Array>> Arquitectos: {10, VARCHAR(15)} Dibujo_Plano Num_Figuras <<Multiset>>Tiene_Fig: {<<Ref>> Figura}
<<udt>> <<persistent>>
<<udt>> <<persistent>>
<<Composes>>
www.kybele.urjc.es
Proyecto <<OT>> <<Composes>> <<Composes>> <<PK>> Cod_Proyecto 1..* Nombre <<NOT NULL>><<Ref>> Dirigido_Por: {JefeProyecto} Tiene_Planos: NT_Planos
<<udt>> <<persistent>>
<<Composes>> Figura <<OT>> <<PK>> Cod_Figura Nombre Color <<NOT NULL>> <<Ref>>Plano_Pert: {Plano} <<Trigger>>ActualizarNumFiguras
<<udt>> <<persistent>>
NT_Figuras <<NT>>
<<Ref>> {Figura} <<Composes>>
<<Composes>>
Linea <<udt>>
Id_Linea Tiene_Puntos: Tipo_Puntos Longitud()
<<Composes>>
<<Composes>>
<<Composes>> <<Composes>>
www.kybele.urjc.es
Tiene
0..*
Estudiante <<persistent>> <<PK>> Estudiante_ID Nombre <<CA>> Direccin E-Mail ReservarOrdenador() reserva * reservado_por ReservarOrdenador * Ordenador <<persistent>> <<PK>> Ordenador_ID Estado
www.kybele.urjc.es