finish second assignment
This commit is contained in:
parent
cd9927e501
commit
7f24927c95
@ -3,7 +3,7 @@
|
|||||||
curdir=`pwd`
|
curdir=`pwd`
|
||||||
rm -rf buildtmp
|
rm -rf buildtmp
|
||||||
mkdir 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
|
ninja -C buildtmp install
|
||||||
rm -rf buildtmp
|
rm -rf buildtmp
|
||||||
cp README.md /tmp/sernatur
|
cp README.md /tmp/sernatur
|
||||||
|
BIN
doc/Informe1.pdf
BIN
doc/Informe1.pdf
Binary file not shown.
131
doc/Informe1.tex
131
doc/Informe1.tex
@ -6,8 +6,8 @@
|
|||||||
\usepackage{adjustbox}
|
\usepackage{adjustbox}
|
||||||
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
|
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm,a4paper]{geometry}
|
||||||
\usepackage{amsmath}
|
\usepackage{amsmath}
|
||||||
|
|
||||||
\usepackage{verbatim}
|
\usepackage{verbatim}
|
||||||
|
|
||||||
\usepackage{listings}
|
\usepackage{listings}
|
||||||
\lstset{
|
\lstset{
|
||||||
basicstyle=\footnotesize\ttfamily,
|
basicstyle=\footnotesize\ttfamily,
|
||||||
@ -20,7 +20,7 @@
|
|||||||
\renewcommand\maketitlehookd{\vfill\null}
|
\renewcommand\maketitlehookd{\vfill\null}
|
||||||
|
|
||||||
\usepackage{hyperref}
|
\usepackage{hyperref}
|
||||||
\hypersetup{pdftex,colorlinks=true,allcolors=black,bookmarks}
|
\hypersetup{colorlinks=true,allcolors=black}
|
||||||
\usepackage{hypcap}
|
\usepackage{hypcap}
|
||||||
|
|
||||||
\title{\textbf{Proyecto Semestral de Base de Datos\\Entrega 1}}
|
\title{\textbf{Proyecto Semestral de Base de Datos\\Entrega 1}}
|
||||||
@ -37,6 +37,7 @@
|
|||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
\clearpage
|
\clearpage
|
||||||
|
\hypersetup{pageanchor=false}
|
||||||
\begin{titlingpage}
|
\begin{titlingpage}
|
||||||
\maketitle
|
\maketitle
|
||||||
\end{titlingpage}
|
\end{titlingpage}
|
||||||
@ -49,6 +50,7 @@
|
|||||||
\tableofcontents
|
\tableofcontents
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
|
\hypersetup{pageanchor=true}
|
||||||
\pagenumbering{arabic}
|
\pagenumbering{arabic}
|
||||||
\section{Introducción}
|
\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.
|
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
|
\newpage
|
||||||
\section{Modelo Relacional}
|
\section{Modelo Relacional}
|
||||||
\begin{center}
|
\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}
|
\end{center}
|
||||||
tour(\underline{id\_tour}, nombre\_tour, costo\_indiv, costo\_grupal, minima\_personas, \textbf{id\_ciudad})\\
|
tour(\underline{id\_tour}, nombre\_tour, costo\_indiv, costo\_grupal, minima\_personas, \textbf{id\_ciudad})\bigskip
|
||||||
\newline
|
|
||||||
lugar(\underline{id\_lugar}, nombre\_lugar, valor\_entrada, nivel, \textbf{id\_ciudad})\\
|
\noindent
|
||||||
\newline
|
lugar(\underline{id\_lugar}, nombre\_lugar, valor\_entrada, nivel, \textbf{id\_ciudad})\bigskip
|
||||||
asociado(\textbf{id\_tour}, \textbf{id\_lugar}, fecha\_llegada, hora\_llegada, fecha\_salida, hora\_salida)\\
|
|
||||||
\newline
|
\noindent
|
||||||
turista(\underline{rut\_turista}, nombre\_turista, fecha\_nacimiento, \textbf{id\_contacto})\\
|
asociado(\textbf{id\_tour}, \textbf{id\_lugar}, fecha\_llegada, hora\_llegada, fecha\_salida, hora\_salida)\bigskip
|
||||||
\newline
|
|
||||||
contacto\_emergencia(\underline{id\_contacto}, telefono\_emergencia, nombre\_emergencia)\\
|
\noindent
|
||||||
\newline
|
turista(\underline{rut\_turista}, nombre\_turista, fecha\_nacimiento, \textbf{id\_contacto})\bigskip
|
||||||
enfermedad(\underline{id\_enfermedad}, descripcion\_enfermedad)\\
|
|
||||||
\newline
|
\noindent
|
||||||
tiene\_enfermedad(\textbf{rut\_turista}, \textbf{id\_enfermedad})\\
|
contacto\_emergencia(\underline{id\_contacto}, telefono\_emergencia, nombre\_emergencia)\bigskip
|
||||||
\newline
|
|
||||||
compra(\textbf{id\_tour}, \textbf{rut\_turista}, valor)\\
|
\noindent
|
||||||
\newline
|
enfermedad(\underline{id\_enfermedad}, descripcion\_enfermedad)\bigskip
|
||||||
realiza(\textbf{id\_tour}, \textbf{rut\_turista})\\
|
|
||||||
\newline
|
\noindent
|
||||||
vehiculo(\underline{patente}, ano\_vehiculo, marca, capacidad, chofer)\\
|
tiene\_enfermedad(\textbf{rut\_turista}, \textbf{id\_enfermedad})\bigskip
|
||||||
\newline
|
|
||||||
empresa(\underline{rut\_empresa}, nombre\_empresa, contacto, telefono)\\
|
\noindent
|
||||||
\newline
|
compra(\textbf{id\_tour}, \textbf{rut\_turista}, valor)\bigskip
|
||||||
arrienda(\textbf{patente}, \textbf{rut\_empresa}, precio, fecha\_devolucion)\\
|
|
||||||
\newline
|
\noindent
|
||||||
ciudad(\underline{id\_ciudad}, nombre\_ciudad, \textbf{id\_region})\\
|
realiza(\textbf{id\_tour}, \textbf{rut\_turista})\bigskip
|
||||||
\newline
|
|
||||||
region(\underline{id\_region}, nombre\_region)\\
|
\noindent
|
||||||
\newline
|
vehiculo(\underline{patente}, ano\_vehiculo, marca, capacidad, chofer)\bigskip
|
||||||
guia(\underline{rut\_guia}, nombre\_guia)\\
|
|
||||||
\newline
|
\noindent
|
||||||
especialidad(\underline{id\_especialidad}, descripcion\_especialidad)\\
|
empresa(\underline{rut\_empresa}, nombre\_empresa, contacto, telefono)\bigskip
|
||||||
\newline
|
|
||||||
posee(\textbf{rut\_guia}, \textbf{id\_especialidad}, nivel\_especialidad)\\
|
\noindent
|
||||||
\newline
|
arrienda(\textbf{patente}, \textbf{rut\_empresa}, precio, fecha\_devolucion)\bigskip
|
||||||
categoria(\underline{id\_categoria}, descripcion\_categoria)\\
|
|
||||||
\newline
|
\noindent
|
||||||
direccion(\textbf{rut\_guia}, \textbf{id\_ciudad}, calle, numero)\\
|
ciudad(\underline{id\_ciudad}, nombre\_ciudad, \textbf{id\_region})\bigskip
|
||||||
\newline
|
|
||||||
|
\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})
|
participa(\textbf{id\_tour}, \textbf{rut\_guia}, \textbf{id\_categoria})
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\section{Justificación de Modelo Relacional}
|
\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
|
\newpage
|
||||||
\section{Script SQL}
|
\section{Script SQL}
|
||||||
|
|
||||||
\subsection{Crear tablas}
|
\subsection{Crear tablas}
|
||||||
|
|
||||||
\lstinputlisting{Informecreartablas.sql}
|
\lstinputlisting{Informe1_creartablas.sql}
|
||||||
|
|
||||||
\newpage
|
\newpage
|
||||||
\subsection{Insertar duplas}
|
\subsection{Insertar duplas}
|
||||||
|
|
||||||
\lstinputlisting{Informeinsertarduplas.sql}
|
\lstinputlisting{Informe1_insertarduplas.sql}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|
||||||
|
@ -52,13 +52,13 @@ CREATE TABLE ciudad(id_ciudad SMALLSERIAL UNIQUE,
|
|||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE tour(id_tour SERIAL UNIQUE,
|
CREATE TABLE tour(id_tour SERIAL UNIQUE,
|
||||||
nombre_tour VARCHAR(50) NOT NULL,
|
nombre_tour VARCHAR(50) NOT NULL,
|
||||||
costo_indiv INT NOT NULL CHECK (costo_indiv > costo_grupal),
|
costo_indiv INT NOT NULL CHECK (costo_indiv > costo_grupal),
|
||||||
costo_grupal INT NOT NULL CHECK (costo_grupal > 0),
|
costo_grupal INT NOT NULL CHECK (costo_grupal > 0),
|
||||||
minima_personas INT NOT NULL CHECK (minima_personas > 0),
|
minima_personas INT NOT NULL CHECK (minima_personas > 0),
|
||||||
id_ciudad SMALLINT,
|
id_ciudad SMALLINT,
|
||||||
PRIMARY KEY (id_tour),
|
PRIMARY KEY (id_tour),
|
||||||
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE RESTRICT
|
FOREIGN KEY (id_ciudad) REFERENCES ciudad (id_ciudad) ON DELETE RESTRICT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE lugar(id_lugar SMALLSERIAL UNIQUE,
|
CREATE TABLE lugar(id_lugar SMALLSERIAL UNIQUE,
|
BIN
doc/Informe1corregido.pdf
Normal file
BIN
doc/Informe1corregido.pdf
Normal file
Binary file not shown.
168
doc/Informe1corregido.tex
Normal file
168
doc/Informe1corregido.tex
Normal 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}
|
||||||
|
|
142
doc/Informe1corregido_creartablas.sql
Normal file
142
doc/Informe1corregido_creartablas.sql
Normal 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
|
||||||
|
);
|
97
doc/Informe1corregido_insertarduplas.sql
Normal file
97
doc/Informe1corregido_insertarduplas.sql
Normal 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
BIN
doc/Informe2.pdf
Normal file
Binary file not shown.
122
doc/Informe2.tex
Normal file
122
doc/Informe2.tex
Normal 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
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
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
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
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
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
18
doc/Informe2_vistaQ1.sql
Normal 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
33
doc/Informe2_vistaQ2.sql
Normal 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
19
doc/Informe2_vistaQ3.sql
Normal 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
22
doc/Informe2_vistaQ4.sql
Normal 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
17
doc/Informe2_vistaQ5.sql
Normal 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
BIN
doc/MERcorregido.dia
Normal file
Binary file not shown.
BIN
doc/MERcorregido.png
Normal file
BIN
doc/MERcorregido.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 130 KiB |
@ -31,6 +31,9 @@ if docs_enabled
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
install_data('trabajoSemestral(E1).pdf', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
|
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.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('../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()))
|
install_data('../README.md', install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()))
|
||||||
|
BIN
doc/trabajoSemestral(E2).pdf
Normal file
BIN
doc/trabajoSemestral(E2).pdf
Normal file
Binary file not shown.
@ -40,6 +40,8 @@ namespace Sernatur {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: if config file does not exist, then fallback to gsettings schemas
|
||||||
|
|
||||||
Config config = Config();
|
Config config = Config();
|
||||||
if (!config.read_file ("/etc/sernatur/sernatur.conf")) {
|
if (!config.read_file ("/etc/sernatur/sernatur.conf")) {
|
||||||
stderr.printf ("%s\n", config.error_message ());
|
stderr.printf ("%s\n", config.error_message ());
|
||||||
|
Loading…
Reference in New Issue
Block a user