Browse Source

Init

master
Apostolos Fanakis 6 years ago
commit
8cf655dcc2
  1. 260
      .gitignore
  2. 7
      Database design/1.introduction/1.0.introduction.tex
  3. 7
      Database design/1.introduction/1.1.purpose.tex
  4. 9
      Database design/1.introduction/1.2.description.tex
  5. 25
      Database design/1.introduction/1.3.requirements.tex
  6. 14
      Database design/2.user_categories_and_requirements/2.0.user_categories_and_requirements.tex
  7. 10
      Database design/2.user_categories_and_requirements/2.1.customer.tex
  8. 9
      Database design/2.user_categories_and_requirements/2.2.moderator.tex
  9. 14
      Database design/2.user_categories_and_requirements/2.3.owner.tex
  10. 8
      Database design/3.entity_relationship_model/3.0.entity_relationship_model.tex
  11. 32
      Database design/3.entity_relationship_model/3.1.general_description.tex
  12. 109
      Database design/3.entity_relationship_model/3.2.entities_definition.tex
  13. 202
      Database design/3.entity_relationship_model/3.3.relationships_definition.tex
  14. 12
      Database design/3.entity_relationship_model/3.4.ERDs.tex
  15. 6
      Database design/4.relational_model/4.0.relational_model.tex
  16. 24
      Database design/4.relational_model/4.1.attribute_domains.tex
  17. 189
      Database design/4.relational_model/4.2.relations.tex
  18. 14
      Database design/4.relational_model/4.3.relational_diagram.tex
  19. 19
      Database design/4.relational_model/4.4.views.tex
  20. 4
      Database design/5.examples/5.0.examples.tex
  21. 284
      Database design/5.examples/5.1.table_examples.tex
  22. 92
      Database design/5.examples/5.2.query_examples.tex
  23. 1
      Database design/TOC.tex
  24. 20
      Database design/cites.bib
  25. 46
      Database design/custom_commands_and_enviroments.tex
  26. 1
      Database design/front_page.tex
  27. 63
      Database design/report.tex
  28. 2
      Database design/res/diagrams/Copy of Flavors without borders ERD.svg
  29. 2
      Database design/res/diagrams/Copy of Flavors without borders relational diagram.svg
  30. 263
      Database design/res/diagrams/ERD.pdf_tex
  31. 209
      Database design/res/diagrams/Relational_Diagram.pdf_tex
  32. BIN
      Database design/res/fwbLOGO.png

260
.gitignore

@ -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

7
Database design/1.introduction/1.0.introduction.tex

@ -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}

7
Database design/1.introduction/1.1.purpose.tex

@ -0,0 +1,7 @@
\section{Σκοπός Εφαρμογής}
Έναυσμα για την επιλογή του θέματος αποτελεί ένα κοινό πρόβλημα που αντιμετωπίζουν άτομα που επισκέπτονται πόλεις του εξωτερικού και πιο συγκεκριμένα, περιοχές όπου η τοπική διάλεκτος δεν γνωστή από τα άτομα αυτά. Πολλές φορές, η επιλογή ενός γεύματος ή ποτού από το μενού ενός καταστήματος παρουσιάζει ιδιαίτερες δυσκολίες. Ακόμα και όταν ο πελάτης μιλά Αγγλικά, σε πολλά εστιατόρια τα μενού δε παρέχονται παρά μόνο στη μητρική γλώσσα της εκάστοτε χώρας. Επίσης, οι υπάλληλοι των καταστημάτων συχνά δεν γνωρίζουν επαρκώς την Αγγλική γλώσσα, έτσι οι συνεννοήσεις με στόχο την επεξήγηση των διάφορων επιλογών που προσφέρονται είναι δύσκολες, χρονοβόρες και ενίοτε άκαρπες.
Τελικά, αρκετά συχνά οι πελάτες καταλήγουν απογοητευμένοι από την επιλογή τους. Το παραπάνω πρόβλημα είναι σημαντικότερο όταν πρόκειται για άτομα που ακολουθούν συγκεκριμένες δίαιτες, όπως διαβητικοί, αλλεργικοί, χορτοφάγοι ή κάποια άλλη θρησκευτική δίαιτα. Σε αυτές τις περιπτώσεις και ειδικά σε όσες αφορούν σε θέματα υγείας, είναι ιδιαίτερα σημαντικό τα άτομα να γνωρίζουν τα συστατικά των πιάτων ή ποτών που τους ενδιαφέρουν πριν προχωρήσουν στην παραγγελία τους.
Οι υπάρχουσες λύσεις βασίζονται σε υπηρεσίες γενικότερου τουριστικού ενδιαφέροντος όπως εφαρμογές τύπου TripAdvisor ή τα δεδομένα που συλλέγει η Google, κάποιες από τις οποίες παρέχουν περιορισμένες πληροφορίες (όπως η καταλληλότητα των εστιατορίων για χορτοφάγους), που όμως δεν δίνουν μία επαρκή λύση στο πρόβλημα.

