Apostolos Fanakis
6 years ago
commit
8cf655dcc2
32 changed files with 1957 additions and 0 deletions
@ -0,0 +1,260 @@ |
|||
## Core latex/pdflatex auxiliary files: |
|||
*.aux |
|||
*.lof |
|||
*.log |
|||
*.lot |
|||
*.fls |
|||
*.out |
|||
*.toc |
|||
*.fmt |
|||
*.fot |
|||
*.cb |
|||
*.cb2 |
|||
.*.lb |
|||
|
|||
## Intermediate documents: |
|||
*.dvi |
|||
*.xdv |
|||
*-converted-to.* |
|||
# these rules might exclude image files for figures etc. |
|||
# *.ps |
|||
# *.eps |
|||
# *.pdf |
|||
|
|||
## Generated if empty string is given at "Please type another file name for output:" |
|||
.pdf |
|||
|
|||
## Bibliography auxiliary files (bibtex/biblatex/biber): |
|||
*.bbl |
|||
*.bcf |
|||
*.blg |
|||
*-blx.aux |
|||
*-blx.bib |
|||
*.run.xml |
|||
|
|||
## Build tool auxiliary files: |
|||
*.fdb_latexmk |
|||
*.synctex |
|||
*.synctex(busy) |
|||
*.synctex.gz |
|||
*.synctex.gz(busy) |
|||
*.pdfsync |
|||
|
|||
## Build tool directories for auxiliary files |
|||
# latexrun |
|||
latex.out/ |
|||
|
|||
## Auxiliary and intermediate files from other packages: |
|||
# algorithms |
|||
*.alg |
|||
*.loa |
|||
|
|||
# achemso |
|||
acs-*.bib |
|||
|
|||
# amsthm |
|||
*.thm |
|||
|
|||
# beamer |
|||
*.nav |
|||
*.pre |
|||
*.snm |
|||
*.vrb |
|||
|
|||
# changes |
|||
*.soc |
|||
|
|||
# comment |
|||
*.cut |
|||
|
|||
# cprotect |
|||
*.cpt |
|||
|
|||
# elsarticle (documentclass of Elsevier journals) |
|||
*.spl |
|||
|
|||
# endnotes |
|||
*.ent |
|||
|
|||
# fixme |
|||
*.lox |
|||
|
|||
# feynmf/feynmp |
|||
*.mf |
|||
*.mp |
|||
*.t[1-9] |
|||
*.t[1-9][0-9] |
|||
*.tfm |
|||
|
|||
#(r)(e)ledmac/(r)(e)ledpar |
|||
*.end |
|||
*.?end |
|||
*.[1-9] |
|||
*.[1-9][0-9] |
|||
*.[1-9][0-9][0-9] |
|||
*.[1-9]R |
|||
*.[1-9][0-9]R |
|||
*.[1-9][0-9][0-9]R |
|||
*.eledsec[1-9] |
|||
*.eledsec[1-9]R |
|||
*.eledsec[1-9][0-9] |
|||
*.eledsec[1-9][0-9]R |
|||
*.eledsec[1-9][0-9][0-9] |
|||
*.eledsec[1-9][0-9][0-9]R |
|||
|
|||
# glossaries |
|||
*.acn |
|||
*.acr |
|||
*.glg |
|||
*.glo |
|||
*.gls |
|||
*.glsdefs |
|||
|
|||
# gnuplottex |
|||
*-gnuplottex-* |
|||
|
|||
# gregoriotex |
|||
*.gaux |
|||
*.gtex |
|||
|
|||
# htlatex |
|||
*.4ct |
|||
*.4tc |
|||
*.idv |
|||
*.lg |
|||
*.trc |
|||
*.xref |
|||
|
|||
# hyperref |
|||
*.brf |
|||
|
|||
# knitr |
|||
*-concordance.tex |
|||
# TODO Comment the next line if you want to keep your tikz graphics files |
|||
*.tikz |
|||
*-tikzDictionary |
|||
|
|||
# listings |
|||
*.lol |
|||
|
|||
# makeidx |
|||
*.idx |
|||
*.ilg |
|||
*.ind |
|||
*.ist |
|||
|
|||
# minitoc |
|||
*.maf |
|||
*.mlf |
|||
*.mlt |
|||
*.mtc[0-9]* |
|||
*.slf[0-9]* |
|||
*.slt[0-9]* |
|||
*.stc[0-9]* |
|||
|
|||
# minted |
|||
_minted* |
|||
*.pyg |
|||
|
|||
# morewrites |
|||
*.mw |
|||
|
|||
# nomencl |
|||
*.nlg |
|||
*.nlo |
|||
*.nls |
|||
|
|||
# pax |
|||
*.pax |
|||
|
|||
# pdfpcnotes |
|||
*.pdfpc |
|||
|
|||
# sagetex |
|||
*.sagetex.sage |
|||
*.sagetex.py |
|||
*.sagetex.scmd |
|||
|
|||
# scrwfile |
|||
*.wrt |
|||
|
|||
# sympy |
|||
*.sout |
|||
*.sympy |
|||
sympy-plots-for-*.tex/ |
|||
|
|||
# pdfcomment |
|||
*.upa |
|||
*.upb |
|||
|
|||
# pythontex |
|||
*.pytxcode |
|||
pythontex-files-*/ |
|||
|
|||
# tcolorbox |
|||
*.listing |
|||
|
|||
# thmtools |
|||
*.loe |
|||
|
|||
# TikZ & PGF |
|||
*.dpth |
|||
*.md5 |
|||
*.auxlock |
|||
|
|||
# todonotes |
|||
*.tdo |
|||
|
|||
# vhistory |
|||
*.hst |
|||
*.ver |
|||
|
|||
# easy-todo |
|||
*.lod |
|||
|
|||
# xcolor |
|||
*.xcp |
|||
|
|||
# xmpincl |
|||
*.xmpi |
|||
|
|||
# xindy |
|||
*.xdy |
|||
|
|||
# xypic precompiled matrices |
|||
*.xyc |
|||
|
|||
# endfloat |
|||
*.ttt |
|||
*.fff |
|||
|
|||
# Latexian |
|||
TSWLatexianTemp* |
|||
|
|||
## Editors: |
|||
# WinEdt |
|||
*.bak |
|||
*.sav |
|||
|
|||
# Texpad |
|||
.texpadtmp |
|||
|
|||
# LyX |
|||
*.lyx~ |
|||
|
|||
# Kile |
|||
*.backup |
|||
|
|||
# KBibTeX |
|||
*~[0-9]* |
|||
|
|||
# auto folder when using emacs and auctex |
|||
./auto/* |
|||
*.el |
|||
|
|||
# expex forward references with \gathertags |
|||
*-tags.tex |
|||
|
|||
# standalone packages |
|||
*.sta |
|||
*.pdf |
@ -0,0 +1,7 @@ |
|||
\chapter{Εισαγωγή} |
|||
|
|||
Η παρούσα εργασία εκπονήθηκε στα πλαίσια του μαθήματος "Βάσεις Δεδομένων" του ενάτου (9\textsuperscript{ου}) εξαμήνου του τμήματος Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Αριστοτέλειου Πανεπιστημίου Θεσσαλονίκης. Ζητούμενο του πρώτου παραδοτέου της εργασίας είναι η εύρεση και επιλογή ενός πρωτότυπου θέματος, η περιγραφή και σχεδίαση μίας βάσης δεδομένων οντοτήτων-συσχετίσεων καθώς και η μετατροπή της βάσης σε σχεσιακό μοντέλο. Σε επόμενα παραδοτέα θα υλοποιηθούν η βάση και ένα σύστημα διεπαφής χρήστη (front end/UI). |
|||
|
|||
\input{1.introduction/1.1.purpose.tex} |
|||
\input{1.introduction/1.2.description.tex} |
|||
\input{1.introduction/1.3.requirements.tex} |
@ -0,0 +1,7 @@ |
|||
\section{Σκοπός Εφαρμογής} |
|||
|
|||
Έναυσμα για την επιλογή του θέματος αποτελεί ένα κοινό πρόβλημα που αντιμετωπίζουν άτομα που επισκέπτονται πόλεις του εξωτερικού και πιο συγκεκριμένα, περιοχές όπου η τοπική διάλεκτος δεν γνωστή από τα άτομα αυτά. Πολλές φορές, η επιλογή ενός γεύματος ή ποτού από το μενού ενός καταστήματος παρουσιάζει ιδιαίτερες δυσκολίες. Ακόμα και όταν ο πελάτης μιλά Αγγλικά, σε πολλά εστιατόρια τα μενού δε παρέχονται παρά μόνο στη μητρική γλώσσα της εκάστοτε χώρας. Επίσης, οι υπάλληλοι των καταστημάτων συχνά δεν γνωρίζουν επαρκώς την Αγγλική γλώσσα, έτσι οι συνεννοήσεις με στόχο την επεξήγηση των διάφορων επιλογών που προσφέρονται είναι δύσκολες, χρονοβόρες και ενίοτε άκαρπες. |
|||
|
|||
Τελικά, αρκετά συχνά οι πελάτες καταλήγουν απογοητευμένοι από την επιλογή τους. Το παραπάνω πρόβλημα είναι σημαντικότερο όταν πρόκειται για άτομα που ακολουθούν συγκεκριμένες δίαιτες, όπως διαβητικοί, αλλεργικοί, χορτοφάγοι ή κάποια άλλη θρησκευτική δίαιτα. Σε αυτές τις περιπτώσεις και ειδικά σε όσες αφορούν σε θέματα υγείας, είναι ιδιαίτερα σημαντικό τα άτομα να γνωρίζουν τα συστατικά των πιάτων ή ποτών που τους ενδιαφέρουν πριν προχωρήσουν στην παραγγελία τους. |
|||
|
|||
Οι υπάρχουσες λύσεις βασίζονται σε υπηρεσίες γενικότερου τουριστικού ενδιαφέροντος όπως εφαρμογές τύπου TripAdvisor ή τα δεδομένα που συλλέγει η Google, κάποιες από τις οποίες παρέχουν περιορισμένες πληροφορίες (όπως η καταλληλότητα των εστιατορίων για χορτοφάγους), που όμως δεν δίνουν μία επαρκή λύση στο πρόβλημα. |
@ -0,0 +1,9 @@ |
|||
\section{Περιγραφή Εφαρμογής} |
|||
|
|||
Η λύση, που προτείνεται εδώ, είναι η σχεδίαση και δημιουργία μίας εφαρμογής, η οποία προέρχεται από μία βάση δεδομένων που θα αποθηκεύει τα πιάτα και ποτά που προσφέρει κάθε κατάστημα ξεχωριστά, καθώς και τα συστατικά τους. |
|||
|
|||
Οι απλοί χρήστες (πελάτες) θα έχουν πρόσβαση σε μία μεγάλη βάση δεδομένων, ώστε να ενημερώνονται για τη σύσταση του καθενός από τα πιάτα και ποτά πριν κάνουν την επιλογή τους. Ακόμα, θα δίνεται η δυνατότητα φιλτραρίσματος των επιλογών και ο αποκλεισμός όσων είναι ακατάλληλα για τη δίαιτα που ακολουθεί ο χρήστης. Θα μπορούν να προτείνουν τη προσθήκη νέων καταστημάτων. Οι προτάσεις αυτές, αφού γίνουν αποδεκτές από κάποιον διαχειριστή, θα γίνονται διαθέσιμες στους υπόλοιπους χρήστες. Τέλος, έχουν πρόσβαση στο σύνολο των κριτικών για τα πιάτα ή ποτά που προσφέρει κάθε κατάστημα. |
|||
|
|||
Μία άλλη κατηγορία χρηστών είναι οι ιδιοκτήτες των καταστημάτων. Η εφαρμογή θα δίνει σε αυτούς την ευκαιρία να επιδείξουν τη ποικιλία των πιάτων που προσφέρουν και των υλικών που χρησιμοποιούν, καθώς επίσης την γκάμα από δίαιτες που υποστηρίζει το μενού τους. Ακόμα, θα τους δίνεται η ευκαιρία να διαβάσουν κριτικές για κάθε πιάτο ή ποτό ξεχωριστά με σκοπό τη βελτίωσή τους. |
|||
|
|||
Η παραπάνω λύση παρέχει ορισμένα εμφανή προτερήματα σε σχέση με προηγούμενες προσπάθειες. Η βάση θα παρέχει περισσότερες και πιο αναλυτικές πληροφορίες για κάθε πιάτο και ποτό ξεχωριστά, αλλά και για την συγκεκριμένη υλοποίησή του από το εκάστοτε κατάστημα. Αυτό δίνει μία καλύτερη εικόνα των επιλογών στον χρήστη. Ταυτόχρονα, κάθε χρήστης θα μπορεί να αποθηκεύσει πληροφορίες σχετικές με τη δίαιτα που ακολουθεί, ώστε να γίνεται αυτόματα το φιλτράρισμα των επιλογών όπως περιγράφηκε παραπάνω. |
@ -0,0 +1,25 @@ |
|||
\section{Απαιτήσεις Εφαρμογής σε Δεδομένα} |
|||
|
|||
H βάση που σχεδιάζουμε στοχεύει στην αποθήκευση δεδομένων, με σκοπό την παροχή υπηρεσιών υψηλής ποιότητας στους χρήστες. Παρακάτω παρουσιάζονται κάποιες απαιτήσεις σε όγκο δεδομένων σχετικά με τη βάση. |
|||
|
|||
\begin{enumerate}[wide=0pt, listparindent=1.25em, parsep=0pt] |
|||
\item Αριθμός εστιατρίων, καφέ, μπαρ και γενικότερα καταστημάτων εστίασης, που υπάρχουν περίπου στη Θεσσαλονίκη |
|||
|
|||
\vspace{1.2em} |
|||
Πραγματοποιώντας μία έρευνα online~\cite{numberOfRestaurants}, βρήκαμε ότι σε πόλεις με αριθμό κατοίκων περίπου το μισό της Θεσσαλονίκης, ο αριθμός καταστημάτων ανέρχεται στα 400, ενώ σε πόλεις όπως το Τόκιο αριθμούμε περί τα 150.000 καταστήματα. Λαμβάνοντας υπόψιν τα δεδομένα αυτά, εκτιμούμε ότι η Θεσσαλονίκη είναι αρκετά λογικό να έχει περίπου 15.000 χιλιάδες καταστήματα, τα οποία προφέρουν φαγητά ή/και ποτά. |
|||
\vspace{1.2em} |
|||
\item Αριθμός αντικειμένων που έχει περίπου το μέσο μενού |
|||
|
|||
\vspace{1.2em} |
|||
Ύστερα από μία μικρή έρευνα σε μενού καταστημάτων της Θεσσαλονίκης~\cite{numberOfMenuItems}, υποθέτουμε ότι ο μέσος αριθμός φαγητών και ποτών που προσφέρει ένα κατάστημα είναι 30 αντικείμενα. |
|||
\vspace{1.2em} |
|||
\item Αριθμός συστατικών που υπάρχουν περίπου σε κάθε πιάτο και κάθε ποτό |
|||
|
|||
\vspace{1.2em} |
|||
Υποθέτουμε ότι ένα μέσο πιάτο έχει περίπου 7-8 συστατικά, ενώ κάθε ποτό έχει 2-4 συστατικά. |
|||
\vspace{1.2em} |
|||
\item Ποσοστό επί του συνόλου που είναι λογικό να χρησιμοποιεί μια τέτοια εφαρμογή |
|||
|
|||
\vspace{1.2em} |
|||
Για να προσδιορίσουμε αυτό το ποσοστό, υποθέτουμε ότι η εφαρμογή μας έχει προωθηθεί και έχει αποκτήσει υπόσταση ως ευρέως χρησιμοποιούμενη. Έτσι, ένα ποσοστό με εύρος 5-10\% είναι λογικό να χρησιμοποιεί την εφαρμογή μας, όταν σχεδιάζει το ταξίδι του στο εξωτερικό. |
|||
\end{enumerate} |
@ -0,0 +1,14 @@ |
|||
\chapter{Κατηγορίες χρηστών και απαιτήσεις τους} |
|||
|
|||
Οι κατηγορίες χρηστών είναι οι εξής: |
|||
\begin{enumerate} |
|||
\item Πελάτες |
|||
\item Διαχειριστές |
|||
\item Ιδιοκτήτες των καταστημάτων |
|||
\end{enumerate} |
|||
|
|||
Τα δικαιώματα επί της βάσης για την κάθε κατηγορία αναλύονται παρακάτω. |
|||
|
|||
\input{2.user_categories_and_requirements/2.1.customer.tex} |
|||
\input{2.user_categories_and_requirements/2.2.moderator.tex} |
|||
\input{2.user_categories_and_requirements/2.3.owner.tex} |
@ -0,0 +1,10 @@ |
|||
\section{Πελάτες} |
|||
|
|||
Οι πελάτες είναι η βασική κατηγορία χρηστών της εφαρμογής. Τα δικαιώματά τους περιλαμβάνουν: |
|||
\begin{itemize} |
|||
\item Πρόσβαση στα μενού των καταστημάτων, τα πιάτα και ποτά, τα συστατικά και τις κριτικές αυτών |
|||
\item Δημιουργία νέων κριτικών |
|||
\item Πρόταση προσθήκης νέου καταστήματος, πιάτου, ποτού και δίαιτας στη βάση |
|||
\item Προσθήκη νέων συστατικών στη βάση |
|||
\item Διαγραφή και τροποποίηση των σχολίων και κριτικών που έχουν κάνει οι ίδιοι |
|||
\end{itemize} |
@ -0,0 +1,9 @@ |
|||
\section{Διαχειριστές} |
|||
|
|||
Οι διαχειριστές είναι ιδιαίτερα ενεργοί χρήστες που παίρνουν επιπλέον δικαιώματα μετά από συνεννόηση με τον sysadmin της βάσης. Έχουν την ευθύνη της διασφάλισης της εγκυρότητας των πληροφοριών, της αποδοχής των προτάσεων που κάνουν οι χρήστες και του συντονισμού του διαλόγου στα σχόλια. Τα δικαιώματά τους, επιπλέον αυτών των απλών χρηστών, περιλαμβάνουν: |
|||
\begin{itemize} |
|||
\item Διαγραφή απρεπών, υβριστικών κριτικών οποιουδήποτε χρήστη |
|||
\item Αποδοχή ή απόρριψη προτάσεων των χρηστών |
|||
\item Αποκλεισμός (ban) χρηστών |
|||
\item Προσθήκη των εστιατορίων που δεν υπάρχουν ήδη στη βάση και σύνδεσή τους με τους ιδιοκτήτες, ύστερα από συνεννόηση με αυτούς |
|||
\end{itemize} |
@ -0,0 +1,14 @@ |
|||
\section{Ιδιοκτήτες/Υπάλληλοι των καταστημάτων} |
|||
|
|||
Οι ιδιοκτήτες των καταστημάτων είναι μια ειδική κατηγορία χρηστών. Εφόσον κάποιος χρήστης ταυτοποιηθεί και αναγνωριστεί ως ιδιοκτήτης, τα δικαιώματά του διαμορφώνονται ως εξής: |
|||
\begin{itemize} |
|||
\item Πρόσβαση στα καταστήματα, τα πιάτα και ποτά, τα συστατικά και τις κριτικές |
|||
\item Απευθείας προσθήκη νέου πιάτου, ποτού και λίστας συστατικών για το κατάστημα που αντιπροσωπεύει, χωρίς αναμονή αποδοχής από διαχειριστή |
|||
\end{itemize} |
|||
|
|||
Τονίζεται εδώ ότι η κατηγορία αυτή στερείται των εξής δικαιωμάτων: |
|||
\begin{itemize} |
|||
\item Δημιουργία νέων κριτικών για το κατάστημα το οποίο αντιπροσωπεύουν |
|||
\item Πρόταση προσθήκης νέου καταστήματος |
|||
\item Πρόταση λίστας συστατικών πιάτου (εκτός των καταστημάτων, που αντιπροσωπεύουν) |
|||
\end{itemize} |
@ -0,0 +1,8 @@ |
|||
\chapter{Μοντέλο Οντοτήτων/Συσχετίσεων} |
|||
|
|||
Από τη γενική περιγραφή του προβλήματος και της λύσης εξάγονται οι οντότητες και οι συσχετίσεις της βάσης δεδομένων. Για τα διάφορα διλήμματα κατά τη σχεδίαση γίνονται παραδοχές οι οποίες επισημαίνονται στην κάθε ενότητα. Ο έλεγχος δικαιωμάτων για κάθε ενέργεια γίνεται με βάση το ρόλο σε ένα σύστημα RBAC (Role-Based Access Control). Για την υλοποίηση του συστήματος αυτού δημιουργούνται οντότητες που περιέχουν τους ρόλους και τα δικαιώματα. |
|||
|
|||
\input{3.entity_relationship_model/3.1.general_description.tex} |
|||
\input{3.entity_relationship_model/3.2.entities_definition.tex} |
|||
\input{3.entity_relationship_model/3.3.relationships_definition.tex} |
|||
\input{3.entity_relationship_model/3.4.ERDs.tex} |
@ -0,0 +1,32 @@ |
|||
\section{Γενική Περιγραφή} |
|||
|
|||
Οι οντότητες παρουσιάζονται στην παρακάτω λίστα: |
|||
|
|||
\begin{itemize} |
|||
\item Restaurant |
|||
\item Food |
|||
\item Drink |
|||
\item Ingredient |
|||
\item User |
|||
\item Diet |
|||
\item Role |
|||
\item Permission |
|||
\end{itemize} |
|||
|
|||
Οι συσχετίσεις παρουσιάζονται στην παρακάτω λίστα: |
|||
|
|||
\begin{itemize} |
|||
\item Restaurant offers Food |
|||
\item Restaurant offers Drink |
|||
\item Food has Ingredient |
|||
\item Drink has Ingredient |
|||
\item User prohibits Ingredient |
|||
\item User follows Diet |
|||
\item User rates Food |
|||
\item User rates Drink |
|||
\item User rates Restaurant |
|||
\item User owns Restaurant |
|||
\item Diet prohibits Ingredient |
|||
\item User has role |
|||
\item Role has permission |
|||
\end{itemize} |
@ -0,0 +1,109 @@ |
|||
\section{Καθορισμός Οντοτήτων} |
|||
|
|||
\subsection{Restaurant} |
|||
|
|||
Για κάθε κατάστημα αποθηκεύονται ένα μοναδικό κλειδί που είναι ο αύξων αριθμός του, η ονομασία, το είδος του, η τοποθεσία, το ωράριο λειτουργίας, το rating, ο αριθμός των rating που έχουν γίνει, ένας δείκτης που διαχωρίζει τα καταστήματα που έχουν προταθεί από αυτά που έχουν γίνει αποδεκτά από κάποιον διαχειριστή. Η τοποθεσία θα αποθηκεύεται σε μορφή συντεταγμένων γεωγραφικού πλάτους και μήκους σε μοίρες, ενώ για το ωράριο λειτουργίας θα αποθηκεύονται οι ώρες που το κατάστημα ανοίγει και κλείνει σε εικοσιτετράωρη μορφή. |
|||
|
|||
\entityTable{restaurant} |
|||
{Οντότητα στην οποία αποθηκεύονται τα καταστήματα} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{restaurant\_id} & \\ |
|||
& restaurant\_name & \\ |
|||
& restaurant\_category & \\ |
|||
& \multirow[c]{2}{*}{restaurant\_coordinates} & restaurant\_longitude \\ |
|||
& & restaurant\_latitude \\ |
|||
& \multirow[c]{2}{*}{restaurant\_working\_hours} & restaurant\_opening \\ |
|||
& & restaurant\_closing \\ |
|||
& restaurant\_rating & \\ |
|||
& restaurant\_reviews\_number & \\ |
|||
& restaurant\_is\_approved & }{10}{restaurant} |
|||
|
|||
\subsection{Food} |
|||
|
|||
Η οντότητα αυτή αφορά στη συγκεκριμένη υλοποίηση ενός φαγητού από κάποιο κατάστημα. Για κάθε φαγητό αποθηκεύονται ο αύξων αριθμός του πιάτου, το όνομα του πιάτου, μία περιγραφή, οι θερμίδες του, το rating του, ο αριθμός των ratings, το μέγεθος του, ένας δείκτης που διαχωρίζει τα φαγητά που έχουν προταθεί από αυτά που έχουν γίνει αποδεκτά από κάποιον διαχειριστή. |
|||
|
|||
\entityTable{food} |
|||
{Οντότητα στην οποία αποθηκεύονται τα πιάτα των καταστημάτων} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{food\_id} & \\ |
|||
& food\_name & \\ |
|||
& food\_description & \\ |
|||
& food\_calories & \\ |
|||
& food\_rating & \\ |
|||
& food\_reviews\_number \\ |
|||
& food\_portion\_size \\ |
|||
& food\_is\_approved}{8}{food} |
|||
|
|||
\subsection{Drink} |
|||
|
|||
Η οντότητα αυτή αφορά στη συγκεκριμένη υλοποίηση ενός ποτού από κάποιο κατάστημα. Για κάθε ποτό αποθηκεύονται ο αύξων αριθμός του ποτού, το όνομα του ποτού, μία περιγραφή, το rating του, ο αριθμός των rating, το μέγεθος του, ένας δείκτης που διαχωρίζει τα ποτά που έχουν προταθεί από αυτά που έχουν γίνει αποδεκτά από κάποιον διαχειριστή. |
|||
|
|||
\entityTable{drink} |
|||
{Οντότητα στην οποία αποθηκεύονται τα ποτά των καταστημάτων} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{drink\_id} & \\ |
|||
& drink\_name & \\ |
|||
& drink\_description & \\ |
|||
& drink\_rating & \\ |
|||
& drink\_reviews\_number & \\ |
|||
& drink\_portion\_size & \\ |
|||
& drink\_is\_approved}{7}{drink} |
|||
|
|||
\subsection{Ingredient} |
|||
|
|||
Για κάθε συστατικό αποθηκεύεται το όνομα του και ένας δείκτης που αναδεικνύει εάν περιέχει αλκοόλ. |
|||
|
|||
\entityTable{ingredient} |
|||
{Οντότητα στην οποία αποθηκεύονται τα συστατικά} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{ingredient\_name} \\ |
|||
& ingredient\_has\_alcohol}{2}{ingredient} |
|||
|
|||
\subsection{User} |
|||
|
|||
Για κάθε χρήστη αποθηκεύονται ο αύξων αριθμός του, το email, το username, ο αριθμός των reviews που έχει κάνει, το hashed password και το salt του password του. |
|||
|
|||
\entityTable{user} |
|||
{Οντότητα στην οποία αποθηκεύονται οι χρήστες} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{user\_id} \\ |
|||
& user\_email \\ |
|||
& user\_username \\ |
|||
& user\_number\_of\_reviews \\ |
|||
& user\_hashed\_password \\ |
|||
& user\_salt}{6}{user} |
|||
|
|||
\subsection{Diet} |
|||
|
|||
Για κάθε δίαιτα αποθηκεύονται ένα μοναδικό κλειδί που είναι ο αύξων αριθμός της, το όνομα, μία περιγραφή, ένας δείκτης που διαχωρίζει τις δίαιτες που έχουν προταθεί από αυτές που έχουν γίνει αποδεκτές από κάποιον διαχειριστή. |
|||
|
|||
\entityTable{diet} |
|||
{Οντότητα στην οποία αποθηκεύονται οι δίαιτες} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{diet\_id} \\ |
|||
& diet\_name \\ |
|||
& diet\_description \\ |
|||
& diet\_is\_approved}{4}{diet} |
|||
|
|||
\subsection{Role} |
|||
|
|||
Για κάθε ρόλο αποθηκεύονται ένα μοναδικό κλειδί, ο τίτλος του ρόλου, μία περιγραφή. |
|||
|
|||
\entityTable{role} |
|||
{Οντότητα στην οποία αποθηκεύονται οι ρόλοι} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{role\_id} \\ |
|||
& role\_name \\ |
|||
& role\_description}{3}{role} |
|||
|
|||
\newpage |
|||
|
|||
\subsection{Permission} |
|||
|
|||
Για κάθε δικαίωμα αποθηκεύονται ένα μοναδικό κλειδί, μία περιγραφή. |
|||
|
|||
\entityTable{permission} |
|||
{Οντότητα στην οποία αποθηκεύονται τα δικαιώματα} |
|||
{Ισχυρή οντότητα} |
|||
{\underline{permission\_id} \\ |
|||
& permission\_description}{2}{permission} |
@ -0,0 +1,202 @@ |
|||
\section{Καθορισμός Συσχετίσεων} |
|||
|
|||
\subsection{Restaurant offers Food} |
|||
|
|||
Τα καταστήματα προσφέρουν ένα ή περισσότερα φαγητά. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{restaurant\_offers\_food} |
|||
{Κάθε κατάστημα προσφέρει έναν αριθμό από φαγητά} |
|||
{Has-A, προσδιορίζουσα συσχέτιση της οντότητας food} |
|||
{1:N} |
|||
{Ολική συμμετοχή της οντότητας food \\ |
|||
& Μερική συμμετοχή της οντότητας restaurant} |
|||
{1} |
|||
{-} |
|||
{restaurantOffersFood} |
|||
|
|||
\subsection{Restaurant offers Drink} |
|||
|
|||
Τα καταστήματα προσφέρουν ένα ή περισσότερα ποτά. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{restaurant\_offers\_drink} |
|||
{Κάθε κατάστημα προσφέρει έναν αριθμό από ποτά} |
|||
{Has-A, προσδιορίζουσα συσχέτιση της οντότητας drink} |
|||
{1:N} |
|||
{Ολική συμμετοχή της οντότητας drink \\ |
|||
& Μερική συμμετοχή της οντότητας restaurant} |
|||
{1} |
|||
{-} |
|||
{restaurantOffersDrink} |
|||
|
|||
\newpage |
|||
|
|||
\subsection{Food has Ingredient} |
|||
|
|||
Τα φαγητά αποτελούνται από ένα ή περισσότερα συστατικά, ενώ τα ίδια συστατικά μπορεί να χρησιμοποιούνται από πολλά φαγητά. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{food\_has\_ingredient} |
|||
{Κάθε φαγητό που προσφέρεται αποτελείται από έναν αριθμό συστατικών} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Ολική συμμετοχή της οντότητας food \\ |
|||
& Μερική συμμετοχή της οντότητας ingredient} |
|||
{1} |
|||
{-} |
|||
{foodHasIngredient} |
|||
|
|||
\subsection{Drink has Ingredient} |
|||
|
|||
Τα ποτά αποτελούνται από ένα ή περισσότερα συστατικά, ενώ τα ίδια συστατικά μπορεί να χρησιμοποιούνται από πολλά ποτά. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{drink\_has\_ingredient} |
|||
{Κάθε ποτό που προσφέρεται αποτελείται από έναν αριθμό συστατικών} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Ολική συμμετοχή της οντότητας drink \\ |
|||
& Μερική συμμετοχή της οντότητας ingredient} |
|||
{1} |
|||
{-} |
|||
{drinkHasIngredient} |
|||
|
|||
\subsection{User prohibits Ingredient} |
|||
|
|||
Οι χρήστες μπορούν να αποκλείσουν ένα ή περισσότερα συστατικά, ενώ τα ίδια συστατικά μπορεί να αποκλείονται από πολλούς χρήστες. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{user\_prohibits\_ingredient} |
|||
{Οι χρήστες μπορούν να αποκλείσουν έναν αριθμό από συστατικά} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Μερική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας ingredient} |
|||
{1} |
|||
{-} |
|||
{userProhibitsIngredient} |
|||
|
|||
\newpage |
|||
|
|||
\subsection{User follows Diet} |
|||
|
|||
Οι χρήστες μπορούν να ακολουθούν μία ή περισσότερες δίαιτες, ενώ οι ίδιες δίαιτες μπορεί να ακολουθούνται από πολλούς χρήστες. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{user\_follows\_diet} |
|||
{Οι χρήστες μπορεί να ακολουθούν μία ή περισσότερες δίαιτες} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Μερική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας diet} |
|||
{2} |
|||
{-} |
|||
{userFollowsDiet} |
|||
|
|||
\subsection{User rates Food} |
|||
|
|||
Οι χρήστες μπορούν να αξιολογήσουν ένα ή περισσότερα φαγητά, ενώ τα ίδια φαγητά μπορεί να αξιολογηθούν από πολλούς χρήστες. Κάθε χρήστης μπορεί να κάνει μόνο μία κριτική για ένα φαγητό. Για τη συσχέτιση αυτή απαιτούνται επιπλέον η βαθμολογία, το κείμενο, η ημερομηνία της αξιολόγησης, και η βαθμολογία για το μέγεθος της μερίδας. |
|||
|
|||
\relationTable{user\_rates\_food} |
|||
{Οι χρήστες μπορούν να αξιολογήσουν ένα ή περισσότερα φαγητά} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Μερική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας food} |
|||
{4} |
|||
{rating\_grade \\ |
|||
& rating\_text \\ |
|||
& rating\_date \\ |
|||
& rating\_portion\_size} |
|||
{userRatesFood} |
|||
|
|||
\newpage |
|||
|
|||
\subsection{User rates Drink} |
|||
|
|||
Οι χρήστες μπορούν να αξιολογήσουν ένα ή περισσότερα ποτά, ενώ τα ίδια ποτά μπορεί να αξιολογηθούν από πολλούς χρήστες. Κάθε χρήστης μπορεί να κάνει μόνο μία κριτική για ένα ποτό. Για τη συσχέτιση αυτή απαιτούνται επιπλέον η βαθμολογία, το κείμενο, η ημερομηνία της αξιολόγησης και η αξιολόγηση για το μέγεθος του ποτού. |
|||
|
|||
\relationTable{user\_rates\_drink} |
|||
{Οι χρήστες μπορούν να αξιολογήσουν ένα ή περισσότερα ποτά} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Μερική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας drink} |
|||
{4} |
|||
{rating\_grade \\ |
|||
& rating\_text \\ |
|||
& rating\_date \\ |
|||
& rating\_portion\_size} |
|||
{userRatesDrink} |
|||
|
|||
\subsection{User rates Restaurant} |
|||
|
|||
Οι χρήστες μπορούν να αξιολογήσουν ένα ή περισσότερα καταστήματα, ενώ τα ίδια καταστήματα μπορεί να αξιολογηθούν από πολλούς χρήστες. Κάθε χρήστης μπορεί να κάνει μόνο μία κριτική για ένα κατάστημα. Για τη συσχέτιση αυτή απαιτούνται επιπλέον η βαθμολογία, το κείμενο, η ημερομηνία της αξιολόγησης και η δίαιτα με βάση την οποία αξιολογεί το κατάστημα (ο χρήστης μπορεί να επιλέξει μια διαφορετική δίαιτα κάθε φορά). |
|||
|
|||
\relationTable{user\_rates\_restaurant} |
|||
{Οι χρήστες μπορούν να αξιολογήσουν ένα ή περισσότερα καταστήματα με βάση μια δίαιτα} |
|||
{Has-A τριαδική συσχέτιση} |
|||
{M:N:1} |
|||
{Μερική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας restaurant \\ |
|||
& Μερική συμμετοχή της οντότητας diet} |
|||
{3} |
|||
{rating\_grade \\ |
|||
& rating\_text \\ |
|||
& rating\_date} |
|||
{userRatesRestaurant} |
|||
|
|||
\newpage |
|||
|
|||
\subsection{User owns Restaurant} |
|||
|
|||
Όταν ένας χρήστης είναι ιδιοκτήτης, υπάρχει ένα μόνο κατάστημα το οποίο αντιπροσωπεύει. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{user\_owns\_restaurant} |
|||
{Ένας χρήστης μπορεί να είναι ιδιοκτήτης ενός καταστήματος} |
|||
{Has-A συσχέτιση} |
|||
{1:1} |
|||
{Μερική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας restaurant} |
|||
{1} |
|||
{-} |
|||
{userOwnsRestaurant} |
|||
|
|||
\subsection{Diet prohibits Ingredient} |
|||
|
|||
Οι δίαιτες μπορεί να αποκλείουν ένα ή περισσότερα συστατικά, ενώ τα ίδια συστατικά μπορεί να αποκλείονται από πολλές δίαιτες. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{diet\_prohibits\_ingredient} |
|||
{Οι δίαιτες μπορεί να αποκλείουν ένα ή περισσότερα συστατικά} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Μερική συμμετοχή της οντότητας diet \\ |
|||
& Μερική συμμετοχή της οντότητας ingredient} |
|||
{1} |
|||
{-} |
|||
{dietProhibitsIngredient} |
|||
|
|||
\subsection{User has Role} |
|||
|
|||
Οι χρήστες πρέπει να έχουν έναν ρόλο. Ωστόσο υποθέτουμε ότι μπορεί να υπάρχει ένας ρόλος που να μην έχει ανατεθεί σε χρήστες. Αυτό είναι απαραίτητο για τον ρόλο του διαχειριστή, τον οποίο δεν θα έχει κανένας χρήστης στην αρχή. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{user\_has\_role} |
|||
{Κάθε χρήστης έχει ένα ρόλο} |
|||
{Has-A συσχέτιση} |
|||
{N:1} |
|||
{Ολική συμμετοχή της οντότητας user \\ |
|||
& Μερική συμμετοχή της οντότητας role} |
|||
{1} |
|||
{-} |
|||
{userHasRole} |
|||
|
|||
\newpage |
|||
|
|||
\subsection{Role has Permission} |
|||
|
|||
Οι ρόλοι επιτρέπουν τουλάχιστον ένα ή περισσότερα δικαιώματα, ενώ τα ίδια τα δικαιώματα μπορεί να επιτρέπονται από πολλούς ρόλους. Για τη συσχέτιση αυτή δεν απαιτούνται επιπλέον γνωρίσματα. |
|||
|
|||
\relationTable{role\_has\_permission} |
|||
{Κάθε ρόλος έχει ορισμένα δικαιώματα} |
|||
{Has-A συσχέτιση} |
|||
{M:N} |
|||
{Ολική συμμετοχή της οντότητας role \\ |
|||
& Μερική συμμετοχή της οντότητας permission} |
|||
{1} |
|||
{-} |
|||
{roleHasPermission} |
@ -0,0 +1,12 @@ |
|||
\section{Διάγραμμα Οντοτήτων/Συσχετίσεων} |
|||
|
|||
\begin{figure}[H] |
|||
\centering |
|||
\resizebox{\textwidth}{!}{ |
|||
\texttt{ |
|||
\input{res/diagrams/ERD.pdf_tex} |
|||
} |
|||
} |
|||
\caption{Διάγραμμα οντοτήτων-συσχετίσεων} |
|||
\label{entityTable:ERD} |
|||
\end{figure} |
@ -0,0 +1,6 @@ |
|||
\chapter{Σχεσιακό μοντέλο} |
|||
|
|||
\input{4.relational_model/4.1.attribute_domains.tex} |
|||
\input{4.relational_model/4.2.relations.tex} |
|||
\input{4.relational_model/4.3.relational_diagram.tex} |
|||
\input{4.relational_model/4.4.views.tex} |
@ -0,0 +1,24 @@ |
|||
\section{Πεδία Ορισμού} |
|||
|
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{l p{9cm}} \toprule |
|||
Πεδίο ορισμού & Τύπος \\ \midrule |
|||
ΑΚΕΡΑΙΟΣ & INT \\ |
|||
ΣΥΝΤΕΤΑΓΜΕΝΕΣ & FLOAT \\ |
|||
ΜΕΓΕΘΟΣ ΜΕΡΙΔΑΣ & ENUMERATE[small, medium, big] \\ |
|||
ΕΙΔΟΣ\_ΚΑΤΑΣΤΗΜΑΤΟΣ & ENUMERATE[cafeteria, pub, bar, restaurant, fast\_food, ethnic] \\ |
|||
ΤΟΥ\_ΜΠΟΥΛ~\cite{ofBool} & BOOLEAN \\ |
|||
ΜΕΣΗ\_ΒΑΘΜΟΛΟΓΙΑ & FLOAT\_RANGE[1, 5] \\ |
|||
ΟΝΟΜΑ & VARIABLE\_CHAR(200) \\ |
|||
ΠΕΡΙΓΡΑΦΗ & VARIABLE\_CHAR(150) \\ |
|||
EMAIL & VARIABLE\_CHAR(500) \\ |
|||
HASHED\_PASSWORD & CHAR(64) \\ |
|||
SALT & CHAR(32) \\ |
|||
ΑΞΙΟΛΟΓΗΣΗ & INT\_RANGE[1, 5] \\ |
|||
ΗΜΕΡΟΜΗΝΙΑ & DATE \\ |
|||
ΩΡΑ & ΤΙΜΕ \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Πεδία ορισμού} |
|||
\label{domainTable} |
|||
\end{table} |
@ -0,0 +1,189 @@ |
|||
\section{Σχέσεις} |
|||
|
|||
\subsection{Restaurant} |
|||
\rEntTable{restaurant} |
|||
{restaurant\_id & ΑΚΕΡΑΙΟΣ \\ |
|||
restaurant\_name & ΟΝΟΜΑ \\ |
|||
restaurant\_category & ΕΙΔΟΣ\_ΚΑΤΑΣΤΗΜΑΤΟΣ \\ |
|||
restaurant\_longitude & ΣΥΝΤΕΤΑΓΜΕΝΕΣ \\ |
|||
restaurant\_latitude & ΣΥΝΤΕΤΑΓΜΕΝΕΣ \\ |
|||
restaurant\_opening & ΩΡΑ \\ |
|||
restaurant\_closing & ΩΡΑ \\ |
|||
%restaurant\_rating & ΜΕΣΗ\_ΒΑΘΜΟΛΟΓΙΑ \\ |
|||
%restaurant\_reviews\_number & ΑΚΕΡΑΙΟΣ \\ |
|||
restaurant\_is\_approved & ΤΟΥ\_ΜΠΟΥΛ} |
|||
{restaurant\_id} |
|||
{1} |
|||
{user\_id → user} |
|||
{restaurant} |
|||
|
|||
\subsection{Food} |
|||
\rEntTable{food} |
|||
{food\_id & ΑΚΕΡΑΙΟΣ\\ |
|||
food\_name & ΟΝΟΜΑ\\ |
|||
food\_description & ΠΕΡΙΓΡΑΦΗ\\ |
|||
food\_calories & ΑΚΕΡΑΙΟΣ \\ |
|||
%food\_rating & ΑΞΙΟΛΟΓΗΣΗ\\ |
|||
%food\_reviews\_number & ΑΚΕΡΑΙΟΣ \\ |
|||
%food\_portion\_size & ΜΕΓΕΘΟΣ ΜΕΡΙΔΑΣ \\ |
|||
food\_is\_approved & ΤΟΥ\_ΜΠΟΥΛ} |
|||
{food\_id} |
|||
{1} |
|||
{restaurant\_id → restaurant} |
|||
{food} |
|||
|
|||
\subsection{Drink} |
|||
\rEntTable{drink} |
|||
{drink\_id & ΑΚΕΡΑΙΟΣ \\ |
|||
drink\_name & ΟΝΟΜΑ \\ |
|||
drink\_description & ΠΕΡΙΓΡΑΦΗ \\ |
|||
%drink\_rating & ΑΞΙΟΛΟΓΗΣΗ \\ |
|||
%drink\_reviews\_number & ΑΚΕΡΑΙΟΣ \\ |
|||
%drink\_portion\_size & ΜΕΓΕΘΟΣ ΜΕΡΙΔΑΣ \\ |
|||
drink\_is\_approved & ΤΟΥ\_ΜΠΟΥΛ} |
|||
{drink\_id} |
|||
{1} |
|||
{restaurant\_id → restaurant} |
|||
{drink} |
|||
|
|||
\subsection{Ingredient} |
|||
\rEntTable{ingredient} |
|||
{ingredient\_name & ΟΝΟΜΑ \\ |
|||
ingredient\_has\_alcohol & ΤΟΥ\_ΜΠΟΥΛ} |
|||
{ingredient\_name} |
|||
{1} |
|||
{-} |
|||
{ingredient} |
|||
|
|||
\subsection{User} |
|||
\rEntTable{user} |
|||
{user\_id & ΑΚΕΡΑΙΟΣ \\ |
|||
user\_email & EMAIL \\ |
|||
user\_username & ΟΝΟΜΑ \\ |
|||
%user\_number\_of\_reviews & ΑΚΕΡΑΙΟΣ \\ |
|||
user\_hashed\_password & HASHED\_PASSWORD\\ |
|||
user\_salt & SALT} |
|||
{user\_id} |
|||
{1} |
|||
{role\_id → role} |
|||
{user} |
|||
|
|||
\subsection{Diet} |
|||
\rEntTable{diet} |
|||
{diet\_id & ΑΚΕΡΑΙΟΣ \\ |
|||
diet\_name & ΟΝΟΜΑ \\ |
|||
diet\_description & ΠΕΡΙΓΡΑΦΗ \\ |
|||
diet\_is\_approved & ΤΟΥ\_ΜΠΟΥΛ} |
|||
{diet\_id} |
|||
{1} |
|||
{-} |
|||
{diet} |
|||
|
|||
\subsection{Role} |
|||
\rEntTable{role} |
|||
{role\_id & ΑΚΕΡΑΙΟΣ \\ |
|||
role\_name & ΟΝΟΜΑ \\ |
|||
role\_description & ΠΕΡΙΓΡΑΦΗ} |
|||
{role\_id} |
|||
{1} |
|||
{-} |
|||
{role} |
|||
|
|||
\subsection{Permission} |
|||
\rEntTable{permission} |
|||
{permission\_id & ΑΚΕΡΑΙΟΣ \\ |
|||
permission\_description & ΠΕΡΙΓΡΑΦΗ} |
|||
{permission\_id} |
|||
{1} |
|||
{-} |
|||
{permission} |
|||
|
|||
\subsection{Food has Ingredient} |
|||
\rEntTable{food\_has\_ingredient} |
|||
{- & -} |
|||
{food\_id \& ingredient\_name} |
|||
{2} |
|||
{food\_id → food \\ |
|||
& ingredient\_name → ingredient} |
|||
{foodHasIngredient} |
|||
|
|||
\subsection{Drink has Ingredient} |
|||
\rEntTable{drink\_has\_ingredient} |
|||
{- & -} |
|||
{drink\_id \& ingredient\_name} |
|||
{2} |
|||
{drink\_id → drink \\ |
|||
& ingredient\_name → ingredient} |
|||
{drinkHasIngredient} |
|||
|
|||
\subsection{User prohibits Ingredient} |
|||
\rEntTable{user\_prohibits\_ingredient} |
|||
{- & -} |
|||
{user\_id \& ingredient\_name} |
|||
{2} |
|||
{user\_id → user \\ |
|||
& ingredient\_name → ingredient} |
|||
{userProhibitsIngredient} |
|||
|
|||
\subsection{User follows Diet} |
|||
\rEntTable{user\_follows\_diet} |
|||
{- & -} |
|||
{user\_id \& diet\_id} |
|||
{2} |
|||
{user\_id → user \\ |
|||
& diet\_id → diet} |
|||
{userFollowsDiet} |
|||
|
|||
\subsection{User rates Food} |
|||
\rEntTable{user\_rates\_food} |
|||
{rating\_grade & ΑΞΙΟΛΟΓΗΣΗ \\ |
|||
rating\_date & ΗΜΕΡΟΜΗΝΙΑ \\ |
|||
rating\_text & ΠΕΡΙΓΡΑΦΗ \\ |
|||
rating\_portion\_size & ΜΕΓΕΘΟΣ ΜΕΡΙΔΑΣ} |
|||
{user\_id \& food\_id} |
|||
{2} |
|||
{user\_id → user \\ |
|||
& food\_id → food} |
|||
{userRatesFood} |
|||
|
|||
\subsection{User rates Drink} |
|||
\rEntTable{user\_rates\_drink} |
|||
{rating\_grade & ΑΞΙΟΛΟΓΗΣΗ\\ |
|||
rating\_date & ΗΜΕΡΟΜΗΝΙΑ\\ |
|||
rating\_text & ΠΕΡΙΓΡΑΦΗ \\ |
|||
rating\_portion\_size & ΜΕΓΕΘΟΣ ΜΕΡΙΔΑΣ} |
|||
{user\_id \& drink\_id} |
|||
{2} |
|||
{user\_id → user \\ |
|||
& drink\_id → drink} |
|||
{userRatesDrink} |
|||
|
|||
\subsection{User rates Restaurant} |
|||
\rEntTable{user\_rates\_restaurant} |
|||
{rating\_grade & ΑΞΙΟΛΟΓΗΣΗ \\ |
|||
rating\_text & ΗΜΕΡΟΜΗΝΙΑ \\ |
|||
rating\_date & ΠΕΡΙΓΡΑΦΗ} |
|||
{user\_id \& restaurant\_id} |
|||
{3} |
|||
{user\_id → user \\ |
|||
& restaurant\_id → restaurant\\ |
|||
& diet\_id → diet} |
|||
{userRatesRestaurant} |
|||
|
|||
\subsection{Diet prohibits Ingredient} |
|||
\rEntTable{diet\_prohibits\_ingredient} |
|||
{- & -} |
|||
{diet\_id \& ingredient\_name} |
|||
{2} |
|||
{diet\_id → diet \\ |
|||
& ingredient\_name → ingredient} |
|||
{dietProhibitsIngredient} |
|||
|
|||
\subsection{Role has Permission} |
|||
\rEntTable{role\_has\_permission} |
|||
{- & -} |
|||
{role\_id \& permission\_id} |
|||
{2} |
|||
{role\_id → role \\ |
|||
& permission\_id → permission} |
|||
{roleHasPermission} |
@ -0,0 +1,14 @@ |
|||
\section{Σχεσιακό Διάγραμμα} |
|||
|
|||
\begin{figure}[H] |
|||
\centering |
|||
\resizebox{\textwidth}{!}{ |
|||
\begin{small} |
|||
\texttt{ |
|||
\input{res/diagrams/Relational_Diagram.pdf_tex} |
|||
} |
|||
\end{small} |
|||
} |
|||
\caption{Διάγραμμα οντοτήτων-συσχετίσεων} |
|||
\label{entityTable:relationalDiagram} |
|||
\end{figure} |
@ -0,0 +1,19 @@ |
|||
\section{Όψεις} |
|||
|
|||
Μια όψη που περιέχει όλα τα εστιατόρια που υπάρχουν στη βάση και τα πιάτα και ποτά που προσφέρουν τα οποία έχουν εγκριθεί από διαχειριστές. Η όψη αυτή είναι χρήσιμη για την κατηγορία χρηστών των πελατών. |
|||
|
|||
\begin{align*} |
|||
V1 \leftarrow & (\sigma_{\text{restaurant\_is\_approved} = \text{TRUE}}(\text{restaurant}) \bowtie \sigma_{\text{food\_is\_approved} = \text{TRUE}}(\text{food}) \bowtie \\ |
|||
&\text{food\_has\_ingredient} \bowtie \text{ingredient}) \cup \\ |
|||
&(\sigma_{\text{restaurant\_is\_approved = TRUE}}(\text{restaurant}) \bowtie \sigma_{\text{drink\_is\_approved = TRUE}}(\text{drink}) \bowtie \\ |
|||
&\text{drink\_has\_ingredient} \bowtie \text{ingredient}) |
|||
\end{align*} |
|||
|
|||
Μια όψη που περιέχει όλα τα πιάτα και τα ποτά που δεν έχουν εγκριθεί ακόμα, καθώς και το κατάστημα που τα προσφέρει όπως και τη λίστα των συστατικών τους. Η όψη αυτή είναι χρήσιμη για την κατηγορία χρηστών των διαχειριστών. |
|||
|
|||
\begin{align*} |
|||
V2 \leftarrow & (\text{restaurant} \bowtie \sigma_{\text{food\_is\_approved} = \text{FALSE}}(\text{food}) \bowtie \\ |
|||
&\text{food\_has\_ingredient} \bowtie \text{ingredient}) \cup \\ |
|||
&(\text{restaurant} \bowtie \sigma_{\text{drink\_is\_approved = FALSE}}(drink) \bowtie \\ |
|||
&\text{drink\_has\_ingredient} \bowtie \text{ingredient}) |
|||
\end{align*} |
@ -0,0 +1,4 @@ |
|||
\chapter{Παραδείγματα} |
|||
|
|||
\input{5.examples/5.1.table_examples.tex} |
|||
\input{5.examples/5.2.query_examples.tex} |
@ -0,0 +1,284 @@ |
|||
\section{Παραδείγματα Πινάκων} |
|||
|
|||
\subsection{Restaurant} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
restaurant\_id & 8132 & 7365 & 4330 & 1356 & 6211 \\ |
|||
user\_id & 1566 & NULL & 24788 & 356 & NULL \\%foreign |
|||
restaurant\_name & Γιαννούλα & McDonald's & Οδυσσέας & Αιθερόπλοο & Pulp\\ |
|||
restaurant\_category & restaurant & fast\_food & restaurant & pub & bar\\ |
|||
restaurant\_longitude & -122.78955 & -78.59138 & 40.31655 & -88.488 & -54.258\\ |
|||
restaurant\_latitude & 47.13832 & 4.26262 & 40.31655 & 57.587 & 54.73\\ |
|||
restaurant\_opening & 13:30 & 12:00 & 12:30 & 08:00 & 09:00\\ |
|||
restaurant\_closing & 01:00 & 23:59 & 18:00 & 02:00 & 23:59\\ |
|||
%restaurant\_rating & 4.9 & ΝULL & 4.3 & 5 & 4.7\\ |
|||
%restaurant\_reviews\_number & 2358 & ΝULL & 5711 & 1747 & 8615\\ |
|||
restaurant\_is\_approved & TRUE & FALSE & TRUE & TRUE & TRUE \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Restaurant} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: \textasciitilde15.000 ανά πόλη |
|||
|
|||
\subsection{Food} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{3.5cm} >{\raggedleft}p{3.5cm} >{\raggedleft\arraybackslash}p{3.5cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{3}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-4} |
|||
& 1 & 2 & 3 \\ \toprule |
|||
food\_id & 124 & 548 & 478 \\ |
|||
restaurant\_id & 6137 & 3275 & 4378 \\ %foreign |
|||
food\_name & Γεμιστά & Fish\&Chips & Πατσάς με σκορδοστούμπι \\ |
|||
food\_description & Παραδοσιακό ελληνικό πιάτο & Μία γεύση από Αγγλία & Ένα πιάτο που θυμίζει πολύ χωριό \\ |
|||
food\_calories & 392 & 840 & 450 \\ |
|||
%food\_rating & 4.2 & 4.7 & 2.3\\ |
|||
%food\_reviews\_number & 154 & 5 & 30\\ |
|||
%food\_portion\_size & medium & big & small \\ |
|||
food\_is\_approved & TRUE & TRUE & TRUE \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Food} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 300.000 ανά πόλη |
|||
|
|||
\subsection{Drink} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{3.5cm} >{\raggedleft}p{3.5cm} >{\raggedleft\arraybackslash}p{3.5cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{3}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-4} |
|||
& 1 & 2 & 3 \\ \toprule |
|||
drink\_id & 6363 & 26427 & 3214 \\ |
|||
restaurant\_id & 152 & 1256 & 5622 \\ %foreign |
|||
drink\_name & White Russian & Old Fashioned & Mojito \cr |
|||
drink\_description & Διάσημο coctail που έπινε ο Jeff Bridges στη ταινία "The big Lebowski" & Κοκτέιλ με αμερικάνικες ρίζες & Δροσιστικό κουβανέζικο κοκτέιλ \\ |
|||
%drink\_rating & 4.99 & NULL & 4.1 \\ |
|||
%drink \_reviews\_number & 3716 & NULL & 735 \\ |
|||
%drink\_portion\_size & medium & NULL & big \\ |
|||
drink\_has\_alcohol & TRUE & TRUE & TRUE \\ |
|||
drink\_is\_approved & TRUE & FALSE & TRUE \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Drink} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 150.000 ανά πόλη |
|||
|
|||
\subsection{Ingredient} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
ingredient\_name & Μερέντα & Ρούμι & Καρύδι & Πατάτα & Πορτοκάλι \\ |
|||
ingredient\_has\_alcohol & FALSE & TRUE & FALSE & FALSE & FALSE \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Ingredient} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 1.000 |
|||
|
|||
\subsection{User} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{4.5cm} >{\raggedleft\arraybackslash}p{4.5cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{2}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-3} |
|||
& 1 & 2 \\ \toprule |
|||
user\_id & 2304 & 1235 \\ |
|||
role\_id & 0 & 2\\%foreign |
|||
user\_email & iamanonymous@ not.your.buisness.ελ & nonexistent@noidea.bn \\ |
|||
user\_username & Ανώνυμος & Ανύπαρκτος \\ |
|||
%user\_number\_of\_reviews & ΑΚΕΡΑΙΟΣ \\ |
|||
user\_hashed\_password & 5F4783987A5E5B9B 2D7FBA6BA5D8879A 6EA94D24CE374570 BD74CFF205D2E552 & 09986D06B9EABA02 00318069CD372659 C6036E2B9F0B1D44 083F438E5DDE5821\\ |
|||
user\_salt & 7g2pnmg118k9h4h5 zphkntixwb4wtyn8 & vjp4a15w7n6806fm he3x45qxz988xxql \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα User} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 200.000.000 παγκοσμίως |
|||
|
|||
\subsection{Diet} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{3cm} >{\raggedleft}p{1.7cm} >{\raggedleft}p{1.8cm} >{\raggedleft}p{1.8cm} >{\raggedleft\arraybackslash}p{3cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
diet\_id & 2 & 7 & 20 & 13 & 18 \\ |
|||
diet\_name & Διαβητικών & Vegan & Vegetarian & Bulking & Christian Fasting \\ |
|||
diet\_description & Χαρακτηρίζεται από φαγητά χαμηλά σε ζάχαρη & Not found & Όχι vegan & Μόνο κρέας & Όχι τροφές παραγώμενες από ζώα και όχι λάδι \\ |
|||
diet\_is\_approved & TRUE & FALSE & FALSE & TRUE & TRUE \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Diet} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 40 |
|||
|
|||
\subsection{Role} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{3cm} >{\raggedleft}p{3cm} >{\raggedleft\arraybackslash}p{3cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{3}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-4} |
|||
& 1 & 2 & 3 \\ \toprule |
|||
role\_id & 0 & 1 & 2 \\ |
|||
role\_name & user & moderator & owner \\ |
|||
role\_description & Απλός χρήστης & Διαχειριστής & Ιδιοκτήτης \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Role} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 4 |
|||
|
|||
\subsection{Permission} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{2cm} >{\raggedleft}p{2cm} >{\raggedleft}p{2cm} >{\raggedleft}p{2cm} >{\raggedleft\arraybackslash}p{2cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{3}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
permission\_id & 8 & 4 & 16 & 32 & 64 \\ %Μόνο δυνάμεις του 2, δεν είναι τυχαίο, μη πειράζετε! |
|||
permission\_description & Μπορεί να εγκρίνει κατάστημα & Μπορεί να προσθέσει πιάτο σε κατάστημα χωρίς αναμονή έγκρισης & Μπορεί να αξιολογήσει καταστήματα & Μπορεί να αξιολογήσει ποτό & Μπορεί να κάνει ban σε χρήστη \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Permission} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 15 |
|||
|
|||
\subsection{Food has Ingredient} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
food\_id & 1112 & 827 & 1807 & 3366 & 4635 \\ |
|||
ingredient\_id & 247 & 89 & 34 & 75 & 50 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Food has Ingredient} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 2.100.000 ανά πόλη |
|||
|
|||
\subsection{Drink has Ingredient} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
drink\_id & 3603 & 321 & 5493 & 1317 & 3677 \\ |
|||
ingredient\_id & 147 & 301 & 19 & 233 & 38 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Drink has Ingredient} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 300.000 ανά πόλη |
|||
|
|||
\subsection{User prohibits Ingredient} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
user\_id & 7566 & 2112 & 7908 & 3604 & 10597 \\ |
|||
ingredient\_id & 38 & 89 & 110 & 78 & 297 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα User prohibits Ingredient} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 1.000.000.000 παγκοσμίως |
|||
|
|||
\subsection{User follows Diet} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
user\_id & 963 & 11318 & 1305 & 14744 & 14312 \\ |
|||
diet\_id & 24 & 23 & 28 & 20 & 32 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα User follows Diet} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 400.000.000 παγκοσμίως |
|||
|
|||
\subsection{User rates Food} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
user\_id & 5357 & 9347 & 11724 & 1744 & 9641 \\ |
|||
food\_id & 435 & 3586 & 7767 & 5868 & 2378 \\ |
|||
rating\_grade & 2 & 3 & 5 & 4 & 1 \\ |
|||
rating\_date & 2018-08-20 & 2018-11-11 & 2018-03-25 & 2018-09-07 & 2018-12-18 \\ |
|||
rating\_text & NULL & Μέτριο & Πολύ γευστικό & NULL & NULL \\ |
|||
rating\_portion\_size & NULL & medium & medium & medium & small \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα User rates Food} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 400.000.000 παγκοσμίως |
|||
|
|||
\subsection{User rates Drink} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r >{\raggedleft}p{2cm} >{\raggedleft}p{2cm} >{\raggedleft}p{2cm} >{\raggedleft\arraybackslash}p{2cm}} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
user\_id & 18899 & 6328 & 9954 & 14381 & 8254 \\ |
|||
drink\_id & 1509 & 1598 & 1000 & 982 & 618 \\ |
|||
rating\_grade & 4 & 5 & 1 & 2 & 3\\ |
|||
rating\_date & 2018-12-17 & 2018-07-08 & 2018-05-01 & 2018-06-28 & 2018-09-13 \\ |
|||
rating\_text & NULL & Τέλειο!!1 & Τίγκα στη ζάχαρη.. & NULL & Μετριότης κύριοι.\\ |
|||
rating\_portion\_size & medium & medium & medium & NULL & small \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα User rates Drink} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 400.000.000 παγκοσμίως |
|||
|
|||
\subsection{User rates Restaurant} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l >{\raggedleft}p{3cm} r >{\raggedleft\arraybackslash}p{3cm} r r} |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
user\_id & 783 & 5878 & 5469 & 6531 & 325 \\ |
|||
restaurant\_id & 3307 & 1548 & 1198 & 2326 & 400 \\ |
|||
rating\_grade & 5 & 1 & 4 & 3 & 2 \\ |
|||
rating\_date & 2018-01-04 & 2018-06-08 & 2018-09-16 & 2018-10-02 & 2018-04-04 \\ |
|||
rating\_text & Εξαιρετικό service. Θα ξαναπάω! & NULL & Όμορφος χώρος, λίγο ακριβό. & NULL & NULL \\ |
|||
diet\_id & 25 & 13 & NULL & 17 & NULL \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα User rates Restaurant} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 180.000.000 παγκοσμίως |
|||
|
|||
|
|||
\subsection{Diet prohibits Ingredient} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
diet\_id & 22 & 16 & 7 & 11 & 6 \\ |
|||
ingredient\_id & 47 & 27 & 4 & 96 & 128 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Diet prohibits Ingredient} |
|||
\end{table} |
|||
Εκτίμηση για τον αριθμό των εγγραφών: 6.000 |
|||
|
|||
\subsection{Role has Permission} |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{ l r r r r r } |
|||
\multirow{2}{*}{Γνώρισμα} & \multicolumn{5}{c}{Πλειάδα \#} \\ |
|||
\cmidrule{2-6} |
|||
& 1 & 2 & 3 & 4 & 5 \\ \toprule |
|||
role\_id & 1 & 2 & 1 & 3 & 2 \\ |
|||
permission\_id & 78 & 964 & 147 & 36 & 663 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Παραδείγματα εγγραφών για τον πίνακα Role has Permission} |
|||
\end{table} |
|||
|
|||
Εκτίμηση για τον αριθμό των εγγραφών: 60 |
@ -0,0 +1,92 @@ |
|||
\section{Παραδείγματα Ερωτημάτων} |
|||
|
|||
\begin{enumerate} |
|||
|
|||
\item |
|||
Όλα τα ονόματα των εστιατορίων τα οποία έχουν εγκριθεί και βρίσκονται κοντά σε μία περιοχή: |
|||
\begin{align*} |
|||
&\Pi_{\text{restaurant\_name}}( |
|||
\sigma_{\text{long\_dist} > -4 \wedge \text{long\_dist} < 4 \wedge \text{lat\_dist} > -4 \wedge \text{lat\_dist} < 4}( \\ |
|||
&\Pi_{\text{restaurant\_name}, \text{given\_current\_longitude} - \text{restaurant\_longitude as long\_dis}, \text{given\_current\_latitude} - \text{restaurant\_latitude as lat\_dis}}( \\ |
|||
&\sigma_{\text{restaurant\_is\_approved} = \text{TRUE}} |
|||
(\text{restaurant})))) |
|||
\end{align*} |
|||
|
|||
\item |
|||
Όλα τα ονόματα εστιατορίων τα οποία δεν έχουν εγκριθεί ακόμα: |
|||
\begin{displaymath} |
|||
\Pi_{\text{restaurant\_name}} |
|||
(\sigma_{\text{restaurant\_is\_approved} = \text{FALSE}}(\text{restaurant})) |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Συστατικά που απαγορεύονται από τις δίαιτες που ακολουθεί ένας χρήστης καθώς και αυτά που έχει αποκλείσει μεμονωμένα: |
|||
\begin{align*} |
|||
Q3 \leftarrow &\sigma_{\text{user\_id} = \text{given\_id}}(\text{user\_follows\_diet})\triangleleft_{\theta}\text{diet}\triangleleft_{\theta}\text{diet\_prohibits\_ingredient}\triangleleft_{\theta}\text{ingredient} \cup \\ |
|||
&\sigma_{\text{user\_id} = \text{given\_id}}(\text{user\_prohibits\_ingredient})\triangleleft_{\theta}\text{ingredient} |
|||
\end{align*} |
|||
|
|||
\item |
|||
Πιάτα ενός εστιατορίου, εκτός αυτά που περιέχουν συστατικά τα οποία απαγορεύονται από τις δίαιτες που ακολουθεί ένας χρήστης ή τα έχει αποκλείσει μεμονωμένα. Για την ευκολότερη γραφή αυτού του ερωτήματος έγινε η ανάθεση του αποτελέσματος του προηγούμενου ερωτήματος στην προσωρινή μεταβλητή σχέσης Q3: |
|||
\begin{displaymath} |
|||
\sigma_{\text{restaurant\_id} = \text{given\_id}}(\text{food}) - (Q3\triangleleft_{\theta}\text{food\_has\_ingredient}\triangleleft_{\theta}\text{food}) |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Ονόματα ποτών ενός καταστήματος: |
|||
\begin{displaymath} |
|||
\Pi_{\text{drink\_name}} |
|||
(\sigma_{\text{restaurant\_id} = \text{given\_id}}(\text{drink})) |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Ονόματα συστατικών ενός ποτού: |
|||
\begin{displaymath} |
|||
\Pi_{\text{ingredient\_name}} |
|||
(\sigma_{\text{drink\_id} = \text{given\_id}}(\text{drink\_has\_ingredient}) \bowtie \text{ingredient}) |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Τα mails των χρηστών που έχουν αξιολογήσει ένα εστιατόριο: |
|||
\begin{displaymath} |
|||
\Pi_{user\_mail} |
|||
(\sigma_{\text{restaurant\_id} = \text{given\_id}}(\text{user\_rates\_restaurant}) \bowtie \text{user}) |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Μέσος όρων αξιολογήσεων ενός ποτού ενός καταστήματος: |
|||
\begin{displaymath} |
|||
\mathcal{G}_{\text{avg(rating\_grade) as Average rating}} |
|||
(\sigma_{\text{drink\_id} = \text{given\_id}}(\text{user\_rates\_drink})) |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Μέσος όρος αξιολογήσεων ενός καταστήματος με κριτήριο τις δίαιτες ενός χρήστη, για κάθε δίαιτα ξεχωριστά: |
|||
\begin{align*} |
|||
_{\text{diet\_id}}\mathcal{G}_{\text{avg(rating\_grade) as Average rating}} |
|||
(&\sigma_{\text{restaurant\_id} = \text{given\_restaurant\_id}}(\text{user\_rates\_restaurant}) |
|||
\triangleright_{\theta} \\ |
|||
\Pi_{\text{diet\_id}}(&\sigma_{\text{user\_id} = \text{given\_user\_id}}(\text{user\_folows\_diet}))) |
|||
\end{align*} |
|||
|
|||
\item |
|||
Μέση βαθμολογία όλων των καταστημάτων μίας αλυσίδας, για κάθε κατάστημα ξεχωριστά: |
|||
\begin{align*} |
|||
&_{restaurant\_id}\mathcal{G}_{\text{avg(rating\_grade) as Average grade}}( \\ |
|||
&\sigma_{\text{restaurant\_name} = \text{given\_franchise\_name}}(\text{restaurant})\bowtie\text{user\_rates\_restaurant}) |
|||
\end{align*} |
|||
|
|||
\item |
|||
Δικαιώματα ενός χρήστη: |
|||
\begin{displaymath} |
|||
\sigma_{\text{user\_id} = \text{given\_id}}(\text{user})\triangleleft_{\theta}\text{role\_has\_permission}\triangleleft_{\theta}\text{permission} |
|||
\end{displaymath} |
|||
|
|||
\item |
|||
Ονόματα εστιατορίων που προσφέρουν φαγητά με θερμίδες λιγότερες από κάποιο συγκεκριμένο αριθμό: |
|||
\begin{displaymath} |
|||
\Pi_{\text{restaurant\_name}} |
|||
(\sigma_{\text{food\_calories} < \text{given\_number}}(\text{food}) \bowtie \text{restaurant}) |
|||
\end{displaymath} |
|||
|
|||
\end{enumerate} |
@ -0,0 +1 @@ |
|||
\tableofcontents |
@ -0,0 +1,20 @@ |
|||
@misc{ofBool, |
|||
title = {{Μετάφραση της λέξης "Boolean" στα Ελληνικά, σύμφωνα με το WordReference.com}}, |
|||
howpublished = "\url{https://www.wordreference.com/engr/boolean}", |
|||
year = {2008}, |
|||
note = "[Τελευταία πρόσβαση; \today]" |
|||
} |
|||
|
|||
@misc{numberOfRestaurants, |
|||
title = {{Αναφορά στον εκτιμώμενο αριθμό εστιατορίων σε μεγάλες πόλεις ανά την υφήλιο σύμφωνα με το worldcitiescultureforum.com}}, |
|||
howpublished = "\url{http://www.worldcitiescultureforum.com/data/number-of-restaurants}", |
|||
year = {2018}, |
|||
note = "[Τελευταία πρόσβαση; \today]" |
|||
} |
|||
|
|||
@misc{numberOfMenuItems, |
|||
title = {{Αναφορά σε παραδείγματα από μενού καταστημάτων της Θεσσαλονίκης σύμφωνα με το e-food.gr}}, |
|||
howpublished = "\url{https://www.e-food.gr/delivery/thessaloniki}", |
|||
year = {2018}, |
|||
note = "[Τελευταία πρόσβαση; \today]" |
|||
} |
@ -0,0 +1,46 @@ |
|||
\newcommand{\entityTable}[6] {{ |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{l l l} \toprule |
|||
Όνομα Οντότητας & \multicolumn{2}{p{10cm}}{\texttt{#1}} \\ |
|||
Περιγραφή & \multicolumn{2}{p{10cm}}{#2} \\ |
|||
Ιδιότητες & \multicolumn{2}{p{10cm}}{#3} \\ \midrule |
|||
\multirow[t]{#5}{*}{Γνωρίσματα} & #4 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Περιγραφή οντότητας "#1"} |
|||
\label{entityTable:#6} |
|||
\end{table} |
|||
}} |
|||
|
|||
\newcommand{\relationTable}[8] {{ |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{l p{10cm}} \toprule |
|||
Όνομα Συσχέτισης & \texttt{#1} \\ |
|||
Περιγραφή & #2 \\ |
|||
Ιδιότητες & #3 \\ |
|||
Λόγος πληθικότητας & #4 \\ |
|||
\multirow[t]{2}{*}{Συμμετοχή} & #5 \\ |
|||
\multirow[t]{#6}{*}{Γνωρίσματα} & #7 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Περιγραφή συσχέτισης "#1"} |
|||
\label{relationTable:#8} |
|||
\end{table} |
|||
}} |
|||
|
|||
\newcommand{\rEntTable}[6] {{ |
|||
\begin{table}[H] |
|||
\centering |
|||
\begin{tabular}{l l} \toprule |
|||
Όνομα Σχέσης & \texttt{#1} \\ \midrule |
|||
\multicolumn{2}{l}{Γνωρίσματα:} \\ |
|||
Όνομα & Τύπος \\ |
|||
#2 \\ \midrule |
|||
\multicolumn{2}{l}{Περιορισμοί Ακεραιότητας:} \\ |
|||
Πρωτεύον κλειδί & #3 \\ |
|||
\multirow[t]{#4}{*}{Ξένα κλειδιά} & #5 \\ \bottomrule |
|||
\end{tabular} |
|||
\caption{Περιγραφή πίνακα "#1"} |
|||
\label{rEntTable:#6} |
|||
\end{table} |
|||
}} |
@ -0,0 +1 @@ |
|||
\maketitle |
@ -0,0 +1,63 @@ |
|||
\documentclass{report} |
|||
\usepackage{geometry} |
|||
\geometry{a4paper, top=2.5cm, bottom=2.5cm, left=2.2cm,right=2.2cm} |
|||
\usepackage{fontspec} |
|||
\setmainfont{Lato} |
|||
\setmonofont[Mapping=tex-text]{Courier New} |
|||
\usepackage[nonumeralsign]{xgreek} |
|||
\usepackage{fancyhdr} |
|||
\usepackage{hyperref} |
|||
\usepackage{enumitem} |
|||
\usepackage{cite} |
|||
\usepackage{titlesec} |
|||
\usepackage{float} |
|||
\usepackage{booktabs} |
|||
\usepackage{array} |
|||
\usepackage{multirow} |
|||
\usepackage{graphicx} |
|||
\usepackage{amsmath} |
|||
%\usepackage[all]{hypcap} |
|||
%\usepackage{tikz} |
|||
|
|||
\restylefloat{table} |
|||
\hypersetup{colorlinks=true, linkcolor=black, urlcolor=blue, citecolor=blue} |
|||
\urlstyle{same} |
|||
\setlength{\parskip}{\baselineskip} |
|||
%\setlength{\parindent}{0pt} |
|||
|
|||
\input{custom_commands_and_enviroments.tex} |
|||
|
|||
\title{\large ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ \\ |
|||
\large ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ \\ |
|||
\vspace{5cm} |
|||
\includegraphics[width=\textwidth]{res/fwbLOGO}\\ |
|||
\vspace{5cm} |
|||
\large Ομάδα 13 \\ |
|||
Πρώτο παραδοτέο} |
|||
\titleformat{\chapter} |
|||
{\normalfont\LARGE\bfseries}{\thechapter}{1em}{} |
|||
|
|||
\author{Φανάκης Απόστολος, 8261, apostolof@ece.auth.gr \\ |
|||
Τσάκωνας Γεώργιος Νικόλαος, 8252, tsakonag@ece.auth.gr \\ |
|||
Παπαδιάκος Χαράλαμπος, 8302, charaldp@ece.auth.gr} |
|||
\date{\today} |
|||
|
|||
\pagestyle{fancy} |
|||
\lhead{Βάσεις Δεδομένων 2018} |
|||
|
|||
\begin{document} |
|||
|
|||
\input{front_page.tex} |
|||
\newpage |
|||
\input{TOC.tex} |
|||
\input{1.introduction/1.0.introduction.tex} |
|||
\input{2.user_categories_and_requirements/2.0.user_categories_and_requirements.tex} |
|||
\input{3.entity_relationship_model/3.0.entity_relationship_model.tex} |
|||
\input{4.relational_model/4.0.relational_model.tex} |
|||
\input{5.examples/5.0.examples.tex} |
|||
|
|||
\bibliographystyle{ieeetr} |
|||
\bibliography{cites}{} |
|||
\bibliographystyle{plain} |
|||
|
|||
\end{document} |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 79 KiB |
@ -0,0 +1,263 @@ |
|||
%% Creator: Inkscape inkscape 0.92.3, www.inkscape.org |
|||
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 |
|||
%% Accompanies image file 'res/diagrams/ERD.pdf' (pdf, eps, ps) |
|||
%% |
|||
%% To include the image in your LaTeX document, write |
|||
%% \input{<filename>.pdf_tex} |
|||
%% instead of |
|||
%% \includegraphics{<filename>.pdf} |
|||
%% To scale the image, write |
|||
%% \def\svgwidth{<desired width>} |
|||
%% \input{<filename>.pdf_tex} |
|||
%% instead of |
|||
%% \includegraphics[width=<desired width>]{<filename>.pdf} |
|||
%% |
|||
%% Images with a different path to the parent latex file can |
|||
%% be accessed with the `import' package (which may need to be |
|||
%% installed) using |
|||
%% \usepackage{import} |
|||
%% in the preamble, and then including the image with |
|||
%% \import{<path to file>}{<filename>.pdf_tex} |
|||
%% Alternatively, one can specify |
|||
%% \graphicspath{{<path to file>/}} |
|||
%% |
|||
%% For more information, please see info/svg-inkscape on CTAN: |
|||
%% http://tug.ctan.org/tex-archive/info/svg-inkscape |
|||
%% |
|||
\begingroup% |
|||
\makeatletter% |
|||
\providecommand\color[2][]{% |
|||
\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% |
|||
\renewcommand\color[2][]{}% |
|||
}% |
|||
\providecommand\transparent[1]{% |
|||
\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% |
|||
\renewcommand\transparent[1]{}% |
|||
}% |
|||
\providecommand\rotatebox[2]{#2}% |
|||
\newcommand*\fsize{\dimexpr\f@size pt\relax}% |
|||
\newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% |
|||
\ifx\svgwidth\undefined% |
|||
\setlength{\unitlength}{1236bp}% |
|||
\ifx\svgscale\undefined% |
|||
\relax% |
|||
\else% |
|||
\setlength{\unitlength}{\unitlength * \real{\svgscale}}% |
|||
\fi% |
|||
\else% |
|||
\setlength{\unitlength}{\svgwidth}% |
|||
\fi% |
|||
\global\let\svgwidth\undefined% |
|||
\global\let\svgscale\undefined% |
|||
\makeatother% |
|||
\begin{picture}(1,0.70145631)% |
|||
\lineheight{1}% |
|||
\setlength\tabcolsep{0pt}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=1]{res/diagrams/ERD.pdf}}% |
|||
\put(0.9214199,0.17930825){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=2]{res/diagrams/ERD.pdf}}% |
|||
\put(0.83525485,0.02639563){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}permission\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=3]{res/diagrams/ERD.pdf}}% |
|||
\put(0.58768204,0.17930825){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=4]{res/diagrams/ERD.pdf}}% |
|||
\put(0.79945388,0.43841019){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=5]{res/diagrams/ERD.pdf}}% |
|||
\put(0.40625,0.54277913){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=6]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19265777,0.47481796){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=7]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19265777,0.22785194){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}ingredient\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=8]{res/diagrams/ERD.pdf}}% |
|||
\put(0.30248786,0.14775485){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=9]{res/diagrams/ERD.pdf}}% |
|||
\put(0.68476942,0.51061893){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{restaurant\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=10]{res/diagrams/ERD.pdf}}% |
|||
\put(0.93294903,0.50394417){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_rating\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=11]{res/diagrams/ERD.pdf}}% |
|||
\put(0.62408981,0.47967233){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=12]{res/diagrams/ERD.pdf}}% |
|||
\put(0.47299757,0.53246359){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=13]{res/diagrams/ERD.pdf}}% |
|||
\put(0.5306432,0.52032767){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}offers\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=14]{res/diagrams/ERD.pdf}}% |
|||
\put(0.92991505,0.46753641){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_reviews\_number\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=15]{res/diagrams/ERD.pdf}}% |
|||
\put(0.6871966,0.55491505){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=16]{res/diagrams/ERD.pdf}}% |
|||
\put(0.82372573,0.62105583){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_working\_hours\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=17]{res/diagrams/ERD.pdf}}% |
|||
\put(0.70115291,0.60163835){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_coordinates\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=18]{res/diagrams/ERD.pdf}}% |
|||
\put(0.8910801,0.58950243){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_category\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=19]{res/diagrams/ERD.pdf}}% |
|||
\put(0.93294903,0.53731796){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=20]{res/diagrams/ERD.pdf}}% |
|||
\put(0.65078883,0.64775485){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_longitude\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=21]{res/diagrams/ERD.pdf}}% |
|||
\put(0.75151699,0.66231796){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_latitude\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=22]{res/diagrams/ERD.pdf}}% |
|||
\put(0.84739078,0.68416262){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_opening\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=23]{res/diagrams/ERD.pdf}}% |
|||
\put(0.93355583,0.66231796){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_closing\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=24]{res/diagrams/ERD.pdf}}% |
|||
\put(0.3121966,0.58464806){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{food\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=25]{res/diagrams/ERD.pdf}}% |
|||
\put(0.32493932,0.61377427){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=26]{res/diagrams/ERD.pdf}}% |
|||
\put(0.32675971,0.64411408){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=27]{res/diagrams/ERD.pdf}}% |
|||
\put(0.36923544,0.67445388){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_calories\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=28]{res/diagrams/ERD.pdf}}% |
|||
\put(0.46571602,0.68598301){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=29]{res/diagrams/ERD.pdf}}% |
|||
\put(0.51729369,0.65928398){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_rating\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=30]{res/diagrams/ERD.pdf}}% |
|||
\put(0.55006068,0.62287621){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_reviews\_number\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=31]{res/diagrams/ERD.pdf}}% |
|||
\put(0.54824029,0.59010922){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_portion\_size\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=32]{res/diagrams/ERD.pdf}}% |
|||
\put(0.10042476,0.51001214){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{drink\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=33]{res/diagrams/ERD.pdf}}% |
|||
\put(0.06523058,0.54581311){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=34]{res/diagrams/ERD.pdf}}% |
|||
\put(0.05188107,0.5773665){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=35]{res/diagrams/ERD.pdf}}% |
|||
\put(0.08222087,0.61680825){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=36]{res/diagrams/ERD.pdf}}% |
|||
\put(0.15260922,0.64411408){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_rating\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=37]{res/diagrams/ERD.pdf}}% |
|||
\put(0.22542476,0.61438107){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_reviews\_number\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=38]{res/diagrams/ERD.pdf}}% |
|||
\put(0.28489078,0.55734223){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_portion\_size\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=39]{res/diagrams/ERD.pdf}}% |
|||
\put(0.0779733,0.25394417){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{ingredient\_name}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=40]{res/diagrams/ERD.pdf}}% |
|||
\put(0.06583738,0.21268204){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}ingredient\_has\_alcohol\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=41]{res/diagrams/ERD.pdf}}% |
|||
\put(0.17809466,0.09921117){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{diet\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=42]{res/diagrams/ERD.pdf}}% |
|||
\put(0.21146845,0.07493932){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=43]{res/diagrams/ERD.pdf}}% |
|||
\put(0.28246359,0.05612864){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=44]{res/diagrams/ERD.pdf}}% |
|||
\put(0.35406553,0.08100728){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=45]{res/diagrams/ERD.pdf}}% |
|||
\put(0.48149272,0.10831311){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=46]{res/diagrams/ERD.pdf}}% |
|||
\put(0.49423544,0.07493932){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_email\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=47]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19265777,0.14775485){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}prohibits\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=48]{res/diagrams/ERD.pdf}}% |
|||
\put(0.5306432,0.43841019){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}offers\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=49]{res/diagrams/ERD.pdf}}% |
|||
\put(0.9214199,0.08100728){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}has\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=50]{res/diagrams/ERD.pdf}}% |
|||
\put(0.25637136,0.38865291){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}has\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=51]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19265777,0.38865291){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}has\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=52]{res/diagrams/ERD.pdf}}% |
|||
\put(0.6878034,0.17930825){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}M\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=53]{res/diagrams/ERD.pdf}}% |
|||
\put(0.77760922,0.17930825){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}has\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=54]{res/diagrams/ERD.pdf}}% |
|||
\put(0.41777913,0.22785194){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}prohibits\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=55]{res/diagrams/ERD.pdf}}% |
|||
\put(0.41777913,0.14775485){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}follows\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=56]{res/diagrams/ERD.pdf}}% |
|||
\put(0.86620146,0.36559466){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}owns\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=57]{res/diagrams/ERD.pdf}}% |
|||
\put(0.69872573,0.4378034){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=58]{res/diagrams/ERD.pdf}}% |
|||
\put(0.28489078,0.48331311){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=59]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19326456,0.43537621){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=60]{res/diagrams/ERD.pdf}}% |
|||
\put(0.32615291,0.50212379){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=61]{res/diagrams/ERD.pdf}}% |
|||
\put(0.24362864,0.14775485){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}M\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=62]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19265777,0.19205097){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=63]{res/diagrams/ERD.pdf}}% |
|||
\put(0.48998786,0.16535194){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}M\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=64]{res/diagrams/ERD.pdf}}% |
|||
\put(0.36498786,0.14775485){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=65]{res/diagrams/ERD.pdf}}% |
|||
\put(0.49059466,0.20661408){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}M\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=66]{res/diagrams/ERD.pdf}}% |
|||
\put(0.27336165,0.22785194){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=67]{res/diagrams/ERD.pdf}}% |
|||
\put(0.84496359,0.17930825){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=68]{res/diagrams/ERD.pdf}}% |
|||
\put(0.9214199,0.13379854){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}M\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=69]{res/diagrams/ERD.pdf}}% |
|||
\put(0.90989078,0.02518204){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=70]{res/diagrams/ERD.pdf}}% |
|||
\put(0.5476335,0.05066748){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_username\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=71]{res/diagrams/ERD.pdf}}% |
|||
\put(0.62894417,0.06887136){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_hashed\_password\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=72]{res/diagrams/ERD.pdf}}% |
|||
\put(0.68294903,0.09617718){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_salt\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=73]{res/diagrams/ERD.pdf}}% |
|||
\put(0.71268204,0.12955097){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_number\_of\_reviews\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=74]{res/diagrams/ERD.pdf}}% |
|||
\put(0.72845874,0.04399272){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{permission\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=75]{res/diagrams/ERD.pdf}}% |
|||
\put(0.71632282,0.00879854){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}permission\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=76]{res/diagrams/ERD.pdf}}% |
|||
\put(0.86620146,0.41231796){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=77]{res/diagrams/ERD.pdf}}% |
|||
\put(0.78974515,0.21086165){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=78]{res/diagrams/ERD.pdf}}% |
|||
\put(0.89532767,0.23027913){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{role\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=79]{res/diagrams/ERD.pdf}}% |
|||
\put(0.95782767,0.29035194){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=80]{res/diagrams/ERD.pdf}}% |
|||
\put(0.90442961,0.26061893){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=81]{res/diagrams/ERD.pdf}}% |
|||
\put(0.19326456,0.32251214){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=82]{res/diagrams/ERD.pdf}}% |
|||
\put(0.23816748,0.30370146){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}N\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=83]{res/diagrams/ERD.pdf}}% |
|||
\put(0.75758495,0.22178398){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}Μ\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=84]{res/diagrams/ERD.pdf}}% |
|||
\put(0.79945388,0.36498786){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}Ν\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=85]{res/diagrams/ERD.pdf}}% |
|||
\put(0.40260922,0.25879854){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}1\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=86]{res/diagrams/ERD.pdf}}% |
|||
\put(0.48695388,0.30066748){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}Μ\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=87]{res/diagrams/ERD.pdf}}% |
|||
\put(0.48756068,0.47845874){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}Ν\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=88]{res/diagrams/ERD.pdf}}% |
|||
\put(0.40382282,0.27214806){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}Μ\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=89]{res/diagrams/ERD.pdf}}% |
|||
\put(0.30248786,0.46510922){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}Ν\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=90]{res/diagrams/ERD.pdf}}% |
|||
\put(0.31826456,0.38865291){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rates\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=91]{res/diagrams/ERD.pdf}}% |
|||
\put(0.48756068,0.38865291){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rates\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=92]{res/diagrams/ERD.pdf}}% |
|||
\put(0.75758495,0.26001214){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rates\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=93]{res/diagrams/ERD.pdf}}% |
|||
\put(0.38743932,0.44508495){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_grade\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=94]{res/diagrams/ERD.pdf}}% |
|||
\put(0.42081311,0.4056432){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_text\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=95]{res/diagrams/ERD.pdf}}% |
|||
\put(0.42930825,0.36134709){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_date\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=96]{res/diagrams/ERD.pdf}}% |
|||
\put(0.39654126,0.31462379){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_portion\_size\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=97]{res/diagrams/ERD.pdf}}% |
|||
\put(0.6089199,0.41777913){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_grade\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=98]{res/diagrams/ERD.pdf}}% |
|||
\put(0.62651699,0.37773058){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_text\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=99]{res/diagrams/ERD.pdf}}% |
|||
\put(0.60527913,0.34010922){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_date\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=100]{res/diagrams/ERD.pdf}}% |
|||
\put(0.55734223,0.31158981){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_portion\_size\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=101]{res/diagrams/ERD.pdf}}% |
|||
\put(0.66595874,0.29945388){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_grade\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=102]{res/diagrams/ERD.pdf}}% |
|||
\put(0.75212379,0.36438107){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_text\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=103]{res/diagrams/ERD.pdf}}% |
|||
\put(0.68962379,0.33404126){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_date\end{tabular}}}}% |
|||
\end{picture}% |
|||
\endgroup% |
@ -0,0 +1,209 @@ |
|||
%% Creator: Inkscape inkscape 0.92.3, www.inkscape.org |
|||
%% PDF/EPS/PS + LaTeX output extension by Johan Engelen, 2010 |
|||
%% Accompanies image file 'res/diagrams/Relational_Diagram.pdf' (pdf, eps, ps) |
|||
%% |
|||
%% To include the image in your LaTeX document, write |
|||
%% \input{<filename>.pdf_tex} |
|||
%% instead of |
|||
%% \includegraphics{<filename>.pdf} |
|||
%% To scale the image, write |
|||
%% \def\svgwidth{<desired width>} |
|||
%% \input{<filename>.pdf_tex} |
|||
%% instead of |
|||
%% \includegraphics[width=<desired width>]{<filename>.pdf} |
|||
%% |
|||
%% Images with a different path to the parent latex file can |
|||
%% be accessed with the `import' package (which may need to be |
|||
%% installed) using |
|||
%% \usepackage{import} |
|||
%% in the preamble, and then including the image with |
|||
%% \import{<path to file>}{<filename>.pdf_tex} |
|||
%% Alternatively, one can specify |
|||
%% \graphicspath{{<path to file>/}} |
|||
%% |
|||
%% For more information, please see info/svg-inkscape on CTAN: |
|||
%% http://tug.ctan.org/tex-archive/info/svg-inkscape |
|||
%% |
|||
\begingroup% |
|||
\makeatletter% |
|||
\providecommand\color[2][]{% |
|||
\errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded}% |
|||
\renewcommand\color[2][]{}% |
|||
}% |
|||
\providecommand\transparent[1]{% |
|||
\errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded}% |
|||
\renewcommand\transparent[1]{}% |
|||
}% |
|||
\providecommand\rotatebox[2]{#2}% |
|||
\newcommand*\fsize{\dimexpr\f@size pt\relax}% |
|||
\newcommand*\lineheight[1]{\fontsize{\fsize}{#1\fsize}\selectfont}% |
|||
\ifx\svgwidth\undefined% |
|||
\setlength{\unitlength}{592.125bp}% |
|||
\ifx\svgscale\undefined% |
|||
\relax% |
|||
\else% |
|||
\setlength{\unitlength}{\unitlength * \real{\svgscale}}% |
|||
\fi% |
|||
\else% |
|||
\setlength{\unitlength}{\svgwidth}% |
|||
\fi% |
|||
\global\let\svgwidth\undefined% |
|||
\global\let\svgscale\undefined% |
|||
\makeatother% |
|||
\begin{picture}(1,1.34497209)% |
|||
\lineheight{1}% |
|||
\setlength\tabcolsep{0pt}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=1]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.14692844,1.30968968){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{restaurant\_id}\end{tabular}}}}% |
|||
\put(0.12919569,1.33628879){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=2]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.30778974,1.30968968){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=3]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.49525016,1.30968968){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_category\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=4]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.39138695,1.27802407){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_opening\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=5]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.70044332,1.30968968){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_longitude\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=6]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.90436985,1.30968968){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_latitude\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=7]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.58771374,1.27802407){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_closing\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=8]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.8030399,1.27802407){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=9]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.96136795,1.27802407){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_id\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=10]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11652945,1.18556048){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=11]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.23052565,1.18556048){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{restaurant\_id}\end{tabular}}}}% |
|||
\put(0.18366054,1.21215959){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_rates\_restaurant\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=12]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.36985434,1.18556048){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_grade\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=13]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.49778341,1.18556048){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_text\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=14]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.61684611,1.18556048){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_date\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=15]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.71564281,1.18556048){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_id\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=16]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11526282,1.10069664){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{food\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=17]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.20772641,1.10069664){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=18]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.34452185,1.10069664){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_description\end{tabular}}}}% |
|||
\put(0.10006333,1.12729576){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=19]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.50284991,1.10069664){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_calories\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=20]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.66244459,1.10069664){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=21]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.82077264,1.10069664){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_id\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=22]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.12286257,1.01709943){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{food\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=23]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.25585814,1.01709943){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{ingredient\_name}\end{tabular}}}}% |
|||
\put(0.17479417,1.04369854){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}food\_has\_ingredient\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=24]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.12286257,0.93223559){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{drink\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=25]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.2229259,0.93223559){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=26]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.37112096,0.93223559){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_description\end{tabular}}}}% |
|||
\put(0.10512983,0.95883471){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=27]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.55478151,0.93223559){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=28]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.71817606,0.93223559){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}restaurant\_id\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=29]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.12159595,0.84863838){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{drink\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=30]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.25712476,0.84863838){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{ingredient\_name}\end{tabular}}}}% |
|||
\put(0.17859405,0.87523749){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}drink\_has\_ingredient\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=31]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11526282,0.76377454){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0.15452818,0.79037365){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_rates\_food\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=32]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.19886004,0.76377454){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{food\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=33]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.30652312,0.76377454){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_grade\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=34]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.43318556,0.76377454){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_text\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=35]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.55478151,0.76377454){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_date\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=36]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.71437619,0.76377454){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_pοrtion\_size\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=37]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11526282,0.68017733){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=38]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.20519316,0.68017733){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{drink\_id}\end{tabular}}}}% |
|||
\put(0.15959468,0.70677644){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_rates\_drink\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=39]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.73717543,0.68017733){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_pοrtion\_size\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=40]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.57124763,0.68017733){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_date\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=41]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.44838505,0.68017733){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_text\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=42]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.31792274,0.68017733){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}rating\_grade\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=43]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.15832806,0.59531349){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{ingredient\_name}\end{tabular}}}}% |
|||
\put(0.12919569,0.6219126){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}ingredient\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=44]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.35718809,0.59531349){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}ingredient\_has\_alcohol\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=45]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11652945,0.51171628){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0.20392654,0.53831539){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_prohibits\_ingredient\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=46]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.24445852,0.51171628){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{ingredient\_name}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=47]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.70170994,0.25965801){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{diet\_id}\end{tabular}}}}% |
|||
\put(0.79037365,0.28625712){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_prohibits\_ingredient\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=48]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.82837239,0.25965801){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{ingredient\_name}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=49]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11652945,0.42685244){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=50]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.33818873,0.42685244){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_username\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=51]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.21025966,0.42685244){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_email\end{tabular}}}}% |
|||
\put(0.10006333,0.45345155){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=52]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.51551615,0.42685244){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_hashed\_password\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=53]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.67131096,0.42685244){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_salt\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=54]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.76250792,0.42685244){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\_id\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=55]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11652945,0.34325522){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{user\_id}\end{tabular}}}}% |
|||
\put(0.16466118,0.36985434){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}user\_follows\_diet\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=56]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.19886004,0.34325522){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{diet\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=57]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.11652945,0.25965801){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_id\end{tabular}}}}% |
|||
\put(0.10006333,0.28625712){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=58]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.21025966,0.25965801){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=59]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.35085497,0.25965801){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=60]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.52184927,0.25965801){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}diet\_is\_approved\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=61]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.12159595,0.17479417){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{role\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=62]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.2229259,0.17479417){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\_name\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=63]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.36225459,0.17479417){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\_description\end{tabular}}}}% |
|||
\put(0.10006333,0.20139329){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=64]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.12286257,0.09119696){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{role\_id}\end{tabular}}}}% |
|||
\put(0.17479417,0.11779607){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}role\_has\_permission\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=65]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.24319189,0.09119696){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{permission\_id}\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=66]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.14692844,0.00633312){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}\underline{permission\_id}\end{tabular}}}}% |
|||
\put(0.12919569,0.03293224){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}permission\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=67]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\put(0.3369221,0.00633312){\color[rgb]{0,0,0}\makebox(0,0)[t]{\lineheight{1.25}\smash{\begin{tabular}[t]{c}permission\_description\end{tabular}}}}% |
|||
\put(0,0){\includegraphics[width=\unitlength,page=68]{res/diagrams/Relational_Diagram.pdf}}% |
|||
\end{picture}% |
|||
\endgroup% |
After Width: | Height: | Size: 18 KiB |
Loading…
Reference in new issue