diff --git a/3-4-relazioni.md b/3-4-relazioni.md index 9b1de3c..639c25b 100644 --- a/3-4-relazioni.md +++ b/3-4-relazioni.md @@ -2,11 +2,7 @@ ## Legenda -- Rettangolo: **entità** -- Rombo: **relazione** -- Linea continua: **attributo obbligatorio** / **relazione 1 a X** -- Linea tratteggiata: **attributo facoltativo** / **relazione 0 a X** -- Pallino o linea arancione: (parte della) **chiave primaria** +![](img/3-4-relazioni/legenda.png) ## Utenti @@ -18,8 +14,7 @@ ![](img/3-4-relazioni/utente.png) -Per gli Utenti, si sono aggiunti gli attributi all'entità seguendo strettamente le specifiche. - +Per gli Utenti, si sono aggiunti gli attributi all'entità seguendo strettamente le specifiche, e aggiungendo un attributo opzionale "email" per funzioni di recupero dell'account. ## Elementi @@ -37,14 +32,27 @@ Per gli Utenti, si sono aggiunti gli attributi all'entità seguendo strettamente ![](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. +### Sottoentità -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-2-gerarchie/gerarchia-1.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; infatti, ognuna delle tre sottoentità è dotata di una associazione "istanza di" che le collega rispettivamente alle entità "Edizione (di un libro)", "Film" e "Edizione (di un gioco)". + +Attributi e relazioni di queste sottoentità saranno descritte in seguito nel paragrafo dedicato. + +### Recensioni + +![](img/3-4-relazioni/recensioni.png) + +Le Recensioni sono collegate agli Elementi attraverso la relazione "riguardante". + +Sono un caso di **chiave primaria esterna**: le Recensioni infatti usano come chiave primaria l'*_id_ dell'Elemento a cui si riferiscono. + +Si può inoltre dire che le Recensioni siano una **entità debole** rispetto agli Elementi, in quanto senza il suo relativo Elemento, una Recensione non sarebbe più dotata di chiave (e non avrebbe più senso di esistere in quanto si riferirebbe a qualcosa di inesistente). ## Libri -> Ogni libro avrà una sua pagina in cui sarà presente il titolo originale, gli autori, i generi, un breve riassunto della trama, l'elenco di tutte le sue edizioni (sia in formato libro sia in formato audiolibro) e opzionalmente una lista di opere correlate (sequel, prequel, libri ambientati nello stesso universo, etc). +> Ogni libro avrà una sua pagina in cui sarà presente il titolo originale, gli autori, i generi, un breve riassunto della trama, l'elenco di tutte le sue edizioni (sia in formato libro sia in formato audiolibro) e [...]. > > Ciascuna edizione del libro avrà una seconda pagina con ulteriori informazioni, quali il suo titolo, la copertina, la casa editrice e il numero di pagine; ciascuna edizione sarà identificata da il relativo [codice ISBN](https://it.wikipedia.org/wiki/ISBN). > @@ -59,26 +67,43 @@ Lo schema dei Libri è stato realizzato seguendo in buona parte le specifiche; s ### Una ricorrenza nelle relazioni: il pattern "1NN0" - - -![](img/3-4-relazioni/inno-1.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_. +Osservando lo schema, si nota che le relazioni "narrata da" e "scritto da" sono molto simili tra loro: tutte e due 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_. + +Definiamo questa struttura _1NN0_, in quanto essa ricorrerà frequentemente in tutto lo schema. + + 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. +Dato che si è voluto rendere possibili query come "quali libri ha scritto questo autore" o "quali libri ha narrato questo narratore" e che inserire nel database autori o narratori 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). +### I generi + +![](img/3-4-relazioni/generi-libri.png) + +Notiamo che la relazione che associa un libro a un genere è molto simile alla struttura _1NN0_, ma con una associazione **0 a N** anche dal lato dell'entità Genere. + +Questo perchè si intende aggiungere alcuni generi predefiniti al database (come Fantasy, Giallo o Western) tra cui gli utenti possano scegliere prima ancora che esistano dei libri. + ### 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. +### Libri correlati + +> [...] e opzionalmente una lista di opere correlate (sequel, prequel, libri ambientati nello stesso universo, etc) + +![](img/3-4-relazioni/autoassoc-libri.png) + +Come menzionato [in precedenza](3-3-autoassociazioni.md), l'entità Libro è dotata di una autoassociazione che permette di identificare gli elementi correlati ad essa. + ## Film > Ogni film avrà una sua pagina in cui sarà presente il titolo originale, i titoli nelle varie lingue (identificati dal [codice ISO 639 della lingua](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)), una sinossi della trama, la durata, la casa produttrice, il cast, e, come per i libri, una lista opzionale di pellicole correlate. @@ -87,12 +112,11 @@ Tutti i codici ISBN contengono al loro interno [un codice univoco che identifica ![](img/3-4-relazioni/film.png) -### Il pattern 1NN0 nei film +### Il pattern _1NN0_ nei film -![](img/3-4-relazioni/inno-4.png) -![](img/3-4-relazioni/inno-5.png) +![](img/3-4-relazioni/inno-3.png) -Nello schema dei film, si possono notare altre due applicazioni del pattern _1NN0_ menzionato in precedenza: "prodotto da" e "appartiene a". +Nello schema dei film, si può notare un'altra applicazione del pattern _1NN0_ menzionato in precedenza: "prodotto da". ### Vi ha preso parte: una relazione 1NN0 ternaria @@ -103,6 +127,18 @@ Essa associa una persona a un film, specificando il ruolo ("attore", "regista", È 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". +### Generi + +![](img/3-4-relazioni/generi-film.png) + +Come per i libri, la relazione "appartiene a" è un _1NN0_ con una associazione **0 a N** dal lato del Genere. + +### Film correlati + +![](img/3-4-relazioni/autoassoc-film.png) + +Come i Libri, anche i Film hanno un'autoassociazione per determinare i film correlati. + ### Localizzazione: una entità debole ![](img/3-4-relazioni/entita-debole.png) @@ -112,12 +148,36 @@ Simile al pattern _1NN0_, ma fondamentalmente diversa è la relazione "in altre 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 +## Giochi > 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. > > Per ogni piattaforma sarà disponibile una sottopagina, che conterrà la [box art](https://vgboxart.com/) di quella versione, il nome dello studio che ha effettuato il [porting](https://en.wikipedia.org/wiki/Porting#Porting_of_video_games) ed eventualmente il titolo [se diverso da quello principale](https://it.wikipedia.org/wiki/Payday_2#Crimewave_Edition). - - ![](img/3-4-relazioni/giochi.png) + +### Giochi e Edizioni + +![](img/3-4-relazioni/giochi-e-edizioni.png) + +Quelle che [nella descrizione](/1-descrizione.md) vengono chiamate _sottopagine_ sono state realizzate nello schema attraverso l'entità Edizione: una Edizione rappresenta una versione di un gioco pubblicata su una piattaforma specifica. + +Come per i libri, gli Elementi riferiti a un gioco verranno istanziati relativamente a una specifica Edizione di un gioco. + +### Il pattern 1NN0 nei Giochi + +![](img/3-4-relazioni/inno-4.png) + +Il pattern _1NN0_ ricorre anche all'interno dello schema dei Giochi: si possono notare infatti le relazioni "sviluppato da", "pubblicato da" e "portato da", che collegano uno o più Studios a uno o più Giochi (o loro Edizioni). + +### Generi + +![](img/3-4-relazioni/generi-giochi.png) + +Come per Libri e Film, anche i Giochi hanno una relazione "appartiene a" che li collega a uno o più Generi. + +### Giochi correlati + +![](img/3-4-relazioni/autoassoc-giochi.png) + +Come Libri e Film, anche i Giochi hanno un'autoassociazione per determinare i giochi correlati. diff --git a/img/3-4-relazioni/autoassoc-film.png b/img/3-4-relazioni/autoassoc-film.png new file mode 100644 index 0000000..232a202 Binary files /dev/null and b/img/3-4-relazioni/autoassoc-film.png differ diff --git a/img/3-4-relazioni/autoassoc-giochi.png b/img/3-4-relazioni/autoassoc-giochi.png new file mode 100644 index 0000000..ad8bf6b Binary files /dev/null and b/img/3-4-relazioni/autoassoc-giochi.png differ diff --git a/img/3-4-relazioni/autoassoc-libri.png b/img/3-4-relazioni/autoassoc-libri.png new file mode 100644 index 0000000..ff95596 Binary files /dev/null and b/img/3-4-relazioni/autoassoc-libri.png differ diff --git a/img/3-4-relazioni/generi-film.png b/img/3-4-relazioni/generi-film.png new file mode 100644 index 0000000..c5a044b Binary files /dev/null and b/img/3-4-relazioni/generi-film.png differ diff --git a/img/3-4-relazioni/generi-giochi.png b/img/3-4-relazioni/generi-giochi.png new file mode 100644 index 0000000..7f296c1 Binary files /dev/null and b/img/3-4-relazioni/generi-giochi.png differ diff --git a/img/3-4-relazioni/generi-libri.png b/img/3-4-relazioni/generi-libri.png new file mode 100644 index 0000000..c15dd43 Binary files /dev/null and b/img/3-4-relazioni/generi-libri.png differ diff --git a/img/3-4-relazioni/giochi-e-edizioni.png b/img/3-4-relazioni/giochi-e-edizioni.png new file mode 100644 index 0000000..9f0d09b Binary files /dev/null and b/img/3-4-relazioni/giochi-e-edizioni.png differ diff --git a/img/3-4-relazioni/inno-2.png b/img/3-4-relazioni/inno-2.png index c15dd43..007fefb 100644 Binary files a/img/3-4-relazioni/inno-2.png 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 index 007fefb..6b9de4c 100644 Binary files a/img/3-4-relazioni/inno-3.png 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 index c5a044b..4b2fcdf 100644 Binary files a/img/3-4-relazioni/inno-4.png 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 deleted file mode 100644 index 6b9de4c..0000000 Binary files a/img/3-4-relazioni/inno-5.png and /dev/null differ diff --git a/img/3-4-relazioni/legenda.png b/img/3-4-relazioni/legenda.png new file mode 100644 index 0000000..3b55bb6 Binary files /dev/null and b/img/3-4-relazioni/legenda.png differ diff --git a/img/3-4-relazioni/recensioni.png b/img/3-4-relazioni/recensioni.png new file mode 100644 index 0000000..34e66f1 Binary files /dev/null and b/img/3-4-relazioni/recensioni.png differ