9
Database design/1.introduction/1.2.description.tex

@ -0,0 +1,9 @@
\section{Περιγραφή Εφαρμογής}
Η λύση, που προτείνεται εδώ, είναι η σχεδίαση και δημιουργία μίας εφαρμογής, η οποία προέρχεται από μία βάση δεδομένων που θα αποθηκεύει τα πιάτα και ποτά που προσφέρει κάθε κατάστημα ξεχωριστά, καθώς και τα συστατικά τους.
Οι απλοί χρήστες (πελάτες) θα έχουν πρόσβαση σε μία μεγάλη βάση δεδομένων, ώστε να ενημερώνονται για τη σύσταση του καθενός από τα πιάτα και ποτά πριν κάνουν την επιλογή τους. Ακόμα, θα δίνεται η δυνατότητα φιλτραρίσματος των επιλογών και ο αποκλεισμός όσων είναι ακατάλληλα για τη δίαιτα που ακολουθεί ο χρήστης. Θα μπορούν να προτείνουν τη προσθήκη νέων καταστημάτων. Οι προτάσεις αυτές, αφού γίνουν αποδεκτές από κάποιον διαχειριστή, θα γίνονται διαθέσιμες στους υπόλοιπους χρήστες. Τέλος, έχουν πρόσβαση στο σύνολο των κριτικών για τα πιάτα ή ποτά που προσφέρει κάθε κατάστημα.
Μία άλλη κατηγορία χρηστών είναι οι ιδιοκτήτες των καταστημάτων. Η εφαρμογή θα δίνει σε αυτούς την ευκαιρία να επιδείξουν τη ποικιλία των πιάτων που προσφέρουν και των υλικών που χρησιμοποιούν, καθώς επίσης την γκάμα από δίαιτες που υποστηρίζει το μενού τους. Ακόμα, θα τους δίνεται η ευκαιρία να διαβάσουν κριτικές για κάθε πιάτο ή ποτό ξεχωριστά με σκοπό τη βελτίωσή τους.
Η παραπάνω λύση παρέχει ορισμένα εμφανή προτερήματα σε σχέση με προηγούμενες προσπάθειες. Η βάση θα παρέχει περισσότερες και πιο αναλυτικές πληροφορίες για κάθε πιάτο και ποτό ξεχωριστά, αλλά και για την συγκεκριμένη υλοποίησή του από το εκάστοτε κατάστημα. Αυτό δίνει μία καλύτερη εικόνα των επιλογών στον χρήστη. Ταυτόχρονα, κάθε χρήστης θα μπορεί να αποθηκεύσει πληροφορίες σχετικές με τη δίαιτα που ακολουθεί, ώστε να γίνεται αυτόματα το φιλτράρισμα των επιλογών όπως περιγράφηκε παραπάνω.

25
Database design/1.introduction/1.3.requirements.tex

@ -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}

14
Database design/2.user_categories_and_requirements/2.0.user_categories_and_requirements.tex

@ -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}

10
Database design/2.user_categories_and_requirements/2.1.customer.tex

@ -0,0 +1,10 @@
\section{Πελάτες}
Οι πελάτες είναι η βασική κατηγορία χρηστών της εφαρμογής. Τα δικαιώματά τους περιλαμβάνουν:
\begin{itemize}
\item Πρόσβαση στα μενού των καταστημάτων, τα πιάτα και ποτά, τα συστατικά και τις κριτικές αυτών
\item Δημιουργία νέων κριτικών
\item Πρόταση προσθήκης νέου καταστήματος, πιάτου, ποτού και δίαιτας στη βάση
\item Προσθήκη νέων συστατικών στη βάση
\item Διαγραφή και τροποποίηση των σχολίων και κριτικών που έχουν κάνει οι ίδιοι
\end{itemize}

9
Database design/2.user_categories_and_requirements/2.2.moderator.tex

