Generador Del Modelo Relacional y Esquemas de Bases de Datos
Generador Del Modelo Relacional y Esquemas de Bases de Datos
Generador Del Modelo Relacional y Esquemas de Bases de Datos
net/publication/31510706
CITATIONS READS
0 1,042
3 authors, including:
SEE PROFILE
All content following this page was uploaded by Felipe Pablo Álvarez Arrieta on 04 June 2014.
Proyecto de Sistemas
Informáticos
2
ÍNDICE
ABSTRACT ........................................................................4
PALABRAS CLAVE PARA BÚSQUEDA BIBLIOGRÁFICA.......4
1. OBJETIVOS...................................................................5
2. CONOCIMIENTOS PREVIOS ..........................................7
2.1 ¿Para qué sirven las bases de datos? ........................................... 7
2.2 ¿Qué es un diagrama entidad-relación?...................................... 7
2.3 ¿En qué consiste el modelo relacional?................................... 8
3. DISEÑO E IMPLEMENTACIÓN .......................................9
3.1 Patrones de Diseño utilizados ........................................................... 9
3.2 Ejemplo del modelo de implementación ................................... 13
3.3 Capa Lógica................................................................................................. 18
3.4 Diccionario de Datos ............................................................................. 21
3.5 Capa de Presentación ........................................................................... 23
3.5.1 Diseño de las Interfaces Gráficas ......................................... 24
3.5.2 Estructura de paquetes de las interfaces gráficas ..... 40
3.5.3 Programación de las interfaces gráficas. ......................... 41
3.6 Capa de Acceso a Datos. ..................................................................... 52
3.6.1 Estructura de paquetes de la capa de datos .................. 54
3.7 Diagramas de Clases ............................................................................. 56
3.7.1 Capa de Presentación................................................................... 56
3.7.2 Capa Lógica ........................................................................................ 57
3.7.3 Capa de Acceso a datos............................................................... 60
3.8 Optimizaciones en el Modelo Relacional ................................... 61
4. RESULTADOS OBTENIDOS ..........................................64
5. POSIBLES EXTENSIONES............................................78
6. BIBLIOGRAFÍA ...........................................................79
3
ABSTRACT
Once you get it, you have to think about the use you are going to
give to your database (e.g. which relationships will be the most looked up?
Which entities will have more information?) so that the relational model
diagram could be as suitable and efficient as possible.
Finally, all this information will be capture through the SQL language,
which allows you to access to the database.
4
1. OBJETIVOS
5
• Cada vez que realice consultas respecto a esta relación le
interesará sólo la información referenciada por los atributos claves
de las entidades que relaciona.
6
2. CONOCIMIENTOS PREVIOS
• Cardinalidad
o R es uno a uno cuando a cada instancia de A le corresponde
una y solo una instancia de B.
7
o R es uno a muchos cuando a cada instancia de A le pueden
corresponder varias instancias de B, pero cada instancia de B
sólo se relaciona con una única instancia de A.
o R es muchos a muchos cuando a cada instancia de A le
pueden corresponder varias instancias de B y asimismo a cada
instancia de B le pueden corresponder varias instancias de A.
• Participación
o R es total en A si para cada instancia de A existe siempre una
instancia de B relacionada mediante R
o En caso contrario, R es parcial en A.
Una tabla es una estructura lógica que sirve para almacenar los datos
de un mismo tipo (desde el punto de vista conceptual). Almacenar los datos
de un mismo tipo no significa que se almacenen sólo datos numéricos, o
sólo datos alfanuméricos. Desde el punto de vista conceptual esto significa
que cada entidad se almacena en estructuras separadas. Así, cada entidad,
tendrá una estructura (tabla) pensada y diseñada para ese tipo de entidad.
Cada elemento almacenado dentro de la tabla recibe el nombre de registro,
tupla o fila.
8
3. DISEÑO E IMPLEMENTACIÓN
Modelo-Vista-Controlador.
Tipos:
a) Modelo activo:
El modelo es el que actualiza la capa de vista.
Controlador
+ genera eventos
+accede +actualiza
Vista Modelo
9
b) Modelo pasivo: (El usado por nosotros en este proyecto).
Es el controlador el que actualiza la vista.
Controlador
+ genera eventos
+accede
Vista Modelo
10
o Se pueden realizar cambios en las interfaces sin tener que
modificar la lógica, y viceversa.
11
Fachada
Define una interfaz de alto nivel para que el subsistema de diseño sea más
fácil de utilizar.
Ventajas:
Estos son los motivos por los que en este proyecto, para acceder desde el
controlador al modelo hemos utilizado una Fachada.
12
Clases del subsistema:
Datos
Ventajas:
o Se puede modificar cualquier capa sin afectar a las demás.
o Facilita la división y organización o reparto del trabajo entre
los miembros del equipo.
o Reduce la comunicación necesaria entre los integrantes del
equipo.
Inconvenientes:
• Mayor complejidad arquitectónica.
Interfaz:
13
Al pulsar el botón Aceptar se lanza un evento, que es capturado por
su ActionListener:
boton_aceptar.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
boolean hay_nombre = nombre_cumplimentado();
if (hay_nombre)
{
Gui_Principal.id_esquema = dame_id_diagrama(Gui_Principal.ListaEsquemas);
Controlador.getInstance().accion(EventoNegocio.DIAGRAMA_ABIERTO, taux);
setVisible(false);
}else{
JOptionPane.showMessageDialog(null,
"Debe introducir nombre del Diagrama: campo obligatorio",
"Error de entrada",
JOptionPane.ERROR_MESSAGE);
}//--- fin hay_nombre
}
});//--- boton_aceptar.addActionListener
Desde la interfaz:
14
Controlador:
switch (evento)
{
case EventoNegocio.DIAGRAMA_ABIERTO:
if (fachada.validarPassword(esquema))
gui.actualizar(EventoGUI.DIAGRAMA_ABIERTO,
esquema.getNombreEsquema());
else
gui.actualizar(EventoGUI.ERROR_LOGIN,
esquema.getNombreEsquema());
break;
gui.actualizar(EventoGUI.DIAGRAMA_ABIERTO,esquema.getNombreEsquema());
gui.actualizar(EventoGUI.ERROR_LOGIN,esquema.getNombreEsquema());
15
Interfaz Principal:
16
Si el evento que se recibe es EventoGUI.ERROR_LOGIN, se
obtiene el nombre del esquema de los datos recibidos:
17
3.3 Capa Lógica
18
TEsquema: En ellos guardaremos los datos necesarios que ha de
introducir el usuario cuando quiere crear un esquema entidad –
relación nuevo. Lo cual incluye el nombre del esquema, el usuario y
la contraseña para acceder ha dicho esquema y un identificador.
19
creada; en este caso, también existirá una objeto de este tipo para
ella indicando en el campo pertinente dicho hecho.
20
3.4 Diccionario de Datos
EntidadRelación(códigoRelación,códigoEntidad,participación,
cardinalidad).
Refleja las relaciones entre entidades, para ello cada entidad se
relaciona con la entidad que la une con la otra por separado.
RelaciónEsUn (código, códEntMadre, códEntHija, códigoEsquema).
Guarda las relaciones es un de los distintos esquemas, indicando
quienes son las entidades hijas y quienes las madres.
Esquema (nombre, códigoEsquema).
Nos indican los distintos esquemas E/R plasmados en el diccionario
de datos.
21
Donde:
22
3.5 Capa de Presentación
23
3.5.1 Diseño de las Interfaces Gráficas
Para realizar dicho boceto, nos hemos reunido los integrantes del
equipo, y entre todos hemos revisado, que datos de entrada, datos de
salida, funcionalidades… debía tener cada interfaz.
Por ejemplo: En el caso de la interfaz gráfica de “Abrir diagrama”
acordamos que la interfaz debería tener 3 campos (diagrama, usuario y
password), que en el campo diagrama se deberían mostrar todos los
diagramas existentes, permitiéndole al usuario seleccionar un diagrama.
Una vez seleccionado el diagrama, introducido su usuario y su password, al
pulsar sobre el botón de aceptar, el sistema debería abrir el diagrama, y
mostrar un mensaje al usuario informándole de si el diagrama ha sido
abierto, ó en el caso de que no se halla podido abrir, un mensaje indicando
las causas del error.
24
1.1) Interfaz Principal:
D)Mensaje de Operaciones:
Aquí aparecerán mensajes explicativos con el resultado de las operaciones.
Ejemplo:
“Entidad creada correctamente”
25
A) Barra de Menú de Operaciones:
Tanto el menú, como todas sus opciones tienen teclas de acceso para
mejorar su accesibilidad y usabilidad.
A.1) Archivo.
A.1.1) Nuevo Diagrama. Permite al usuario crear un
nuevo diagrama.
A.2) Opciones.
A.2.1) Conexiones BD. Permite la configuración de la
conexión a la base de datos.
A.2.2) Generar Tablas. Permite la generación del Modelo
Relacional.
A.2.3) Generar SQL. Permite la generación del código SQL.
26
A.3) Diseño.
A.3.1) Entidad. Dar de alta entidades.
A.3.2) Relación. Dar de alta relaciones.
A.3.3) Consultas. Funcionalidad disponible en la próxima
versión.
A.4) Salir.
Cerrar Salir de la aplicación.
27
C) Zona de Consultas:
D) Mensaje de Operaciones:
Por ejemplo:
28
Si la hora de querer abrir un diagrama existente, la operación no se
puede realizar, se le muestra un mensaje explicativo en rojo, sobre la causa
se dicho fallo.
29
1.1) Interfaz Nuevo Diagrama:
30
Al pulsar en aceptar si el usuario y la contraseña coinciden con el del
diagrama seleccionado, este pasará a ser el diagrama utilizado por la
aplicación.
31
1.4) Interfaz Alta Entidad:
Nombre de la Entidad:
Descripción de la Entidad:
Visualizador de los atributos de la entidad:
Muestra los atributos que tiene la entidad, su tipo, si es clave o no, y sus
restricciones.
Editor de Atributos:
32
El campo Nombre de la entidad es obligatorio, hasta que no se rellene
no se podrá dar de alta una Entidad, si se pulsa aceptar y no hay
nombre definido aparecerá este mensaje:
33
Si pulsamos el botón “Limpiar campos” se limpian todos los
valores del editor de atributos.
Para poder dar de alta una entidad se deberá haber definido al menos
un atributo como clave. Si no se ha definido ningún atributo como
clave se le muestra al usuario este mensaje.
34
Versión 0 Editor Entidad Versión 0 editor atributos
Nombre(*):
Descripción:
Tipo:
- Binaria Tabla Atributos
- Ternaria de la Relación
- Es un
Entidades Participaciones Cardinalidades
(Total, Parcial) (1,N,1..N,N..M)
Entidad 1 Participación1 Cardinalidad 1
Entidad 2 Participación 2 Cardinalidad 2 Editor de
Entidad 3 Participación 3 Cardinalidad 3 Atributos
35
El usuario puede introducir el nombre de la relación, y su descripción
en sus respectivos campos.
36
1.5.2) Relación Binaria:
37
1.5.3) Relación Ternaria:
38
En función del tipo de consultas que quiera realizar el usuario sobre
esta relación, y en función también del tamaño de las entidades se
aplicara un tipo de optimización diferente.
39
3.5.2 Estructura de paquetes de las interfaces gráficas
principal Principal.java.
presentacion
EventoGui.java
Gui_Principal.java
IGui.java
presentacion.archivo:
GuiAltaDiagrama.java
GuiAbrirDiagrama.java
presentacion.entidades
Gui_Alta_Entidad_v3.java.
ModeloTablaAtributos.java
ModeloTablaEntidades.java
presentacion.imagenes
Imágenes utilizadas en la aplicación.
presentacion.opciones
Gui_conexiones_BD.java
presentacion.relaciones
Gui_Alta_relaciones_v2.java.
Gui_optimizar_v1.java
ModeloTablaAtributos.java
ModeloTablaRelaciones.java
40
3.5.3 Programación de las interfaces gráficas.
presentacion
Gui_Principal.java
jm_nuevo_Diagrama.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Gui_Alta_Diagrama gui00 = new Gui_Alta_Diagrama();
gui00.setVisible(true);
}
});//----------- fin addActionListener
41
Para rellenar los combobox hemos creado funciones que los
rellenan a partir de un ArrayList de TEntidades ó TRelaciones
respectivamente.
public ModeloTablaEntidades()
// Accion: Define la tabla de Entidades
42
public void setComboBox_entidades(JComboBox combo,
ArrayList<TEntidad> lista)
…
presentacion.archivo:
GuiAltaDiagrama.java
43
Si hay nombre, extrae los valores de los campos utilizando sus
accedentes correspondientes, crea un transfer de TEsquema con
esos valores, y lanza el evento ALTA_DIAGRAMA al
controlador pasándole el transfer de TEsquema creado. Si no
hay nombre, se lanza un mensaje al usuario explicándole que el
campo nombre es obligatorio.
//--- Funciones
public boolean nombre_cumplimentado() …
//--- Accedentes
public String getCampoNombre() …
public String getCampoUsuario() …
public String getCampoPassword() …
//--- Mutadores
public void setCampoNombre(String s) …
public void setCampoUsuario(String s) …
public void setCampoPassword(String s) …
GuiAbrirDiagrama.java
44
dame_nombre_diagrama() que nos devuelve el ítem
seleccionado en dicho combobox.
setComboBox(comboBox_diagramas,Gui_Principal.ListaEsquemas);
presentacion.entidades
Gui_Alta_Entidad_v3.java.
En la parte superior hemos situado campos de edición para
introducir el nombre de la entidad y su descripción.
…
}
En el panel donde está la tabla de atributo también hemos
situado dos botones:
• “Eliminar Atributo” al pulsarlo su ActionListener elimina
el atributo seleccionado de la tabla
45
• “Añadir Atributo” al pulsarlo su ActionListener muestra
el editor de atributos.
Controlador.getInstance().accion(EventoNegocio.ALTA_ENTIDAD,
tentidad,
listaAtributos);
presentacion.opciones
Gui_conexiones_BD.java
46
Tenemos también un botón “Test”, al pulsarlo su ActionListener
lanza el evento TEST_CONEXION_BD al controlador (con este
evento comprobara se comprobara el estado de la conexión a la
Base de Datos).
//--- funciones
public boolean nombre_DB_Cumplimentado() …
public boolean nombre_User_Cumplimentado()
public boolean nombre_Password_Cumplimentado()
presentacion.relaciones
Gui_Alta_relaciones_v2.java.
47
Para definir la cardinalidad tenemos tres combobox que en
función del tipo de relación seleccionado, permitirá seleccionar
“1,N” ó “1..N, N,M”.
Controlador.getInstance().accion(EventoNegocio.ALTA_RELACION_ES_UN
,trelacion_es_un);
48
Controlador.getInstance().accion(EventoNegocio.ALTA_RELACION,
trelacion,
listaEntidades,
listaAtributos);
Gui_optimizar_v1.java
…boton_optimizacion1 …boton_optimizacion7
49
Después para cada uno de estos casos miramos la
participación de las entidades.
Por ejemplo:
50
Ahora cuando el usuario pulse el botón “Aceptar” su
ActionListener, en función del codigo_optimizacion_final (la
selección del usuario), lanzará al controlador el evento
correspondiente al tipo de optimización que hay que aplicar,
junto con los identificadores de la relación y las entidades.
Se lanza el evento:
Controlador.getInstance().accion(EventoNegocio.NO_CREA_REL_1_1_PARCIAL,
identificador_entidad2, identificador_relacion,
identificador_entidad1);
51
3.6 Capa de Acceso a Datos.
-La API ofrece las clases e interfaces para establecer una conexión a
una base de datos, ejecutar una consulta y procesar los resultados:
52
- Para acceder a la base de datos es necesario un driver, conjunto de
clases e destinadas a implementar las interfaces del API y acceder a la
base de datos. Existen cuatro tipos de drivers de conexión:
1. Tipo I: puente JDBC-ODBC
2. Tipo II: driver Java parcial
3. Tipo III: driver Java puro
4. Tipo IV: driver Java puro para conexión directa a SGBD
53
3.6.1 Estructura de paquetes de la capa de datos
Integración.
• DAOFactoria
Es la factoría abstracta de DAOs.
54
• DAOFactoriaSQL
Hereda de la clase DAOFactoria e implementa los métodos
abstractos que hay en ésta llamando a las constructoras de los
DAO específicos de cada clase.
Integración.Diccionario.
DAODiccionario y DAODiccionarioImp
Integración.Generador
DAOGenerador y DAOGenerador
55
3.7 Diagramas de Clases
57
3.7.2.2 Diccionario de datos
TEsquema
TAtributoEoR idEsquema : int
idRelacionoEntidad : int nombreEsquema : Logi cal View::java::lang::String
idAtributo : int login : Logical View::java::l ang::String
restricci on : Logical View::java::lang::String password : Logi cal View::j ava::lang::String
esClave : boolean TEntInfoMin
TEsquema() idEntidad : int
TAtributoEoR() TEsquema() nombreEnti dad : Logical View::java::lang::String
TAtributoEoR() TEsquema()
getEsClave() getIdEsquema() TEntInfoMin()
setEsClave() setIdEsquema() TEntInfoMin()
getIdAtributo() getNombreEsquema() TEntInfoMin()
setIdAtributo() setNombreEsquema() getIdEntidad()
getIdEntidad() getLogi n() setIdEntidad()
setIdEntidad() setLogin() getNombreEntidad()
getRestricci on() getPassword() setNombreEntidad()
setRestricci on() setPassword()
usa/crea
LogDiccionario
TRel EsUn usa/crea
idEnti dadMadre : int LogDiccionario() usa/crea
idEnti dadHi ja : int getInstanci a()
idEsquema : int crearEsquema()
insertarRelacionEsUn() TAtri buto
TRelEsUn() insertarRelacion() idAtributo : int
TRelEsUn() usa/crea insertarEntidad() nombreAtri buto : Logical View::java::lang::Stri ng
TRelEsUn() insertarAtributo() tipo : Logical View::java::lang::Stri ng
getIdEntidadHija() obtenerIdAtributo()
setIdEntidadHija() insertarAtributoEntidad() TAtributo()
getIdEntidadMadre() insertarAtributoRel acion() TAtributo()
setIdEntidadMadre() insertarEntRel() TAtributo()
getIdEsquema() usa/crea getIdAtributo()
obtenerEntidades()
setIdEsquema() obtenerEntInfoMin() setIdAtributo()
obtenerRelInfoMin() getNombreAtributo()
obtenerAtributos() setNombreAtributo()
obtenerEsquemas() getTipo()
TEnti dad obtenerRelaciones() setTipo()
i dEnti dad : i nt obtenerRelacionesEsUn()
-$instancia
nombreEntidad : Logi cal Vi ew::java::lang::String obtenerNombreEsquema()
i dEsquema : int obtenerAtributosEntidad()
descripcion : Logical View::java::l ang::String obtenerAtributosRelacion() extiende
usa/crea
obtenerAtributoEntidad()
TEntidad() obtenerAtributoRelacion()
TEntidad() obtenerDatosAtri buto()
TEntidad() obtenerNombreEntidad()
getDescripcion() obtenerNombreRelacion() TAtributoRest
setDescripcion() obtenerInfoMinEntidad() restricciones : Logi cal View::java::l ang::String
getEsquema() obtenerIdEntidadesHijas() esClave : boolean
setEsquema() obtenerRelaciones_1_1_total()
getIdEntidad() obtenerRelaciones_N_1() TAtri butoRest()
setIdEntidad() obtenerRelaciones_N_N() TAtri butoRest()
getNombreEntidad() obtenerAtributosCl aveEnti dad() usa/crea TAtri butoRest()
setNombreEntidad() obtenerEntNoEsUnInfoMin() isEsClave()
val idarPassword() setEsCl ave()
crearConexion() getRestricciones()
setRestricciones()
usa/crea
usa/crea
usa/crea
58
3.7.2.3 Generador del modelo relacional
59
3.7.3 Capa de Acceso a datos
60
3.8 Optimizaciones en el Modelo Relacional
61
La única posibilidad es introducir la relación en la entidad afectada
por la participación total, en el ejemplo sería: E1(AE11, AE12,AE21, AR).
Esto no se aplica para E2 ya que como no todas sus tuplas están
relacionadas con E1 habría muchas que tendrían el campos de la
clave de E1 a null con lo cual se desperdiciaría memoria.
Se ha de tomar este camino cuando la mayoría de las veces
que realicemos una consulta sobre R queramos obtener información
adicional sobre ella y no meramente su clave.
62
quiera obtener información adicional sobre las características de los
individuos de E1.
63
4. RESULTADOS OBTENIDOS
Accedemos a la aplicación.
64
Configuramos la conexión a la base de datos. (Opciones/Conexión BD)
65
Comprobamos que los datos de dicho esquema se han guardado
correctamente en el diccionario de datos:
66
Introducimos cada uno de sus atributos, mediante el panel de edición de
atributos.
Pulsamos el botón Aceptar, y vemos como la entidad se crea correctamente.
Datos de la Entidad:
67
Datos de los atributos:
68
Dichas entidades se crean correctamente.
Datos de la Entidad:
69
Datos de los atributos de la entidad:
70
Relación Actúa:
71
Comprobamos sus datos en el diccionario de datos:
Datos Relación:
Relación Produce:
72
Al dar de alta esta relación (relación de uno a muchos con participación
parcial de una entidad), se nos pregunta antes si queremos realizar algún
tipo de optimización.
73
Comprobamos el diccionario de datos:
Datos Relación:
Vemos como los datos de las entidades y las relaciones se han guardado en
el diccionario de datos.
74
Archivo con código SQL:
--
-- Table structure for table `actor`
--
--
-- Dumping data for table `actor`
--
--
-- Table structure for table `actua`
--
75
DROP TABLE IF EXISTS `actua`;
CREATE TABLE `actua` (
`idActor` int(11) NOT NULL,
`idPelicula` int(11) NOT NULL,
PRIMARY KEY (`idActor`,`idPelicula`),
KEY `idActor` (`idActor`),
KEY `idPelicula` (`idPelicula`),
CONSTRAINT `actua_ibfk_1` FOREIGN KEY (`idActor`) REFERENCES `actor`
(`idActor`),
CONSTRAINT `actua_ibfk_2` FOREIGN KEY (`idPelicula`) REFERENCES `pelicula`
(`idPelicula`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `actua`
--
--
-- Table structure for table `estudio`
--
--
-- Dumping data for table `estudio`
--
--
-- Table structure for table `pelicula`
--
--
-- Dumping data for table `pelicula`
--
--
-- Table structure for table `produce`
--
76
DROP TABLE IF EXISTS `produce`;
CREATE TABLE `produce` (
`fecha` date NOT NULL,
`idEstudio` int(11) NOT NULL,
`idPelicula` int(11) NOT NULL,
PRIMARY KEY (`idPelicula`),
KEY `idEstudio` (`idEstudio`),
KEY `idPelicula` (`idPelicula`),
CONSTRAINT `produce_ibfk_1` FOREIGN KEY (`idEstudio`) REFERENCES `estudio`
(`idEstudio`),
CONSTRAINT `produce_ibfk_2` FOREIGN KEY (`idPelicula`) REFERENCES `pelicula`
(`idPelicula`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `produce`
--
Conclusiones:
77
5. POSIBLES EXTENSIONES
• Consultas:
Permitir que el usuario pueda definir consultas sobre las entidades y
relaciones existentes en los diagramas.
• Datos:
Permitir que el usuario pueda poblar las entidades y relaciones con
datos.
• Archivo de Log:
Creación de un archivo de Log, en el que se muestren todos los
mensajes de error generados por el sistema.
78
6. BIBLIOGRAFÍA
79