finish second assignment

This commit is contained in:
Chris Cromer 2018-12-14 13:07:31 -03:00
parent cd9927e501
commit 7f24927c95
Signed by: cromer
GPG Key ID: 39CC813FF3C8708A
26 changed files with 727 additions and 63 deletions

View File

@ -3,7 +3,7 @@
curdir=`pwd`
rm -rf buildtmp
mkdir buildtmp
LDFLAGS=-static-libstdc++ meson buildtmp -D bundle_libs=true --buildtype=release --prefix=/tmp/sernatur --libdir=lib --strip
LDFLAGS=-static-libstdc++ meson buildtmp -D bundle_libs=false -D valadocs_deps=false --buildtype=release --prefix=/tmp/sernatur --libdir=lib --strip
ninja -C buildtmp install
rm -rf buildtmp
cp README.md /tmp/sernatur

Binary file not shown.

View File

@ -6,8 +6,8 @@
\usepackage{adjustbox}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
\usepackage{amsmath}
\usepackage{verbatim}
\usepackage{listings}
\lstset{
basicstyle=\footnotesize\ttfamily,
@ -20,7 +20,7 @@
\renewcommand\maketitlehookd{\vfill\null}
\usepackage{hyperref}
\hypersetup{pdftex,colorlinks=true,allcolors=black,bookmarks}
\hypersetup{colorlinks=true,allcolors=black}
\usepackage{hypcap}
\title{\textbf{Proyecto Semestral de Base de Datos\\Entrega 1}}
@ -37,6 +37,7 @@
\begin{document}
\clearpage
\hypersetup{pageanchor=false}
\begin{titlingpage}
\maketitle
\end{titlingpage}
@ -49,6 +50,7 @@
\tableofcontents
\newpage
\hypersetup{pageanchor=true}
\pagenumbering{arabic}
\section{Introducción}
El objetivo de este trabajo es modelar un sistema por el Servicio Nacional de Turismo(SERNATUR) con el propósito de almacenar y consultar a un base de datos de PostgreSQL con información sobre el turismo.
@ -62,85 +64,104 @@ El objetivo de este trabajo es modelar un sistema por el Servicio Nacional de Tu
\newpage
\section{Modelo Relacional}
\begin{center}
En negrita se presenta las claves foráneas y las primarias en subrayado.\\
En negrita se presenta las claves foráneas y las primarias en subrayado.\smallskip
\end{center}
tour(\underline{id\_tour}, nombre\_tour, costo\_indiv, costo\_grupal, minima\_personas, \textbf{id\_ciudad})\\
\newline
lugar(\underline{id\_lugar}, nombre\_lugar, valor\_entrada, nivel, \textbf{id\_ciudad})\\
\newline
asociado(\textbf{id\_tour}, \textbf{id\_lugar}, fecha\_llegada, hora\_llegada, fecha\_salida, hora\_salida)\\
\newline
turista(\underline{rut\_turista}, nombre\_turista, fecha\_nacimiento, \textbf{id\_contacto})\\
\newline
contacto\_emergencia(\underline{id\_contacto}, telefono\_emergencia, nombre\_emergencia)\\
\newline
enfermedad(\underline{id\_enfermedad}, descripcion\_enfermedad)\\
\newline
tiene\_enfermedad(\textbf{rut\_turista}, \textbf{id\_enfermedad})\\
\newline
compra(\textbf{id\_tour}, \textbf{rut\_turista}, valor)\\
\newline
realiza(\textbf{id\_tour}, \textbf{rut\_turista})\\
\newline
vehiculo(\underline{patente}, ano\_vehiculo, marca, capacidad, chofer)\\
\newline
empresa(\underline{rut\_empresa}, nombre\_empresa, contacto, telefono)\\
\newline
arrienda(\textbf{patente}, \textbf{rut\_empresa}, precio, fecha\_devolucion)\\
\newline
ciudad(\underline{id\_ciudad}, nombre\_ciudad, \textbf{id\_region})\\
\newline
region(\underline{id\_region}, nombre\_region)\\
\newline
guia(\underline{rut\_guia}, nombre\_guia)\\
\newline
especialidad(\underline{id\_especialidad}, descripcion\_especialidad)\\
\newline
posee(\textbf{rut\_guia}, \textbf{id\_especialidad}, nivel\_especialidad)\\
\newline
categoria(\underline{id\_categoria}, descripcion\_categoria)\\
\newline
direccion(\textbf{rut\_guia}, \textbf{id\_ciudad}, calle, numero)\\
\newline
tour(\underline{id\_tour}, nombre\_tour, costo\_indiv, costo\_grupal, minima\_personas, \textbf{id\_ciudad})\bigskip
\noindent
lugar(\underline{id\_lugar}, nombre\_lugar, valor\_entrada, nivel, \textbf{id\_ciudad})\bigskip
\noindent
asociado(\textbf{id\_tour}, \textbf{id\_lugar}, fecha\_llegada, hora\_llegada, fecha\_salida, hora\_salida)\bigskip
\noindent
turista(\underline{rut\_turista}, nombre\_turista, fecha\_nacimiento, \textbf{id\_contacto})\bigskip
\noindent
contacto\_emergencia(\underline{id\_contacto}, telefono\_emergencia, nombre\_emergencia)\bigskip
\noindent
enfermedad(\underline{id\_enfermedad}, descripcion\_enfermedad)\bigskip
\noindent
tiene\_enfermedad(\textbf{rut\_turista}, \textbf{id\_enfermedad})\bigskip
\noindent
compra(\textbf{id\_tour}, \textbf{rut\_turista}, valor)\bigskip
\noindent
realiza(\textbf{id\_tour}, \textbf{rut\_turista})\bigskip
\noindent
vehiculo(\underline{patente}, ano\_vehiculo, marca, capacidad, chofer)\bigskip
\noindent
empresa(\underline{rut\_empresa}, nombre\_empresa, contacto, telefono)\bigskip
\noindent
arrienda(\textbf{patente}, \textbf{rut\_empresa}, precio, fecha\_devolucion)\bigskip
\noindent
ciudad(\underline{id\_ciudad}, nombre\_ciudad, \textbf{id\_region})\bigskip
\noindent
region(\underline{id\_region}, nombre\_region)\bigskip
\noindent
guia(\underline{rut\_guia}, nombre\_guia)\bigskip
\noindent
especialidad(\underline{id\_especialidad}, descripcion\_especialidad)\bigskip
\noindent
posee(\textbf{rut\_guia}, \textbf{id\_especialidad}, nivel\_especialidad)\bigskip
\noindent
categoria(\underline{id\_categoria}, descripcion\_categoria)\bigskip
\noindent
direccion(\textbf{rut\_guia}, \textbf{id\_ciudad}, calle, numero)\bigskip
\noindent
participa(\textbf{id\_tour}, \textbf{rut\_guia}, \textbf{id\_categoria})
\newpage
\section{Justificación de Modelo Relacional}
\textbf{\textit{tour}} adquiere la clave foránea \textbf{\textit{id\_ciudad}} debido que la relación entre las entidades \textbf{\textit{tour}} y \textbf{\textit{ciudad}} es de \textbf{\textit{n a 1}}.\\
\textbf{\textit{tour}} adquiere la clave foránea \textbf{\textit{id\_ciudad}} debido que la relación entre las entidades \textbf{\textit{tour}} y \textbf{\textit{ciudad}} es de \textbf{\textit{n a 1}}.\bigskip
\textbf{\textit{lugar}} recibe como clave foránea \textbf{\textit{id\_ciudad}} dado por la relación \textbf{\textit{n a 1}} de las entidades \textbf{\textit{lugar}} y \textbf{\textit{ciudad}}.\\
\textbf{\textit{lugar}} recibe como clave foránea \textbf{\textit{id\_ciudad}} dado por la relación \textbf{\textit{n a 1}} de las entidades \textbf{\textit{lugar}} y \textbf{\textit{ciudad}}.\bigskip
\textbf{\textit{asociado}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{id\_lugar}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{lugar}} es de \textbf{\textit{n a n}}.\\
\textbf{\textit{asociado}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{id\_lugar}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{lugar}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{turista}} adquiere la clave foránea \textbf{\textit{id\_contacto}} debido que la relación entre \textbf{\textit{turista}} y \textbf{\textit{contacto\_emergencia}} es \textbf{\textit{n a 1}}.\\
\textbf{\textit{turista}} adquiere la clave foránea \textbf{\textit{id\_contacto}} debido que la relación entre \textbf{\textit{turista}} y \textbf{\textit{contacto\_emergencia}} es \textbf{\textit{n a 1}}.\bigskip
\textbf{\textit{tiene\_enfermedad}} es creado con las claves foráneas \textbf{\textit{rut\_turista}} y \textbf{\textit{id\_enfermedad}} dado que la relación es \textbf{\textit{n a n}} entre \textbf{\textit{turista}} y \textbf{\textit{enfermedad}}.\\
\textbf{\textit{tiene\_enfermedad}} es creado con las claves foráneas \textbf{\textit{rut\_turista}} y \textbf{\textit{id\_enfermedad}} dado que la relación es \textbf{\textit{n a n}} entre \textbf{\textit{turista}} y \textbf{\textit{enfermedad}}.\bigskip
\textit{\textbf{compra}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{rut\_turista}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{turista}} es de \textbf{\textit{n a n}}.\\
\textit{\textbf{compra}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{rut\_turista}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{turista}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{realiza}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{rut\_turista}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{turista}} es de \textbf{\textit{n a n}}.\\
\textbf{\textit{realiza}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{rut\_turista}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{turista}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{arrienda}} es creado con las claves foráneas \textbf{\textit{patente}} y \textbf{\textit{rut\_empresa}} dado que la relación entre \textbf{\textit{vehiculo}} y \textbf{\textit{empresa}} es de \textbf{\textit{n a n}}.\\
\textbf{\textit{arrienda}} es creado con las claves foráneas \textbf{\textit{patente}} y \textbf{\textit{rut\_empresa}} dado que la relación entre \textbf{\textit{vehiculo}} y \textbf{\textit{empresa}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{ciudad}} adquiere la clave foránea \textbf{\textit{id\_region}} debido a la relación \textbf{\textit{n a 1}} entre las entidades \textbf{\textit{ciudad}} y \textbf{\textit{region}}.\\
\textbf{\textit{ciudad}} adquiere la clave foránea \textbf{\textit{id\_region}} debido a la relación \textbf{\textit{n a 1}} entre las entidades \textbf{\textit{ciudad}} y \textbf{\textit{region}}.\bigskip
\textbf{\textit{posee}} es creado y recibe las claves foráneas \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_especialidad}} dado que la relación entre \textbf{\textit{guia}} y \textbf{\textit{especialidad}} es de \textbf{\textit{n a n}}.\\
\textbf{\textit{posee}} es creado y recibe las claves foráneas \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_especialidad}} dado que la relación entre \textbf{\textit{guia}} y \textbf{\textit{especialidad}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{direccion}} es creado con las claves foráneas \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_ciudad}} dado por la relación \textbf{\textit{n a n}} entre \textbf{\textit{ciudad}} y \textbf{\textit{guia}}.\\
\textbf{\textit{direccion}} es creado con las claves foráneas \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_ciudad}} dado por la relación \textbf{\textit{n a n}} entre \textbf{\textit{ciudad}} y \textbf{\textit{guia}}.\bigskip
\textbf{\textit{participa}} es creado con 3 claves foráneas \textbf{\textit{id\_tour}}, \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_categoria}} dado que la relación es \textbf{\textit{n-arias}} entre \textbf{\textit{tour}}, \textbf{\textit{guia}} y \textbf{\textit{categoria}}.\\
\textbf{\textit{participa}} es creado con 3 claves foráneas \textbf{\textit{id\_tour}}, \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_categoria}} dado que la relación es \textbf{\textit{n-arias}} entre \textbf{\textit{tour}}, \textbf{\textit{guia}} y \textbf{\textit{categoria}}.\bigskip
\newpage
\section{Script SQL}
\subsection{Crear tablas}
\lstinputlisting{Informecreartablas.sql}
\lstinputlisting{Informe1_creartablas.sql}
\newpage
\subsection{Insertar duplas}
\lstinputlisting{Informeinsertarduplas.sql}
\lstinputlisting{Informe1_insertarduplas.sql}
\end{document}