@ -0,0 +1,9 @@
\section{Διαχειριστές}
Οι διαχειριστές είναι ιδιαίτερα ενεργοί χρήστες που παίρνουν επιπλέον δικαιώματα μετά από συνεννόηση με τον sysadmin της βάσης. Έχουν την ευθύνη της διασφάλισης της εγκυρότητας των πληροφοριών, της αποδοχής των προτάσεων που κάνουν οι χρήστες και του συντονισμού του διαλόγου στα σχόλια. Τα δικαιώματά τους, επιπλέον αυτών των απλών χρηστών, περιλαμβάνουν:
\begin{itemize}
\item Διαγραφή απρεπών, υβριστικών κριτικών οποιουδήποτε χρήστη
\item Αποδοχή ή απόρριψη προτάσεων των χρηστών
\item Αποκλεισμός (ban) χρηστών
\item Προσθήκη των εστιατορίων που δεν υπάρχουν ήδη στη βάση και σύνδεσή τους με τους ιδιοκτήτες, ύστερα από συνεννόηση με αυτούς
\end{itemize}

14
Database design/2.user_categories_and_requirements/2.3.owner.tex

@ -0,0 +1,14 @@
\section{Ιδιοκτήτες/Υπάλληλοι των καταστημάτων}
Οι ιδιοκτήτες των καταστημάτων είναι μια ειδική κατηγορία χρηστών. Εφόσον κάποιος χρήστης ταυτοποιηθεί και αναγνωριστεί ως ιδιοκτήτης, τα δικαιώματά του διαμορφώνονται ως εξής:
\begin{itemize}
\item Πρόσβαση στα καταστήματα, τα πιάτα και ποτά, τα συστατικά και τις κριτικές
\item Απευθείας προσθήκη νέου πιάτου, ποτού και λίστας συστατικών για το κατάστημα που αντιπροσωπεύει, χωρίς αναμονή αποδοχής από διαχειριστή
\end{itemize}
Τονίζεται εδώ ότι η κατηγορία αυτή στερείται των εξής δικαιωμάτων:
\begin{itemize}
\item Δημιουργία νέων κριτικών για το κατάστημα το οποίο αντιπροσωπεύουν
\item Πρόταση προσθήκης νέου καταστήματος
\item Πρόταση λίστας συστατικών πιάτου (εκτός των καταστημάτων, που αντιπροσωπεύουν)
\end{itemize}

8
Database design/3.entity_relationship_model/3.0.entity_relationship_model.tex

@ -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}

32
Database design/3.entity_relationship_model/3.1.general_description.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}

109
Database design/3.entity_relationship_model/3.2.entities_definition.tex

@ -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}

202
Database design/3.entity_relationship_model/3.3.relationships_definition.tex

@ -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}

12
Database design/3.entity_relationship_model/3.4.ERDs.tex

@ -0,0 +1,12 @@
\section{Διάγραμμα Οντοτήτων/Συσχετίσεων}
\begin{figure}[H]
\centering
\resizebox{\textwidth}{!}{
\texttt{
\input{res/diagrams/ERD.pdf_tex}
}
}
\caption{Διάγραμμα οντοτήτων-συσχετίσεων}
\label{entityTable:ERD}
\end{figure}

6
Database design/4.relational_model/4.0.relational_model.tex

@ -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}

24
Database design/4.relational_model/4.1.attribute_domains.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}

189
Database design/4.relational_model/4.2.relations.tex

@ -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}

14
Database design/4.relational_model/4.3.relational_diagram.tex

@ -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}

19
Database design/4.relational_model/4.4.views.tex

@ -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*}

4
Database design/5.examples/5.0.examples.tex

@ -0,0 +1,4 @@
\chapter{Παραδείγματα}
\input{5.examples/5.1.table_examples.tex}
\input{5.examples/5.2.query_examples.tex}

284
Database design/5.examples/5.1.table_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

92
Database design/5.examples/5.2.query_examples.tex

@ -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}

1
Database design/TOC.tex

@ -0,0 +1 @@
\tableofcontents

20
Database design/cites.bib

@ -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]"
}

46
Database design/custom_commands_and_enviroments.tex

@ -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}
}}

1
Database design/front_page.tex

@ -0,0 +1 @@
\maketitle

63
Database design/report.tex

@ -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}

2
Database design/res/diagrams/Copy of Flavors without borders ERD.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 93 KiB

2
Database design/res/diagrams/Copy of Flavors without borders relational diagram.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 79 KiB

263
Database design/res/diagrams/ERD.pdf_tex

@ -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%

209
Database design/res/diagrams/Relational_Diagram.pdf_tex

@ -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%

BIN
Database design/res/fwbLOGO.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Loading…
Cancel
Save