mirror of
https://github.com/Steffo99/alexandria.git
synced 2024-11-23 14:14:19 +00:00
Aggiorna più file
This commit is contained in:
parent
f3dd2bc17c
commit
0453450021
4 changed files with 54 additions and 6 deletions
|
@ -8,8 +8,6 @@ Per farlo, ci si è basati sui contenuti della [descrizione](1-descrizione.md) e
|
||||||
|
|
||||||
## Legenda
|
## Legenda
|
||||||
|
|
||||||
<!--TODO: Forse dovremmo rifarla scrivendo Identificatore invece che Chiave primaria?-->
|
|
||||||
|
|
||||||
![](img/3-4-relazioni/legenda.png)
|
![](img/3-4-relazioni/legenda.png)
|
||||||
|
|
||||||
## `Utenti`
|
## `Utenti`
|
||||||
|
@ -89,7 +87,7 @@ Questa particolare struttura compare in molte parti dello schema relazionale: pe
|
||||||
|
|
||||||
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 invece di usare una cardinalità **1 a N** dall'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 invece di usare una cardinalità **1 a N** dall'altro lato della relazione.
|
||||||
|
|
||||||
Infine, per l'entità connessa al lato _1 a N_ della relazione, si è deciso di usare un **ID interno** come identificatore, in modo da permettere la modifica del _Nome_ associato senza dover andare a modificare tutte le opere.
|
Infine, per l'entità connessa al lato _1 a N_ della relazione, si è deciso di usare un **identificatore surrogato**, in modo da permettere la modifica del _Nome_ associato senza dover andare a modificare tutte le opere.
|
||||||
|
|
||||||
### `Generi`
|
### `Generi`
|
||||||
|
|
||||||
|
@ -97,7 +95,7 @@ Infine, per l'entità connessa al lato _1 a N_ della relazione, si è deciso di
|
||||||
|
|
||||||
Notiamo che la relazione che associa un `Libro` a un `Genere` è molto simile alla struttura _1NN0_, ma essa ha una cardinalità **0 a N** anche dal lato dell'entità `Genere`.
|
Notiamo che la relazione che associa un `Libro` a un `Genere` è molto simile alla struttura _1NN0_, ma essa ha una cardinalità **0 a N** anche dal lato dell'entità `Genere`.
|
||||||
|
|
||||||
Questo perchè si intende aggiungere alcuni `Generi` al database tra cui gli utenti potranno scegliere prima ancora che esistano dei libri.
|
Questo perchè si intende aggiungere alcuni `Generi` al database tra cui gli utenti potranno scegliere prima ancora che esistano dei libri.
|
||||||
|
|
||||||
### `Editori`
|
### `Editori`
|
||||||
|
|
||||||
|
@ -155,7 +153,7 @@ Come i `Libri`, anche i `Film` hanno un'autoassociazione per determinare le pell
|
||||||
Simile al pattern _1NN0_, ma fondamentalmente diversa è la relazione `in altre lingue`: essa ha cardinalità _0 a N_ dal lato dei `Film`, e _1 a 1_ dal lato dell'entità `Localizzazione`; in più, l'associazione è identificatore esterno di `Localizzazione`.
|
Simile al pattern _1NN0_, ma fondamentalmente diversa è la relazione `in altre lingue`: essa ha cardinalità _0 a N_ dal lato dei `Film`, e _1 a 1_ dal lato dell'entità `Localizzazione`; in più, l'associazione è identificatore esterno di `Localizzazione`.
|
||||||
|
|
||||||
L'entità `Localizzazione` rappresenta il **titolo** di un `Film` tradotto in una lingua: ad esempio, _Il Padrino_ è una localizzazione in "`it`" (italiano) del `Film` _The Godfather_.
|
L'entità `Localizzazione` rappresenta il **titolo** di un `Film` tradotto in una lingua: ad esempio, _Il Padrino_ è una localizzazione in "`it`" (italiano) del `Film` _The Godfather_.
|
||||||
La sua chiave è composta dal codice ISO della lingua a cui si riferisce e dall'identificatore del `Film` a cui essa si riferisce: è dunque una **entità debole**.
|
Il suo identificatore è composto dal codice ISO della lingua a cui si riferisce e dall'identificatore del `Film` a cui essa si riferisce: è dunque una **entità debole**.
|
||||||
|
|
||||||
> Nei `Libri` e nei `Giochi` non è stato necessario creare questa entità perchè nei `Libri` lingue diverse hanno codici ISBN diversi (e quindi è possibile inserire i titoli localizzati all'interno dell'entità `Edizione`), e per i `Giochi` è molto raro avere titoli tradotti.
|
> Nei `Libri` e nei `Giochi` non è stato necessario creare questa entità perchè nei `Libri` lingue diverse hanno codici ISBN diversi (e quindi è possibile inserire i titoli localizzati all'interno dell'entità `Edizione`), e per i `Giochi` è molto raro avere titoli tradotti.
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,15 @@
|
||||||
# Tecnologia database
|
# Tecnologia database
|
||||||
|
|
||||||
Si è scelto di utilizzare **PostgreSQL** come DBMS in quanto è quello con il quale i membri del gruppo erano più famigliari.
|
## Database Management System
|
||||||
|
|
||||||
|
Si è scelto di utilizzare **PostgreSQL** (_Postgres_) come DBMS in quanto è quello con il quale i membri del gruppo erano più famigliari.
|
||||||
|
|
||||||
|
## Strumenti aggiuntivi
|
||||||
|
|
||||||
|
Per assistere nella progettazione fisica, sono stati usati due strumenti per la manipolazione di database Postgres:
|
||||||
|
|
||||||
|
- [pgAdmin 4](https://www.pgadmin.org/)
|
||||||
|
- Il plugin [Database Tools and SQL](https://plugins.jetbrains.com/plugin/10925-database-tools-and-sql) per IDE basati su IntelliJ
|
||||||
|
|
||||||
## Hosting
|
## Hosting
|
||||||
|
|
||||||
|
@ -28,3 +37,19 @@ SELECT version();
|
||||||
| version |
|
| version |
|
||||||
|---------|
|
|---------|
|
||||||
| PostgreSQL 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit |
|
| PostgreSQL 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit |
|
||||||
|
|
||||||
|
## Riproduzione del database
|
||||||
|
|
||||||
|
È allegato alla relazione il file [`5-database.sql`](5-database.sql), contenente tutte le istruzioni necessarie per ricreare il database descritto in questo capitolo.
|
||||||
|
|
||||||
|
Esso è stato ottenuto tramite [`pg_dump`](https://www.postgresql.org/docs/9.3/app-pgdump.html), un'utilità per l'archiviazione di database Postgres, eseguito con il seguente comando Bash:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pg_dump --dbname="alexandria" --schema="public" --file="5-database.sql"
|
||||||
|
```
|
||||||
|
|
||||||
|
È possibile ricreare il database eseguendo manualmente tutte le istruzioni contenute nel file `.sql`, oppure eseguendo [`pg_restore`](https://www.postgresql.org/docs/9.3/app-pgrestore.html), la controparte di `pg_dump` per il ripristino, con il seguente comando Bash:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pg_restore --dbname="alexandria" --schema="public" --file="5-database.sql"
|
||||||
|
```
|
||||||
|
|
13
5-2-creazione-database.md
Normal file
13
5-2-creazione-database.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# Creazione database
|
||||||
|
|
||||||
|
Come primo passo della progettazione fisica si è creato un nuovo database su PostgreSQL attraverso il seguente comando [Bash](https://it.wikipedia.org/wiki/Bash):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
createdb alexandria
|
||||||
|
```
|
||||||
|
|
||||||
|
Esso è equivalente alla seguente istruzione SQL:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CREATE DATABASE alexandria;
|
||||||
|
```
|
12
5-3-creazione-tabelle.md
Normal file
12
5-3-creazione-tabelle.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Creazione tabelle
|
||||||
|
|
||||||
|
Dopo aver creato il database, il secondo passo della progettazione fisica è stato quello di convertire lo schema logico in un database Postgres.
|
||||||
|
|
||||||
|
In generale:
|
||||||
|
|
||||||
|
- Le **entità** sono diventate _TABLES_;
|
||||||
|
- Gli **attributi** sono diventati _COLUMNS_;
|
||||||
|
- Le **chiavi primarie** sono state implementate come _PRIMARY KEYS_;
|
||||||
|
- Le **chiavi esterne** sono state implementate come _FOREIGN KEYS_;
|
||||||
|
- Le **chiavi surrogate** sono state implementate come _PRIMARY KEYS_ autoincrementate tramite _SEQUENCES_;
|
||||||
|
- I **dati derivati** sono stati implementati come _COLUMNS_ aventi dei _TRIGGER_ che le aggiornassero;
|
Loading…
Reference in a new issue