No time for comments
[PFCLatex/.git] / capitulo5 / capitulo5.tex
1 \chapter{Diseño e implementación de las aplicaciones Web y Android}
2
3
4 \section{Capa de persistencia, modelado bases de datos}
5
6 El modelo entidad relación, fue propuesto por Peter Chen para el modelado de bases de datos usando técnicas gráficas con las que los humanos pueden interactuar de forma sencilla. Los humanos pueden percibir fácilmente las entidades (ver definición más abajo) y sus características en el mundo real y representar cualquier relación entre ellas. El objetivo del modelado gráfico es incluso más profundo que simplemente representar estas entidades y relaciones; el ingeniero de bases de datos puede usar herramientas para modelar estas entidades y sus relaciones y luego generar automáticamente esquemas de bases de datos, es decir: las tablas de la base de datos, las claves primarias, las claves extranjeras y cualquier limitación que exista entre datos y claves. Potencialmente estas herramientas pueden mejorar la productividad de los diseñadores mediante la automatización de tareas. Y lo que es más importante, estas herramientas pueden crear la documentación requerida para el mantenimiento futuro~\cite{C5:EntityRelationship}.
7
8 \subsection{Elementos en el modelo Entidad Relación}
9
10 \begin{itemize}
11     \item \textbf{Entidad}: es una ``cosa'' o un ``objeto'' en el mundo real que se distingue de todos los otros objetos. Por ejemplo: un coche, un estudiante, un curso, etc. Una entidad tiene un conjunto de propiedades o atributos. Por ejemplo un estudiante tiene varios atributos como pueden ser: nombre, dirección, código postal, etc. Uno o más atributos pueden identificar de forma unívoca a la entidad. También, en el mundo real las entidades tienen alguna relación. Por ejemplo, un estudiante toma cursos. Por lo tanto, el mundo real puede ser modelado en términos de \textbf{Entidad-Relación}. Existen entidades fuertes y débiles. Una fuerte es totalmente independiente mientras que una débil depende de la existencia de otra.
12     \item \textbf{Atributos}: describen propiedades que poseen cada entidad o relación. Cada atributo posee un conjunto de valores asociados llamado dominio. El dominio se define como los valores posibles que puede tomar el atributo.
13     \item \textbf{Relación}: como se ha mencionado en el punto anterior, es una correspondencia o asociación entre dos o más entidades. El número de participantes en una relación es lo que se denomina grado de la relación. Por lo tanto, una relación en la que participan dos entidades es una relación binaria. Si son tres las entidades será una relación ternaria, etc. La cardinalidad por otro lado, es el número mínimo y máximo de correspondencias en las que puede tomar parte cada ocurrencia de cada entidad. La participación puede ser obligatoria (total) si la existencia de cada una de sus ocurrencias requiere la existencia de al menos una ocurrencia de la otra entidad participante. Si no, la participación es opcional (parcial)
14     \item \textbf{Identificador}: es un atributo o conjunto de atributos que determina de modo único cada ocurrencia de esa entidad. Nunca pueden existir dos entidades con el mismo identificador.
15 \end{itemize}
16
17 \subsection{Modelado UML}
18
19 El Lenguaje de Modelado Unificado (UML por sus siglas en Inglés) comenzó como una colección de notaciones para soportar el diseño orientado a objetos. Deriva de diferentes aproximaciones y por tanto no hay una única notación si no un conjunto de notaciones para el modelado de diversos elementos como son clases, eventos, comportamientos y otros componentes de los programas.
20
21 En la práctica UML también permite utilizar sus notaciones para el modelado de bases de datos relacionales\footnote{\url{http://www.tdan.com/view-special-features/8457}} (basadas en el modelo Entidad Relación)
22
23 En esta memoria de este proyecto se empleará el lenguaje UML para la representación gráfica de las bases de datos de la aplicación Web y Android. Las relaciones entre entidades se representan con flechas, las entidades con cajas y sus atributos son escritos dentro de las cajas que representan las entidades. También se puede observar el grado de participación y la cardinalidad entre entidades en una relación; siguiendo la notación UML: 
24 \begin{itemize}
25     \item \textbf{0..1}: Participación no obligatoria y cardinalidad máxima 1.
26     \item \textbf{1}: Participación obligatoria por parte de esa relación y cardinalidad 1.
27     \item \textbf{*}: Participación no obligatoria y cardinalidad n (valor entre 0 e infinito)
28     \item \textbf{1..*}: Participación obligatoria y cardinalidad n (entre 1 e infinito)
29 \end{itemize}
30
31
32 \subsection{Base de datos aplicación Web, modelado UML}
33
34 En la siguiente figura en la cual se representa la base de datos de la aplicación Web, cabe destacar la información que a continuación se describe:
35
36 \subsubsection{Tabla sfGuardUser}
37
38 Permite almacenar parámetros relacionados con la identificación del usuario (password, dirección de correo, nombre, apellidos, etc)
39
40 \begin{itemize}
41     \item \textbf{algorithm}: el password se encuentra cifrado, con este campo se permite variar el algoritmo de cifrado si se desea.
42     \item \textbf{fk\_LaguageId}: es una \emph{foreign key} que permite asignar a un usuario un determinado idioma.
43 \end{itemize}
44
45 \subsubsection{Tabla Office}
46
47 Contiene información relacionada con una sucursal u oficina perteneciente a una empresa. En principio, una compañía no tendría por qué tener oficinas o sucursales de ahí que pueda haber entre 0 e infinitas sucursales u oficinas por compañía.
48
49 \begin{itemize}
50     \item \textbf{office\_gps}: es un dato de tipo \emph{geography(POINT,4326)} Más adelante, en el capítulo de implementación se explicará más acerca de este tipo particular de dato PostGIS.
51     \item \textbf{fk\_CityId}: una oficina puede encontrarse o no en una determinada ciudad. A través de este campo se permite relacionar oficinas o sucursales con ciudades, regiones y por último países.
52     \item \textbf{fk\_CompanyId}: marca la relación entre la oficina o sucursal y la compañía. Puede haber compañías sin sucursales pero nunca una oficina o sucursal sin compañía asociada.
53 \end{itemize}
54
55 \subsubsection{Tabla AdDescription}
56
57 Sirve para internacionalizar la información relacionada con los anuncios. De este modo cuando se crea un anuncio se puede crear en tantos idiomas como el sistema admita, así el usuario recibirá el anuncio en el idioma que él o ella previamente configuraron.
58
59 \begin{itemize}
60     \item \textbf{fk\_LanguageId}: relación entre esta tabla y la de idiomas (tabla ``Language'')
61     \item \textbf{fk\_AdId}: un anuncio puede tener n descripciones en n diferentes idiomas.
62     \item \textbf{ad\_gps}: es un dato de tipo \emph{geography(POINT,4326)} utilizado por PostGIS, del cual se hablará en el capítulo donde se explica la implementación de la aplicación.
63 \end{itemize}
64
65 \subsubsection{Tabla CompanyCategory}
66
67 Permite a los usuarios que administran compañías en el sistema crear nuevas categorías. Al mismo tiempo, los anuncios que estos usuarios administradores de compañías crean, pueden ser asociados con estas categorías de compañía que se encuentran en esta tabla. Se utiliza una estructura jerárquica del ORM Doctrine proporcionado por Symfony conocida como \emph{Nested Set}\footnote{\url{http://docs.doctrine-project.org/projects/doctrine1/en/latest/en/manual/hierarchical-data.html\#nested-set}}
68
69 \begin{itemize}
70     \item \textbf{fk\_GeneralCategId}: los usuarios finales, aquellos que recibirán los anuncios en sus dispositivos móviles se asocian a categorías generales que existen previamente en el sistema. El usuario que administra su empresa en el sistema debe asociar su categorías propias a las categorías generales del sistema para que los usuarios móviles puedan recibir anuncios. A través de esta \emph{foreign key} se establece dicha asociación en la capa de persistencia de la aplicación web.
71 \end{itemize}
72
73 \subsubsection{Tabla UserBasket}
74
75 Sirve para persistir las categorías seleccionadas por el usuario final de las cuales desea recibir anuncios relacionados.
76
77 \subsubsection{Tabla Language}
78
79 Almacena la relación entre el nombre de idioma y el código que lo representa. Este código se basa en el formato estándar \textbf{ISO 639-3}\footnote{\url{http://en.wikipedia.org/wiki/ISO\_639-3}} y la tabla puede ser poblada con datos provenientes de sitios públicos en Internet de forma realmente sencilla.
80
81 \begin{landscape}
82     \centering
83     \includegraphics[width=1.4\textwidth,height=1\textheight]{fig/MobiAdsWebDataBase}
84 \end{landscape}
85
86 \subsection{Base de datos aplicación Android, modelado UML}
87
88 \begin{figure}[H]
89     \centering
90         \includegraphics[width=0.8\textwidth]{fig/MobiAdsAndroidDataBase}
91     \caption{\emph{Diagrama de la base de datos, aplicación Android}}
92     \label{fig:MobiAdsAndroidDataBase}
93 \end{figure}
94
95 En la Figura~\ref{fig:MobiAdsAndroidDataBase}) donde se representa la única tabla de la que está compuesta la base de datos de la aplicación Android, los campos representan la siguiente información:
96
97 \begin{itemize}
98     \item \textbf{id}: índice en la tabla. Autoincremental y único por cada fila.
99     \item \textbf{idad}: identificador único del anuncio.
100     \item \textbf{adName}: nombre descriptivo del anuncio que será mostrado en la pantalla del dispositivo móvil del usuario.
101     \item \textbf{text}: texto con información acerca del anuncio que también será presentado en la pantalla del usuario.
102     \item \textbf{url}: dirección web donde se encuentra el resto del anuncio, con más información que al usuario pueda interesar.
103     \item \textbf{isRead}: Android hace uso de SQLite, esta base de datos no implementa \emph{booleans} por tanto, éstos deben ser creados haciendo uso de \emph{integers}. Este valor indica si el usuario ya ha leído el anuncio o si por el contrario todavía no.
104     \item \textbf{path}: lugar en el sistema de archivos del dispositivo móvil donde la imagen que representa el anuncio es almacenada.
105 \end{itemize}
106
107 \section{Diagrama de clases aplicación Android}
108
109 \begin{figure}[H]
110     \centering
111         \includegraphics[width=1\textwidth]{fig/MobiAdsObjects}
112     \caption{\emph{Diagrama de clases Android, vision general: MobiAds.}}
113     \label{fig:MobiAdsObjects}
114 \end{figure}
115
116 \begin{figure}[H]
117     \centering
118         \includegraphics[width=1\textwidth]{fig/MobiAdsService}
119     \caption{\emph{Diagrama de clases Android: MobiAdsService.}}
120     \label{fig:MobiAdsService}
121 \end{figure}
122
123 \begin{figure}[H]
124     \centering
125         \includegraphics[width=1\textwidth]{fig/MobiAdsBatch}
126     \caption{\emph{Diagrama de clases Android: MobiAdsBatch.}}
127     \label{fig:MobiAdsBatch}
128 \end{figure}
129
130 \begin{figure}[H]
131     \centering
132         \includegraphics[width=1\textwidth]{fig/MobiAdsList}
133     \caption{\emph{Diagrama de clases Android: MobiAdsList.}}
134     \label{fig:MobiAdsList}
135 \end{figure}
136
137 \begin{figure}[H]
138     \centering
139         \includegraphics[width=1\textwidth]{fig/MobiAdsLatestList}
140     \caption{\emph{Diagrama de clases Android: MobiAdsLatestList.}}
141     \label{fig:MobiAdsLatestList}
142 \end{figure}
143
144
145
146 \section{Diagrama de clases aplicación Web}
147
148 \begin{figure}[H]
149     \centering
150         \includegraphics[width=1\textwidth]{fig/MobiAdsWebClassCompany}
151     \caption{\emph{Diagrama de clases Web Symfony: Company user.}}
152     \label{fig:MobiAdsWebClassCompany}
153 \end{figure}
154
155 \begin{figure}[H]
156     \centering
157         \includegraphics[width=1\textwidth]{fig/MobiAdsWebClassUser}
158     \caption{\emph{Diagrama de clases Web Symfony: User.}}
159     \label{fig:MobiAdsWebClassUser}
160 \end{figure}
161
162 \section{Servicios Web, WSDL 2.0}
163
164