From 17ef1e7dadee356bf7955a6282fc4fe58b785964 Mon Sep 17 00:00:00 2001 From: gumartinm Date: Sun, 7 Oct 2012 03:05:53 +0200 Subject: [PATCH] More about chapter 3. --- capitulo3/capitulo3.tex | 52 ++++++++++++++++++++++++++++++++++++++----- fig/relation_among_table.jpg | Bin 0 -> 17354 bytes fig/table_description.jpg | Bin 0 -> 18533 bytes 3 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 fig/relation_among_table.jpg create mode 100644 fig/table_description.jpg diff --git a/capitulo3/capitulo3.tex b/capitulo3/capitulo3.tex index 73f11b5..470933e 100644 --- a/capitulo3/capitulo3.tex +++ b/capitulo3/capitulo3.tex @@ -111,8 +111,34 @@ En una aplicación MVC diseñada correctamente los controladores no contienen mu \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} -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. \section{PostgreSQL} @@ -129,7 +155,7 @@ PostgreSQL es un proyecto open source. Open source por definición significa que 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 queries SQL declarativas, el soporte multi usuario, la optimiazación de queries, herencia y arrays. + \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. @@ -140,14 +166,30 @@ El siguiente es un breve listado de algunas de las características que PostgreS \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 conocidas lo son. +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. +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. +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 permite 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} + + diff --git a/fig/relation_among_table.jpg b/fig/relation_among_table.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8975abd3d934b17748f505cb7959c3fb6761fb2e GIT binary patch literal 17354 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%0DtkRpHBQ#o!%X2+Ph;N# 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 literal 0 HcmV?d00001 -- 2.1.4