No time for comments.
[PFCLatex/.git] / capitulo3 / capitulo3.tex
index 98a8ca2..1ff16ba 100644 (file)
@@ -110,4 +110,86 @@ Los controladores enlazan el modelo, la vista y otros componentes de la aplicaci
 En una aplicación MVC diseñada correctamente los controladores no contienen mucho código mientras que los modelos sí lo hacen y contienen la mayor parte del código responsable para la representación y manipulación de los datos. Esto se debe a que la estructura de datos y la lógica de negocio representada por los modelos suele ser muy específica para una determinada aplicación, y necesita grandes cambios para lograr los requerimientos de dicho programa; mientras que la lógica del controlador a menudo sigue un modo de funcionamiento similar a través de diferentes aplicaciones y por tanto puede ser simplificado por el framework subyacente o por las clases base~\cite{C3:YiiFramework}.
 
 
-\section{Relational database}
+\section{Bases de datos relacionales}
+Una base de datos relacional es una colección de datos organizados en forma de tablas desde las cuales los datos pueden ser accedidos fácilmente. Las bases de datos relacionales son creadas usando el modelo relacional\footnote{Para más información acerca del modelo relacional ver: \url{http://en.wikipedia.org/wiki/Relational_model}} y el software usado para la utilización de estas bases de datos se conoce como Sistema de Gestión de Bases de Datos Relacionales (RDBMS por sus siglas en Inglés) Por ejemplo en el mundo open source,  MySQL y PostgreSQL son unos de los más extendidos RDBMS pero no los únicos. De hecho PostgreSQL es algo más que un RDBMS puro como el lector podrá comprobar a través de las siguientes secciones.
+
+Una base de datos contiene una o más tablas de información. Las filas en una tabla son llamadas \emph{records} o filas y las columnas en la tabla \emph{campos} o \emph{atributos}. En la Figura~\ref{fig:tableDescription}) se representa una tabla típica de una base de datos relacional. Una base de datos que contiene únicamente una tabla es llamada una base de datos plana. Una que contiene dos o más se conoce como Base de Datos Relacional. Para el acceso a sus datos se hace uso del \emph{Standard Query Language} o SQL\footnote{Más acerca del lenguaje SQL en: \url{http://en.wikipedia.org/wiki/SQL}} por sus siglas en Inglés, con dicho lenguaje se pueden manipular los datos de una base datos con operaciones básicas como pueden ser: SELECT, INSERT, UPDATE y DELETE.
+
+\begin{figure}[H]
+    \centering
+        \includegraphics[width=0.8\textwidth]{fig/table_description}
+    \caption{\emph{Una tabla típica de una base de datos relacional}}
+    \label{fig:tableDescription}
+\end{figure}
+
+
+\subsection{Terminología básica de las bases de datos relacionales}
+
+\begin{itemize}
+    \item \textbf{Filas:} también conocidas como tuplas o \emph{records} Cada fila en una tabla es distinta a otra en la misma tabla pero tienen el mismo tipo de datos.
+    \item \textbf{Columnas:} son conocidas como atributos. Cada columna en una tabla tiene un nombre único (representa un único atributo de esa tabla)y éste debería ser descriptivo. El ordenamiento de las filas y las columnas es irrelevante a la funcionalidad de la base de datos.
+    \item \textbf{Clave primaria:} más comúnmente conocida por su nombre en Inglés \emph{primary key}, es una clave usada para identificar una fila de forma única en una tabla.
+    \item \textbf{Clave extranjera:} o \emph{foreign key}. Así se conoce a la clave primaria cuando ésta es usada en otra tabla para establecer una \textbf{relación} entre dos \emph{records} o filas de diferentes tablas. En la Figura~\ref{fig:relationAmongTable}) se puede observar las relaciones entre diferentes tablas así como sus correspondientes \emph{keys} y \emph{foreing keys}.
+\end{itemize}
+
+\begin{figure}[H]
+    \centering
+        \includegraphics[width=0.7\textwidth]{fig/relation_among_table}
+    \caption{\emph{Relaciones entre tablas}}
+    \label{fig:relationAmongTable}
+\end{figure}
+
+
+\section{PostgreSQL}
+
+PostgreSQL (o de forma abreviada Postgres) es un Sistema de Gestión de Bases de Datos Relacionales y de Objetos (ORDBMS por sus siglas en Inglés) Un ORDBMS es un sistema similar a una base de datos relacional pero con un modelo orientado a objetos. Clases y herencia son soportados directamente en los esquemas de la base de datos y en el lenguaje para realizar queries. Los ORDBMS se encuentran a medio camino entre los Sistemas de Bases de Datos Orientados a Objetos (OODBMS) y los Relacionales (RDBMS)
+
+PostgreSQL evolucionó desde un proyecto de la Universidad de California en el Departamento de Ciencias Computacionales de Berkeley. El primer sistema operacional basado en Postgres fue liberado en 1987 y no disponía de motor SQL si no de uno propio conocido como PostQUEL. En 1994 se añadió el interpretador SQL a Postgres y desde entonces y hasta ahora el proyecto ha crecido enormemente. Además, se libera con una licencia similar a las licencias MIT o BSD\footnote{\url{http://www.postgresql.org/about/licence/}}
+
+PostgreSQL es considerado el más avanzado sistema de base de datos open source en el mundo. Proporciona muchas características que tradicionalmente solo pueden ser encontradas en productos comerciales para grandes empresas.
+
+PostgreSQL es un proyecto open source. Open source por definición significa que se puede obtener el código fuente, usar el programa, y modificarlo libremente sin ningún límite por parte del propietario del software. Ahora bien, NO confundir software open source con software libre de coste. Es cierto que se puede descargar sin ningún coste, pero siempre habrá costes asociados con el tiempo y energía que una compañía pone en el soporte y mantenimiento de la aplicación. Si una empresa no tiene esos recursos para gastar siempre existen vendedores y consultores especializados en productos relacionados con PostgreSQL.
+
+\subsection{Características de PostgreSQL}
+
+El siguiente es un breve listado de algunas de las características que PostgreSQL implementa~\cite{C3:PPostgreSQL}:
+
+\begin{itemize}
+    \item \textbf{ORDBMS}: un ORDBMS es una Base de Datos Relacional y de Objetos; esto significa que PostgreSQL permite acceso a datos mediante un modelo relacional y de objetos, y es capaz de manejar rutinas y reglas complejas. Ejemplos de su avanzada funcionalidad son las consultas SQL declarativas, el soporte multi usuario, la optimiazación de consultas, herencia y arrays.
+    \item \textbf{Altamente extensible}: PostgreSQL permite que el usuario pueda definir sus propios operadores, funciones, métodos de acceso y tipos de datos.
+    \item \textbf{Integridad referencial}: soporte de integridad referencial, el cual es usado para asegurar la validez de los datos el base de datos.
+    \item \textbf{API flexible}: la flexibilidad de la API de PostgreSQL ha permitido a múltiples vendedores proporcionar fácilmente soporte de desarrollo. Estos interfaces incluyen Python, Perl, PHP, ODBC, Java/JDBC, Ruby, C/C++, Object Pascal, etc.
+    \item \textbf{Cliente/Servidor}: PostgreSQL usa una arquitectura cliente/servidor de un proceso por usuario. Existe un proceso master que realiza \emph{forks} para proporcionar conexiones adicionales en cada intento de conexión por parte del cliente al servidor PostgreSQL.
+    \item \textbf{MVCC}: Control de Concurrencia de Versión Múltiple, es la tecnología que PostgeSQL usa para evitar innecesario \emph{locking}. En servidores tales como MySQL o Access, existen momentos en los que el lector tiene que esperar para acceder a la información en la base de datos. La espera es causada por otros usuarios que están escribiendo a la base de datos. Dicho a groso modo, el lector es bloqueado por escritores que están actualizando \emph{records} en tablas de la base de datos.
+    \item \textbf{WAL}: \emph{Write Ahead Logging} consiste en escribir el histórico de las acciones realizadas por una base de datos antes de que incluso estas acciones se hayan producido. Llevando el diario (la historia) de los cambios antes de que estos sean escritos a la base de datos incrementa la fiabilidad de PostgreSQL respecto a otros competidores. Incluso en caso de un \emph{crash} de la base datos existirá un histórico de las transacciones desde el cual podremos recuperar seguramente los datos.
+\end{itemize}
+
+\section{PostGIS}
+
+PostGIS es un software open source que añade soporte de objetos geográficos a la base de datos PostgreSQL. Se libera bajo la licencia \emph{GNU General Public License} (GPL-2.0) Se trata de una base de datos espacial, es decir, una base de datos que define tipos de datos especiales para objetos geométricos y permite almacenar datos geométricos (usualmente de naturaleza geográfica) en tablas de bases de datos convencionales. Proporciona funciones e índices especiales para realizar consultas y manipular los datos geométricos usando SQL (\emph{Structured Query Language}) Una base de datos espacial es a menudo usada solo como un contenedor para almacenar datos espaciales, pero puede hacer mucho más que eso. Aunque una base de datos espacial no necesita ser relacional, la mayoría de las bases de datos espaciales lo son~\cite{C3:PostGIS}.
+
+Una base de datos espacial proporciona herramientas de almacenaje y de análisis. La presentación de datos visualmente no es una meta de las bases de datos espaciales. Permite hacer consultas del tipo: ``Dame una lista de localizaciones donde la distancia media a una pizzería es menor a 16 kilómetros''. 
+
+\subsection{Consultas, análisis y procesado espacial}
+
+Una \emph{query} espacial es una consulta a la base de datos que usa funciones geométricas para responder cuestiones acerca del espacio y de objetos en el espacio. Bases de datos espaciales como PostGIS añaden un conjunto de funciones al lenguaje estándar SQL que trabajan con objetos geométricos en una base de datos de forma similar a funciones que trabajan con datos. Por ejemplo, con una fecha, hay funciones que cuentan cuantas horas/días/minutos/años/semanas hay entre dos fechas o si esta fecha se encuentra en el futuro o en el pasado. PostGIS añade a PostgreSQL funciones de este tipo pero relacionadas con datos geográficos.
+
+Además de ser capaz de responder cuestiones acerca del uso del espacio, las funciones espaciales permiten crear y modificar objetos en el espacio. Esta porción del análisis espacial es a menudo referida como procesado geométrico o espacial~\cite{C3:PostGIS}.
+
+
+\subsection{Fortalezas de PostgreSQL para su uso como base de datos espacial}
+
+La principal razón por la cual PostgreSQL fue elegido como punto de partida para la creación de una base de datos espacial fue la facilidad para crear extensiones a su funcionalidad base. PostgreSQL permite, por ejemplo, crear nuevos tipos y operadores. Otras características de PostgreSQL de las cuales PostGIS hace uso son enumeradas a continuación:
+
+\begin{itemize}
+    \item \textbf{Soporte de arrays}. Únicamente Oracle, IBM DB2 y PostgreSQL permiten el tratamiento complejo de arrays. Por ejemplo, en PostgreSQL se pueden definir arrays de strings, números, fechas, datos geométricos o incluso datos propios creados por el desarrollador. Además permite la conversión de cualquier lista de filas pertenecientes a una tabla en un array, lo cual es particularmente práctico cuando se manipulan datos geométricos.
+    \item \textbf{Herencia de tablas}. PostgreSQL tiene una funcionalidad conocida como herencia de tablas, la cual es equivalente a una multi herencia de objetos. La herencia de tablas permite tratar un conjunto de tablas como una única así como definir jerarquías de herencia anidadas.
+    \item \textbf{Capacidad para definir funciones agregadas que toman más de una columna}.
+    \item \textbf{Habilidad para la definición de nuevos tipos de datos}.
+    \item \textbf{Capacidad para escribir funciones con argumentos por defecto}. Esta característica fue introducida en PostgreSQL 8.4 y mejorada en PostgreSQL 9.0.
+    \item \textbf{Miles de funciones que pueden encontrarse por defecto en PostgreSQL}. Existen funciones para la manipulación de strings, expresiones regulares y para el análisis de datos astronómicos.
+\end{itemize}
+
+\section{Android}
+
+