diff --git a/3-4-relazioni.md b/3-4-relazioni.md index 95c6cd2..9b1de3c 100644 --- a/3-4-relazioni.md +++ b/3-4-relazioni.md @@ -16,9 +16,10 @@ > > Inoltre, potranno decidere di __bannare__ utenti dal sito, impedendo loro di effettuare l'accesso e di conseguenza di interagire con la loro raccolta. +![](img/3-4-relazioni/utente.png) + Per gli Utenti, si sono aggiunti gli attributi all'entità seguendo strettamente le specifiche. -![](img/3-4-relazioni/utente.png) ## Elementi @@ -34,11 +35,12 @@ Per gli Utenti, si sono aggiunti gli attributi all'entità seguendo strettamente > > La recensione sarà composta da una valutazione (tra 0 e 100, dove 100 è la valutazione migliore), un commento e la data di pubblicazione. +![](img/3-4-relazioni/elemento.png) + Gli Elementi sono stati suddivisi in tre sottoentità _Elemento (Libro)_, _Elemento (film)_ ed _Elemento (gioco)_ per permettere loro di possedere attributi e relazioni di tipo diverso gli uni dagli altri. Le Recensioni presentano un caso di **chiave primaria esterna**: esse infatti usano come chiave primaria l'id dell'elemento a cui si riferiscono. -![](img/3-4-relazioni/elemento.png) ## Libri @@ -48,15 +50,34 @@ Le Recensioni presentano un caso di **chiave primaria esterna**: esse infatti us > > Le edizioni in formato audiolibro avranno attributi diversi: invece che avere il numero di pagine e la copertina, essi avranno la durata in minuti e secondi della registrazione e opzionalmente un'immagine che rappresenti l'audiolibro. -Lo schema dei libri è stato realizzato seguendo in buona parte le specifiche; si sono però realizzate alcune aggiunte: -- Gli Editori sono identificati dal loro prefisso ISBN; +![](img/3-4-relazioni/libri.png) + +Lo schema dei Libri è stato realizzato seguendo in buona parte le specifiche; si sono però realizzate alcune aggiunte: - Le Edizioni di un libro sono dotate anch'esse di un titolo, che rappresenta il titolo dell'Edizione specifica (titolo tradotto, edizione speciale...); -- [Come menzionato in precedenza](3-2-gerarchie.md), è stata realizzata una gerarchia IsA con le Edizioni di Libri e Audiolibri; +- [Come menzionato in precedenza](3-2-gerarchie.md), è stata istituita una **gerarchia IsA** con le Edizioni di Libri e Audiolibri; - Le Edizioni di un Audiolibro possono avere associato uno o più Narratori. -Si è scelto di usare l'ID interno come chiave delle entità Narratore, Autore e Genere in modo da permettere la modifica del rispettivo nome senza dover andare a modificare tutte le entità ad esso assicate. +### Una ricorrenza nelle relazioni: il pattern "1NN0" -![](img/3-4-relazioni/libri.png) + + +![](img/3-4-relazioni/inno-1.png) +![](img/3-4-relazioni/inno-2.png) +![](img/3-4-relazioni/inno-3.png) + +Osservando lo schema, si nota che le relazioni "narrata da", "scritto da" e "appartiene a" sono molto simili tra loro: tutte e tre sono **0 a N** nel lato che si collega al Libro (o a una sua Edizione), sono **1 a N** dall'altro lato e si ricollegano a una entità con due soli attributi, _Nome_ e _ID_. + +Si è deciso di usare l'associazione **0 a N** nel lato del Libro perchè gli utenti possano non compilare tutti i dettagli di un libro nel momento in cui lo aggiungono ma anche perchè possano compilare accuratamente tutti i campi, ad esempio permettendo l'inserimento di un testo in più generi. + +Dato che si è voluto rendere possibili query come "quali libri ha scritto questo autore" o "quali libri appartengono a questo genere" e che inserire nel database autori, narratori o generi a cui non appartiene nessun libro non avrebbe alcun senso, si è scelto di usare una relazione **1 a N** nell'altro lato della relazione. + +Infine, per l'entità connessa al lato _1 a N_ della relazione, si è deciso di usare un **ID interno** come chiave dell'entità, in modo da permettere la modifica del _Nome_ associato senza dover andare a modificare tutti i Libri (o Edizioni). + +### Editori e ISBN + +![](img/3-4-relazioni/editore.png) + +Tutti i codici ISBN contengono al loro interno [un codice univoco che identifica l'editore](https://it.wikipedia.org/wiki/ISBN#Editore) di un libro; si è quindi deciso di usare questo codice per identificare l'entità Editore, in quanto esso soddisfa tutti i requisiti per essere una chiave. ## Film @@ -64,10 +85,33 @@ Si è scelto di usare l'ID interno come chiave delle entità Narratore, Autore e > > I film saranno identificati dal loro [codice EIDR](https://ui.eidr.org/search), e per ciascuno di essi verrà calcolata la valutazione media dalle recensioni, che sarà visualizzata sulla pagina assieme a un campione di recensioni. - - ![](img/3-4-relazioni/film.png) +### Il pattern 1NN0 nei film + +![](img/3-4-relazioni/inno-4.png) +![](img/3-4-relazioni/inno-5.png) + +Nello schema dei film, si possono notare altre due applicazioni del pattern _1NN0_ menzionato in precedenza: "prodotto da" e "appartiene a". + +### Vi ha preso parte: una relazione 1NN0 ternaria + +![](img/3-4-relazioni/ternaria.png) + +Nello schema dei film è presente la relazione ternaria "vi ha preso parte". +Essa associa una persona a un film, specificando il ruolo ("attore", "regista", "sceneggiatore"...) per cui ella vi ha preso parte. + +È stata modellata così in modo da permettere query avanzate sul cast di un film: ad esempio, "in quali film Quentin Tarantino ha avuto il ruolo di regista", oppure "che ruoli ha ricoperto Johnny Depp". + +### Localizzazione: una entità debole + +![](img/3-4-relazioni/entita-debole.png) + +Simile al pattern _1NN0_, ma fondamentalmente diversa è la relazione "in altre lingue": essa infatti ha un'associazione _0 a N_ dal lato Film, ma una _1 a 1_ dal lato Localizzazione, e in più, l'associazione è parte della chiave primaria di Localizzazione. + +L'entità Localizzazione rappresenta il titolo di un film tradotto in una lingua diversa dall'originale: ad esempio, _Il Padrino_ potrebbe essere una localizzazione in `it` (italiano) di _The Godfather_. +La sua chiave è composta dal codice della lingua e dall'identificatore del film a cui essa si riferisce: è dunque una **entità debole**. + ## Videogiochi > Ogni videogioco avrà una sua pagina in cui sarà presente il titolo, lo sviluppatore, il publisher, una breve descrizione del gioco, l'elenco di tutte le piattaforme in cui esso è disponibile e, come per libri e film, un elenco di altri giochi correlati. diff --git a/img/0-README/alexandria.png b/img/0-README/alexandria.png new file mode 100644 index 0000000..d9e95b0 Binary files /dev/null and b/img/0-README/alexandria.png differ diff --git a/img/3-1-schema-scheletro/film.png b/img/3-1-schema-scheletro/film.png new file mode 100644 index 0000000..a2f5d41 Binary files /dev/null and b/img/3-1-schema-scheletro/film.png differ diff --git a/img/3-1-schema-scheletro/generale.png b/img/3-1-schema-scheletro/generale.png new file mode 100644 index 0000000..d4bd999 Binary files /dev/null and b/img/3-1-schema-scheletro/generale.png differ diff --git a/img/3-1-schema-scheletro/giochi.png b/img/3-1-schema-scheletro/giochi.png new file mode 100644 index 0000000..be2e7ab Binary files /dev/null and b/img/3-1-schema-scheletro/giochi.png differ diff --git a/img/3-1-schema-scheletro/libri.png b/img/3-1-schema-scheletro/libri.png new file mode 100644 index 0000000..62b8005 Binary files /dev/null and b/img/3-1-schema-scheletro/libri.png differ diff --git a/img/3-2-gerarchie/gerarchia-1.png b/img/3-2-gerarchie/gerarchia-1.png new file mode 100644 index 0000000..1d87b95 Binary files /dev/null and b/img/3-2-gerarchie/gerarchia-1.png differ diff --git a/img/3-2-gerarchie/gerarchia-2.png b/img/3-2-gerarchie/gerarchia-2.png new file mode 100644 index 0000000..452986a Binary files /dev/null and b/img/3-2-gerarchie/gerarchia-2.png differ diff --git a/img/3-3-autoassociazioni/autoassociazione.png b/img/3-3-autoassociazioni/autoassociazione.png new file mode 100644 index 0000000..bbbc15d Binary files /dev/null and b/img/3-3-autoassociazioni/autoassociazione.png differ diff --git a/img/3-4-relazioni/editore.png b/img/3-4-relazioni/editore.png new file mode 100644 index 0000000..7fd26a2 Binary files /dev/null and b/img/3-4-relazioni/editore.png differ diff --git a/img/3-4-relazioni/elemento.png b/img/3-4-relazioni/elemento.png new file mode 100644 index 0000000..a576942 Binary files /dev/null and b/img/3-4-relazioni/elemento.png differ diff --git a/img/3-4-relazioni/entita-debole.png b/img/3-4-relazioni/entita-debole.png new file mode 100644 index 0000000..b638c2b Binary files /dev/null and b/img/3-4-relazioni/entita-debole.png differ diff --git a/img/3-4-relazioni/film.png b/img/3-4-relazioni/film.png new file mode 100644 index 0000000..be23cff Binary files /dev/null and b/img/3-4-relazioni/film.png differ diff --git a/img/3-4-relazioni/giochi.png b/img/3-4-relazioni/giochi.png new file mode 100644 index 0000000..ed4ce87 Binary files /dev/null and b/img/3-4-relazioni/giochi.png differ diff --git a/img/3-4-relazioni/inno-1.png b/img/3-4-relazioni/inno-1.png new file mode 100644 index 0000000..7dabf90 Binary files /dev/null and b/img/3-4-relazioni/inno-1.png differ diff --git a/img/3-4-relazioni/inno-2.png b/img/3-4-relazioni/inno-2.png new file mode 100644 index 0000000..c15dd43 Binary files /dev/null and b/img/3-4-relazioni/inno-2.png differ diff --git a/img/3-4-relazioni/inno-3.png b/img/3-4-relazioni/inno-3.png new file mode 100644 index 0000000..007fefb Binary files /dev/null and b/img/3-4-relazioni/inno-3.png differ diff --git a/img/3-4-relazioni/inno-4.png b/img/3-4-relazioni/inno-4.png new file mode 100644 index 0000000..c5a044b Binary files /dev/null and b/img/3-4-relazioni/inno-4.png differ diff --git a/img/3-4-relazioni/inno-5.png b/img/3-4-relazioni/inno-5.png new file mode 100644 index 0000000..6b9de4c Binary files /dev/null and b/img/3-4-relazioni/inno-5.png differ diff --git a/img/3-4-relazioni/libri.png b/img/3-4-relazioni/libri.png new file mode 100644 index 0000000..47893fb Binary files /dev/null and b/img/3-4-relazioni/libri.png differ diff --git a/img/3-4-relazioni/ternaria.png b/img/3-4-relazioni/ternaria.png new file mode 100644 index 0000000..b703b9c Binary files /dev/null and b/img/3-4-relazioni/ternaria.png differ diff --git a/img/3-4-relazioni/utente.png b/img/3-4-relazioni/utente.png new file mode 100644 index 0000000..fa31d57 Binary files /dev/null and b/img/3-4-relazioni/utente.png differ