View File

@ -52,13 +52,13 @@ CREATE TABLE ciudad(id_ciudad SMALLSERIAL UNIQUE,
);
CREATE TABLE tour(id_tour SERIAL UNIQUE,
nombre_tour VARCHAR(50) NOT NULL,
costo_indiv INT NOT NULL CHECK (costo_indiv > costo_grupal),
costo_grupal INT NOT NULL CHECK (costo_grupal > 0),
minima_personas INT NOT NULL CHECK (minima_personas > 0),
id_ciudad SMALLINT,
PRIMARY KEY (id_tour),
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE RESTRICT
nombre_tour VARCHAR(50) NOT NULL,
costo_indiv INT NOT NULL CHECK (costo_indiv > costo_grupal),
costo_grupal INT NOT NULL CHECK (costo_grupal > 0),
minima_personas INT NOT NULL CHECK (minima_personas > 0),
id_ciudad SMALLINT,
PRIMARY KEY (id_tour),
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE RESTRICT
);
CREATE TABLE lugar(id_lugar SMALLSERIAL UNIQUE,

BIN
doc/Informe1corregido.pdf Normal file

Binary file not shown.

168
doc/Informe1corregido.tex Normal file
View File

@ -0,0 +1,168 @@
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{array}
\usepackage{adjustbox}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
\usepackage{amsmath}
\usepackage{verbatim}
\usepackage{listings}
\lstset{
basicstyle=\footnotesize\ttfamily,
columns=flexible,
breaklines=true,
inputencoding=utf8,
extendedchars=true,
literate={á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {ñ}{{\~n}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 {Ñ}{{\~N}}1
}
\usepackage{titling}
\renewcommand\maketitlehooka{\null\mbox{}\vfill}
\renewcommand\maketitlehookd{\vfill\null}
\usepackage{hyperref}
\hypersetup{colorlinks=true,allcolors=black}
\usepackage{hypcap}
\title{\textbf{Proyecto Semestral de Base de Datos\\Entrega 1 Corregido}}
\author{Christopher Cromer\\\\Profesora Valeria Beratto\\Sección 1}
\date{\today}
\pretitle{%
\begin{center}
\LARGE
\includegraphics[width=4cm]{ubblogo.png}\\[\bigskipamount]
}
\posttitle{\end{center}}
\begin{document}
\clearpage
\hypersetup{pageanchor=false}
\begin{titlingpage}
\maketitle
\end{titlingpage}
\thispagestyle{empty}
\newpage
\clearpage
\thispagestyle{empty}
\tableofcontents
\newpage
\hypersetup{pageanchor=true}
\pagenumbering{arabic}
\section{Introducción}
El objetivo de este trabajo es modelar un sistema por el Servicio Nacional de Turismo(SERNATUR) con el propósito de almacenar y consultar a un base de datos de PostgreSQL con información sobre el turismo.
\newpage
\section{Modelo Entidad Relación}
\begin{center}
\includegraphics[width=0.96\textwidth,height=0.96\textheight,keepaspectratio]{MERcorregido.png}
\end{center}
\newpage
\section{Modelo Relacional}
\begin{center}
En negrita se presenta las claves foráneas y las primarias en subrayado.\smallskip
\end{center}
tour(\underline{id\_tour}, nombre\_tour, costo\_indiv, costo\_grupal, minima\_personas, \textbf{id\_ciudad})\bigskip
\noindent
lugar(\underline{id\_lugar}, nombre\_lugar, valor\_entrada, nivel, \textbf{id\_ciudad})\bigskip
\noindent
asociado(\textbf{id\_tour}, \textbf{id\_lugar}, fecha\_llegada, hora\_llegada, fecha\_salida, hora\_salida)\bigskip
\noindent
turista(\underline{rut\_turista}, nombre\_turista, fecha\_nacimiento, \textbf{id\_contacto})\bigskip
\noindent
contacto\_emergencia(\underline{id\_contacto}, telefono\_emergencia, nombre\_emergencia)\bigskip
\noindent
enfermedad(\underline{id\_enfermedad}, descripcion\_enfermedad)\bigskip
\noindent
tiene\_enfermedad(\textbf{rut\_turista}, \textbf{id\_enfermedad})\bigskip
\noindent
realiza(\textbf{id\_tour}, \textbf{rut\_turista}, \textbf{id\_descuento})\bigskip
\noindent
vehiculo(\underline{patente}, ano\_vehiculo, marca, capacidad)\bigskip
\noindent
requerir\_auto(\textbf{id\_tour}, \textbf{patente}, chofer\bigskip)
\noindent
empresa(\underline{rut\_empresa}, nombre\_empresa, contacto, telefono)\bigskip
\noindent
arrienda(\textbf{patente}, \textbf{rut\_empresa}, precio, fecha\_devolucion)\bigskip
\noindent
ciudad(\underline{id\_ciudad}, nombre\_ciudad, \textbf{id\_region})\bigskip
\noindent
region(\underline{id\_region}, nombre\_region)\bigskip
\noindent
guia(\underline{rut\_guia}, nombre\_guia, calle, numero, \textbf{id\_ciudad})\bigskip
\noindent
especialidad(\underline{id\_especialidad}, descripcion\_especialidad)\bigskip
\noindent
posee(\textbf{rut\_guia}, \textbf{id\_especialidad}, nivel\_especialidad)\bigskip
\noindent
categoria(\underline{id\_categoria}, descripcion\_categoria)\bigskip
\noindent
participa(\textbf{id\_tour}, \textbf{rut\_guia}, \textbf{id\_categoria})\bigskip
\noindent
descuento(\underline{id\_descuento}, descripcion\_descuento, porcentaje)
\newpage
\section{Justificación de Modelo Relacional}
\textbf{\textit{tour}} adquiere la clave foránea \textbf{\textit{id\_ciudad}} debido que la relación entre las entidades \textbf{\textit{tour}} y \textbf{\textit{ciudad}} es de \textbf{\textit{n a 1}}.\bigskip
\textbf{\textit{lugar}} recibe como clave foránea \textbf{\textit{id\_ciudad}} dado por la relación \textbf{\textit{n a 1}} de las entidades \textbf{\textit{lugar}} y \textbf{\textit{ciudad}}.\bigskip
\textbf{\textit{asociado}} es creado con las claves foráneas \textbf{\textit{id\_tour}} y \textbf{\textit{id\_lugar}} dado que la relación entre \textbf{\textit{tour}} y \textbf{\textit{lugar}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{turista}} adquiere la clave foránea \textbf{\textit{id\_contacto}} debido que la relación entre \textbf{\textit{turista}} y \textbf{\textit{contacto\_emergencia}} es \textbf{\textit{n a 1}}.\bigskip
\textbf{\textit{tiene\_enfermedad}} es creado con las claves foráneas \textbf{\textit{rut\_turista}} y \textbf{\textit{id\_enfermedad}} dado que la relación es \textbf{\textit{n a n}} entre \textbf{\textit{turista}} y \textbf{\textit{enfermedad}}.\bigskip
\textbf{\textit{realiza}} es creado con las claves foráneas \textbf{\textit{id\_tour}}, \textbf{\textit{rut\_turista}} y \textbf{\textit{id\_descuento}} dado que la relación entre \textbf{\textit{tour}}, \textbf{\textit{turista}} y \textbf{\textit{descuento}} es de \textbf{\textit{n-aria}}.\bigskip
\textbf{\textit{arrienda}} es creado con las claves foráneas \textbf{\textit{patente}} y \textbf{\textit{rut\_empresa}} dado que la relación entre \textbf{\textit{vehiculo}} y \textbf{\textit{empresa}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{ciudad}} adquiere la clave foránea \textbf{\textit{id\_region}} debido a la relación \textbf{\textit{n a 1}} entre las entidades \textbf{\textit{ciudad}} y \textbf{\textit{region}}.\bigskip
\textbf{\textit{posee}} es creado y recibe las claves foráneas \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_especialidad}} dado que la relación entre \textbf{\textit{guia}} y \textbf{\textit{especialidad}} es de \textbf{\textit{n a n}}.\bigskip
\textbf{\textit{participa}} es creado con 3 claves foráneas \textbf{\textit{id\_tour}}, \textbf{\textit{rut\_guia}} y \textbf{\textit{id\_categoria}} dado que la relación es \textbf{\textit{n-arias}} entre \textbf{\textit{tour}}, \textbf{\textit{guia}} y \textbf{\textit{categoria}}.\bigskip
Las tablas restantes se crean bajo el principio de que toda entidad requiere una tabla.
\newpage
\section{Script SQL}
\subsection{Crear tablas}
\lstinputlisting{Informe1corregido_creartablas.sql}
\newpage
\subsection{Insertar duplas}
\lstinputlisting{Informe1corregido_insertarduplas.sql}
\end{document}

View File

@ -0,0 +1,142 @@
CREATE TABLE contacto_emergencia(id_contacto SERIAL UNIQUE,
telefono_emergencia BIGINT NOT NULL CHECK (telefono_emergencia > 99999999 AND telefono_emergencia < 100000000000),
nombre_emergencia VARCHAR(50) NOT NULL,
PRIMARY KEY (id_contacto)
);
CREATE TABLE enfermedad(id_enfermedad SMALLSERIAL UNIQUE,
descripcion_enfermedad TEXT NOT NULL,
PRIMARY KEY (id_enfermedad)
);
CREATE TABLE empresa(rut_empresa VARCHAR(9) NOT NULL UNIQUE,
nombre_empresa VARCHAR(50) NOT NULL,
contacto VARCHAR(50) NOT NULL,
telefono BIGINT NOT NULL CHECK (telefono > 99999999 AND telefono < 100000000000),
PRIMARY KEY (rut_empresa)
);
CREATE TABLE especialidad(id_especialidad SMALLSERIAL UNIQUE,
descripcion_especialidad TEXT NOT NULL,
PRIMARY KEY (id_especialidad)
);
CREATE TABLE categoria(id_categoria SMALLSERIAL UNIQUE,
descripcion_categoria TEXT NOT NULL,
PRIMARY KEY (id_categoria)
);
CREATE TABLE vehiculo(patente VARCHAR(6) NOT NULL UNIQUE,
ano_vehiculo SMALLINT NOT NULL,
marca VARCHAR(20) NOT NULL,
capacidad SMALLINT NOT NULL,
PRIMARY KEY (patente)
);
CREATE TABLE region(id_region SMALLSERIAL UNIQUE,
nombre_region VARCHAR(20) NOT NULL,
PRIMARY KEY (id_region)
);
CREATE TABLE ciudad(id_ciudad SMALLSERIAL UNIQUE,
nombre_ciudad VARCHAR(20) NOT NULL,
id_region SMALLINT,
PRIMARY KEY (id_ciudad),
FOREIGN KEY (id_region) REFERENCES region (id_region) ON DELETE CASCADE
);
CREATE TABLE guia(rut_guia VARCHAR(9) NOT NULL UNIQUE,
nombre_guia VARCHAR(50) NOT NULL,
calle VARCHAR(20) NOT NULL,
numero SMALLINT NOT NULL,
id_ciudad SMALLINT,
PRIMARY KEY (rut_guia),
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE CASCADE
);
CREATE TABLE tour(id_tour SERIAL UNIQUE,
nombre_tour VARCHAR(50) NOT NULL,
costo_indiv INT NOT NULL CHECK (costo_indiv > costo_grupal),
costo_grupal INT NOT NULL CHECK (costo_grupal > 0),
minima_personas INT NOT NULL CHECK (minima_personas > 0),
id_ciudad SMALLINT,
PRIMARY KEY (id_tour),
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE CASCADE
);
CREATE TABLE lugar(id_lugar SMALLSERIAL UNIQUE,
nombre_lugar VARCHAR(50) NOT NULL,
valor_entrada INT NOT NULL CHECK (valor_entrada >= 0),
nivel SMALLINT NOT NULL CHECK (nivel >= 0),
id_ciudad SMALLINT,
PRIMARY KEY (id_lugar),
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE CASCADE
);
CREATE TABLE turista(rut_turista VARCHAR(9) NOT NULL UNIQUE,
nombre_turista VARCHAR(50) NOT NULL,
fecha_nacimento DATE NOT NULL,
id_contacto INT,
PRIMARY KEY (rut_turista),
FOREIGN KEY (id_contacto) REFERENCES contacto_emergencia (id_contacto) ON DELETE CASCADE
);
CREATE TABLE tiene_enfermedad(rut_turista VARCHAR(9) NOT NULL,
id_enfermedad SMALLINT NOT NULL,
FOREIGN KEY (rut_turista) REFERENCES turista (rut_turista) ON DELETE CASCADE,
FOREIGN KEY (id_enfermedad) REFERENCES enfermedad (id_enfermedad) ON DELETE CASCADE
);
CREATE TABLE descuento(id_descuento SMALLSERIAL UNIQUE,
descripcion_descuento TEXT NOT NULL,
porcentaje DECIMAL(3,2) NOT NULL CHECK (porcentaje BETWEEN 0 AND 1),
PRIMARY KEY (id_descuento)
);
CREATE TABLE realiza(id_tour INT NOT NULL,
rut_turista VARCHAR(9) NOT NULL,
id_descuento SMALLINT NOT NULL,
FOREIGN KEY (id_tour) REFERENCES tour (id_tour) ON DELETE CASCADE,
FOREIGN KEY (rut_turista) REFERENCES turista (rut_turista) ON DELETE CASCADE,
FOREIGN KEY (id_descuento) REFERENCES descuento (id_descuento) ON DELETE CASCADE
);
CREATE TABLE arrienda(patente VARCHAR(6) NOT NULL,
rut_empresa VARCHAR(9) NOT NULL,
precio INT NOT NULL CHECK (precio > 0),
fecha_devolucion DATE NOT NULL,
FOREIGN KEY (patente) REFERENCES vehiculo (patente) ON DELETE CASCADE,
FOREIGN KEY (rut_empresa) REFERENCES empresa (rut_empresa) ON DELETE CASCADE
);
CREATE TABLE posee(rut_guia VARCHAR(9) NOT NULL,
id_especialidad SMALLINT NOT NULL,
nivel_especialidad SMALLINT NOT NULL CHECK (nivel_especialidad >= 0),
FOREIGN KEY (rut_guia) REFERENCES guia (rut_guia) ON DELETE CASCADE,
FOREIGN KEY (id_especialidad) REFERENCES especialidad (id_especialidad) ON DELETE CASCADE
);
CREATE TABLE participa(id_tour INT NOT NULL,
rut_guia VARCHAR(9) NOT NULL,
id_categoria SMALLINT NOT NULL,
FOREIGN KEY (id_tour) REFERENCES tour (id_tour) ON DELETE CASCADE,
FOREIGN KEY (rut_guia) REFERENCES guia (rut_guia) ON DELETE CASCADE,
FOREIGN KEY (id_categoria) REFERENCES categoria (id_categoria) ON DELETE CASCADE
);
CREATE TABLE asociado(id_tour INT NOT NULL,
id_lugar SMALLINT NOT NULL,
fecha_llegada DATE,
hora_llegada TIME,
fecha_salida DATE,
hora_salida TIME,
FOREIGN KEY (id_tour) REFERENCES tour (id_tour) ON DELETE CASCADE,
FOREIGN KEY (id_lugar) REFERENCES lugar (id_lugar) ON DELETE CASCADE
);
CREATE TABLE requerir_auto(id_tour INT NOT NULL,
patente VARCHAR(6) NOT NULL,
chofer VARCHAR(50) NOT NULL,
FOREIGN KEY (id_tour) REFERENCES tour (id_tour) ON DELETE CASCADE,
FOREIGN KEY (patente) REFERENCES vehiculo (patente) ON DELETE CASCADE
);

View File

@ -0,0 +1,97 @@
INSERT INTO contacto_emergencia (telefono_emergencia, nombre_emergencia) VALUES ('56912345678', 'Chris Cromer');
INSERT INTO contacto_emergencia (telefono_emergencia, nombre_emergencia) VALUES ('56913334578', 'John Cromer');
INSERT INTO contacto_emergencia (telefono_emergencia, nombre_emergencia) VALUES ('56913984347', 'Tammy Cromer');
INSERT INTO enfermedad (descripcion_enfermedad) VALUES ('Heart Disease');
INSERT INTO enfermedad (descripcion_enfermedad) VALUES ('Diabetes');
INSERT INTO enfermedad (descripcion_enfermedad) VALUES ('Lung Cancer');
INSERT INTO empresa (rut_empresa, nombre_empresa, contacto, telefono) VALUES ('566034578', 'Hurtz', 'John Jacob', '56948904446');
INSERT INTO empresa (rut_empresa, nombre_empresa, contacto, telefono) VALUES ('56404537k', 'Rent-a-Car', 'Jim Smith', '56948904446');
INSERT INTO empresa (rut_empresa, nombre_empresa, contacto, telefono) VALUES ('566003458', 'Car Rentals Dot Com', 'Tony Stark', '56948904446');
INSERT INTO especialidad (descripcion_especialidad) VALUES ('Climbing');
INSERT INTO especialidad (descripcion_especialidad) VALUES ('History');
INSERT INTO especialidad (descripcion_especialidad) VALUES ('Astronomy');
INSERT INTO especialidad (descripcion_especialidad) VALUES ('Public Speaking');
INSERT INTO categoria (descripcion_categoria) VALUES ('Coordinador');
INSERT INTO categoria (descripcion_categoria) VALUES ('Speaker');
INSERT INTO categoria (descripcion_categoria) VALUES ('Expert');
INSERT INTO vehiculo (patente, ano_vehiculo, marca, capacidad) VALUES ('as45fe', 2017, 'Chevy', 4);
INSERT INTO vehiculo (patente, ano_vehiculo, marca, capacidad) VALUES ('lj58bv', 2002, 'Mazda', 20);
INSERT INTO vehiculo (patente, ano_vehiculo, marca, capacidad) VALUES ('49fd38', 2001, 'Subaru', 10);
INSERT INTO vehiculo (patente, ano_vehiculo, marca, capacidad) VALUES ('tasdf8', 2001, 'Toyota', 10);
INSERT INTO region (nombre_region) VALUES ('Florida');
INSERT INTO region (nombre_region) VALUES ('Alabama');
INSERT INTO region (nombre_region) VALUES ('Arizona');
INSERT INTO ciudad (nombre_ciudad, id_region) VALUES ('Pensacola', 1);
INSERT INTO ciudad (nombre_ciudad, id_region) VALUES ('Montgomery', 2);
INSERT INTO ciudad (nombre_ciudad, id_region) VALUES ('Pheonix', 3);
INSERT INTO guia (rut_guia, nombre_guia, calle, numero, id_ciudad) VALUES ('266304578', 'John Smith', 'Edison Dr.', 214, 1);
INSERT INTO guia (rut_guia, nombre_guia, calle, numero, id_ciudad) VALUES ('26640457k', 'Jack Offer', 'Jackson Ave.', 1023, 2);
INSERT INTO guia (rut_guia, nombre_guia, calle, numero, id_ciudad) VALUES ('26644457k', 'Mike Toga', 'Madison Way', 342, 3);
INSERT INTO tour (nombre_tour, costo_indiv, costo_grupal, minima_personas, id_ciudad) VALUES ('Los Rios', 200000, 150000, 1, 1);
INSERT INTO tour (nombre_tour, costo_indiv, costo_grupal, minima_personas, id_ciudad) VALUES ('Valle de la Luna', 300000, 120000, 10, 2);
INSERT INTO tour (nombre_tour, costo_indiv, costo_grupal, minima_personas, id_ciudad) VALUES ('Peru', 400000, 110000, 20, 3);
INSERT INTO tour (nombre_tour, costo_indiv, costo_grupal, minima_personas, id_ciudad) VALUES ('San Pedro', 400000, 110000, 20, 3);
INSERT INTO lugar (nombre_lugar, valor_entrada, nivel, id_ciudad) VALUES ('El Bio Bio', 0, 3, 1);
INSERT INTO lugar (nombre_lugar, valor_entrada, nivel, id_ciudad) VALUES ('Lago San Pedro', 10000, 3, 2);
INSERT INTO lugar (nombre_lugar, valor_entrada, nivel, id_ciudad) VALUES ('Atacama', 30000, 0, 3);
INSERT INTO lugar (nombre_lugar, valor_entrada, nivel, id_ciudad) VALUES ('Kilamanjaro', 30000, 5, 3);
INSERT INTO turista (rut_turista, nombre_turista, fecha_nacimento, id_contacto) VALUES ('226634572', 'Jack Asserton', '1985-02-23', 1);
INSERT INTO turista (rut_turista, nombre_turista, fecha_nacimento, id_contacto) VALUES ('194333573', 'Tommy Gunner', '1990-06-02', 2);
INSERT INTO turista (rut_turista, nombre_turista, fecha_nacimento, id_contacto) VALUES ('17398380k', 'Jimmy Johnson', '1955-01-01', 3);
INSERT INTO turista (rut_turista, nombre_turista, fecha_nacimento, id_contacto) VALUES ('232322226', 'Jimmy Olson', '1985-04-03', 1);
INSERT INTO tiene_enfermedad (rut_turista, id_enfermedad) VALUES ('226634572', 1);
INSERT INTO tiene_enfermedad (rut_turista, id_enfermedad) VALUES ('194333573', 2);
INSERT INTO tiene_enfermedad (rut_turista, id_enfermedad) VALUES ('17398380k', 3);
INSERT INTO descuento (descripcion_descuento, porcentaje) VALUES ('0-15 años', 0.20)
INSERT INTO descuento (descripcion_descuento, porcentaje) VALUES ('16-50 años', 0.00)
INSERT INTO descuento (descripcion_descuento, porcentaje) VALUES ('51', 0.10)
INSERT INTO descuento (descripcion_descuento, porcentaje) VALUES ('66 en adelante', 0.30)
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (2, '232322226', 2);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (3, '17398380k', 2);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (3, '194333573', 2);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (1, '226634572', 2);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (4, '17398380k', 1);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (2, '194333573', 2);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (4, '194333573', 1);
INSERT INTO realiza (id_tour, rut_turista, id_descuento) VALUES (4, '226634572', 3);
INSERT INTO arrienda (patente, rut_empresa, precio, fecha_devolucion) VALUES ('as45fe', '566034578', 120000, '2018-11-29');
INSERT INTO arrienda (patente, rut_empresa, precio, fecha_devolucion) VALUES ('lj58bv', '56404537k', 100000, '2018-11-29');
INSERT INTO arrienda (patente, rut_empresa, precio, fecha_devolucion) VALUES ('49fd38', '566003458', 150000, '2018-11-29');
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('266304578', 1, 0);
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('26640457k', 2, 3);
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('26644457k', 3, 5);
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('266304578', 2, 5);
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('266304578', 3, 5);
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('266304578', 4, 5);
INSERT INTO posee (rut_guia, id_especialidad, nivel_especialidad) VALUES ('26640457k', 1, 5);
INSERT INTO participa (id_tour, rut_guia, id_categoria) VALUES (1, '26640457k', 1);
INSERT INTO participa (id_tour, rut_guia, id_categoria) VALUES (2, '266304578', 1);
INSERT INTO participa (id_tour, rut_guia, id_categoria) VALUES (2, '26640457k', 1);
INSERT INTO participa (id_tour, rut_guia, id_categoria) VALUES (3, '26644457k', 1);
INSERT INTO asociado (id_tour, id_lugar, fecha_llegada, hora_llegada, fecha_salida, hora_salida) VALUES (1, 1, '2018-01-10', '04:15', '2018-01-10', '05:15');
INSERT INTO asociado (id_tour, id_lugar, fecha_llegada, hora_llegada, fecha_salida, hora_salida) VALUES (2, 2, '2018-02-22', '09:35', '2018-02-22', '10:35');
INSERT INTO asociado (id_tour, id_lugar, fecha_llegada, hora_llegada, fecha_salida, hora_salida) VALUES (3, 3, '2018-03-30', '16:40', '2018-03-30', '19:10');
INSERT INTO asociado (id_tour, id_lugar, fecha_llegada, hora_llegada, fecha_salida, hora_salida) VALUES (4, 3, '2018-10-15', '12:40', '2018-10-15', '13:10');
INSERT INTO asociado (id_tour, id_lugar, fecha_llegada, hora_llegada, fecha_salida, hora_salida) VALUES (2, 4, '2018-10-15', '12:40', '2018-10-15', '13:10');
INSERT INTO requerir_auto (id_tour, patente, chofer) VALUES (1, 'as45fe', 'Luke Hobbs');
INSERT INTO requerir_auto (id_tour, patente, chofer) VALUES (1, 'lj58bv', 'Dominic Toretto');
INSERT INTO requerir_auto (id_tour, patente, chofer) VALUES (1, '49fd38', 'Roman Pearce');

BIN
doc/Informe2.pdf Normal file

Binary file not shown.

122
doc/Informe2.tex Normal file
View File

@ -0,0 +1,122 @@
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{array}
\usepackage{adjustbox}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
\usepackage{amsmath}
\usepackage{verbatim}
\usepackage{listings}
\lstset{
basicstyle=\footnotesize\ttfamily,
columns=flexible,
breaklines=true,
inputencoding=utf8,
extendedchars=true,
literate={á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 {ñ}{{\~n}}1 {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 {Ñ}{{\~N}}1
}
\usepackage{titling}
\renewcommand\maketitlehooka{\null\mbox{}\vfill}
\renewcommand\maketitlehookd{\vfill\null}
\usepackage{hyperref}
\hypersetup{colorlinks=true,allcolors=black}
\usepackage{hypcap}
\title{\textbf{Proyecto Semestral de Base de Datos\\Entrega 2}}
\author{Christopher Cromer\\\\Profesora Valeria Beratto\\Sección 1}
\date{\today}
\pretitle{%
\begin{center}
\LARGE
\includegraphics[width=4cm]{ubblogo.png}\\[\bigskipamount]
}
\posttitle{\end{center}}
\begin{document}
\clearpage
\hypersetup{pageanchor=false}
\begin{titlingpage}
\maketitle
\end{titlingpage}
\thispagestyle{empty}
\newpage
\clearpage
\thispagestyle{empty}
\tableofcontents
\newpage
\hypersetup{pageanchor=true}
\pagenumbering{arabic}
\section{Introducción}
El objetivo de este trabajo es modelar un sistema por el Servicio Nacional de Turismo(SERNATUR) con el propósito de almacenar y consultar a un base de datos de PostgreSQL con información sobre el turismo.
\newpage
\section{Consultas}
\subsection{Vista \texorpdfstring{$Q_1$}{Lg}}
\lstinputlisting{Informe2_vistaQ1.sql}
\subsubsection{Resultado de \texorpdfstring{$Q_1$}{Lg}}
\begin{center}
\includegraphics[keepaspectratio]{Informe2_Q1.png}
\end{center}
\subsection{Vistas \texorpdfstring{$Q_2$}{Lg}}
\lstinputlisting{Informe2_vistaQ2.sql}
\subsubsection{Resultado de \texorpdfstring{$Q_2$}{Lg}}
\begin{center}
\includegraphics[keepaspectratio]{Informe2_Q2.png}
\end{center}
\subsection{Vistas \texorpdfstring{$Q_3$}{Lg}}
\lstinputlisting{Informe2_vistaQ3.sql}
\subsubsection{Resultado de \texorpdfstring{$Q_3$}{Lg}}
\begin{center}
\includegraphics[keepaspectratio]{Informe2_Q3.png}
\end{center}
\subsection{Vistas \texorpdfstring{$Q_4$}{Lg}}
\lstinputlisting{Informe2_vistaQ4.sql}
\subsubsection{Resultado de \texorpdfstring{$Q_4$}{Lg}}
\begin{center}
\includegraphics[keepaspectratio]{Informe2_Q4.png}
\end{center}
\subsection{Vistas \texorpdfstring{$Q_5$}{Lg}}
\lstinputlisting{Informe2_vistaQ5.sql}
\subsubsection{Resultado de \texorpdfstring{$Q_5$}{Lg}}
\begin{center}
\includegraphics[keepaspectratio]{Informe2_Q5.png}
\end{center}
\newpage
\section{Script SQL}
\subsection{Crear tablas}
\lstinputlisting{Informe1corregido_creartablas.sql}
\newpage
\subsection{Insertar duplas}
\lstinputlisting{Informe1corregido_insertarduplas.sql}
\end{document}

BIN
doc/Informe2_Q1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
doc/Informe2_Q2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
doc/Informe2_Q3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
doc/Informe2_Q4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
doc/Informe2_Q5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

18
doc/Informe2_vistaQ1.sql Normal file
View File

@ -0,0 +1,18 @@
CREATE VIEW REGIONES_SINDESCUENTO(nombreRegion, cantidad)
AS (
SELECT nombre_region, COUNT(R2.rut_turista)
FROM region R
JOIN ciudad C ON (C.id_region = R.id_region)
JOIN tour T ON (T.id_ciudad = C.id_ciudad)
JOIN realiza R2 ON (R2.id_tour = T.id_tour)
WHERE (
EXISTS(SELECT fecha_llegada
FROM asociado
WHERE (id_tour = T.id_tour AND fecha_llegada BETWEEN '2018-11-01' AND '2018-11-30')
) AND
R2.id_descuento = 2
)
GROUP BY (R.nombre_region)
);
SELECT nombreRegion, cantidad FROM REGIONES_SINDESCUENTO ORDER BY cantidad DESC;

33
doc/Informe2_vistaQ2.sql Normal file
View File

@ -0,0 +1,33 @@
CREATE VIEW VALORES_TOURS(idT, nombreT, TotalVentas)
AS (
SELECT T.id_tour, T.nombre_tour,
((CASE
WHEN T.minima_personas <= (SELECT COUNT(rut_turista) FROM realiza WHERE (id_tour = T.id_tour))
THEN (SELECT costo_grupal FROM tour WHERE (id_tour = T.id_tour))
ELSE (SELECT costo_indiv FROM tour WHERE (id_tour = T.id_tour))
END) * COUNT(rut_turista)) AS cantidad
FROM tour T
JOIN realiza R ON (T.id_tour = R.id_tour)
GROUP BY (T.id_tour)
);
CREATE VIEW TOUR_DESCUENTOS(idT, nombreT, TotalDescuentos)
AS (
SELECT T.id_tour, T.nombre_tour,
SUM(DISTINCT (SELECT porcentaje FROM descuento WHERE (id_descuento = R.id_descuento)) *
(SELECT COUNT(rut_turista) FROM realiza WHERE (id_tour = R.id_tour AND id_descuento = R.id_descuento)) *
(CASE
WHEN T.minima_personas <= (SELECT COUNT(rut_turista) FROM realiza WHERE (id_tour = T.id_tour))
THEN (SELECT costo_grupal FROM tour WHERE (id_tour = T.id_tour))
ELSE (SELECT costo_indiv FROM tour WHERE (id_tour = T.id_tour))
END)) AS test
FROM tour T
JOIN realiza R ON (T.id_tour = R.id_tour)
WHERE (R.id_descuento != 2)
GROUP BY (T.id_tour)
);
SELECT V.nombreT, (V.TotalVentas - COALESCE(MAX(T.TotalDescuentos), 0)) AS ValorTotalRecibido
FROM VALORES_TOURS V
FULL JOIN TOUR_DESCUENTOS T ON (T.idT = V.idT)
GROUP BY (V.nombreT, V.TotalVentas);

19
doc/Informe2_vistaQ3.sql Normal file
View File

@ -0,0 +1,19 @@
CREATE VIEW TOTAL_COORDINADORES(idT, nombreT, TotalCoordinadores)
AS (
SELECT T.id_tour, T.nombre_tour, COUNT(DISTINCT P.rut_guia)
FROM participa P
JOIN tour T ON (T.id_tour = P.id_tour)
JOIN guia G ON (G.rut_guia = P.rut_guia)
JOIN categoria C ON (C.id_categoria = P.id_categoria)
JOIN posee P2 ON (G.rut_guia = P2.rut_guia)
JOIN asociado A ON (A.id_tour = T.id_tour)
JOIN lugar L ON (L.id_lugar = A.id_lugar)
WHERE (
C.descripcion_categoria = 'Coordinador' AND
L.nivel = 3 AND
(SELECT COUNT(rut_guia) FROM posee WHERE (rut_guia = G.rut_guia)) > 3
)
GROUP BY (T.id_tour)
);
SELECT nombreT, TotalCoordinadores FROM TOTAL_COORDINADORES ORDER BY TotalCoordinadores DESC;

22
doc/Informe2_vistaQ4.sql Normal file
View File

@ -0,0 +1,22 @@
CREATE VIEW TOTAL_TURISTAS(idT, nombreT, TotalTuristas)
AS (
SELECT T.id_tour, T.nombre_tour, COUNT(R.rut_turista)
FROM tour T
JOIN realiza R ON (T.id_tour = R.id_tour)
JOIN asociado A ON (T.id_tour = A.id_tour)
JOIN lugar l ON (A.id_lugar = L.id_lugar)
WHERE (
L.nivel >= 5 AND
(A.fecha_llegada BETWEEN '2018-10-01' AND '2018-10-31') AND
NOT EXISTS (
SELECT id_enfermedad
FROM tiene_enfermedad T2
WHERE (T2.rut_turista = R.rut_turista AND
(T2.id_enfermedad = 1 OR T2.id_enfermedad = 3)
)
)
)
GROUP BY (T.id_tour)
);
SELECT nombreT, TotalTuristas FROM TOTAL_TURISTAS ORDER BY TotalTuristas DESC;

17
doc/Informe2_vistaQ5.sql Normal file
View File

@ -0,0 +1,17 @@
CREATE VIEW TOTAL_ARRIENDOS(TotalArriendo)
AS (SELECT COUNT(A.patente)
FROM arrienda A
JOIN requerir_auto R ON (R.patente = A.patente)
JOIN tour T ON (T.id_tour = R.id_tour)
JOIN asociado A2 ON (T.id_tour = A2.id_tour)
WHERE (A2.fecha_llegada BETWEEN '2018-01-01' AND '2018-02-28')
);
CREATE VIEW TOTAL_VEHICULOS(TotalVeh)
AS (SELECT COUNT(patente)
FROM vehiculo
);
SELECT
(cast(T1.totalarriendo AS DECIMAL(3,2)) / cast(T2.totalveh AS DECIMAL(3,2))) AS porcentaje
FROM total_arriendos AS T1, total_vehiculos AS T2;

BIN
doc/MERcorregido.dia Normal file

Binary file not shown.

BIN
doc/MERcorregido.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

View File

@ -31,6 +31,9 @@ if docs_enabled
endif
install_data('trabajoSemestral(E1).pdf', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
install_data('trabajoSemestral(E2).pdf', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
install_data('Informe1.pdf', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
install_data('MER.dia', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
install_data('MER.png', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
install_data('../LICENSE', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
install_data('../README.md', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))

Binary file not shown.

View File

@ -40,6 +40,8 @@ namespace Sernatur {
return;
}
// TODO: if config file does not exist, then fallback to gsettings schemas
Config config = Config();
if (!config.read_file ("/etc/sernatur/sernatur.conf")) {
stderr.printf ("%s\n", config.error_message ());