1
Fork 0
mirror of https://github.com/Steffo99/alexandria.git synced 2024-10-16 05:27:27 +00:00

Aggiorna più file

This commit is contained in:
Steffo 2020-06-03 16:18:27 +02:00
parent f3dd2bc17c
commit 0453450021
Signed by: steffo
GPG key ID: 896A80F55F7C97F0
4 changed files with 54 additions and 6 deletions

View file

@ -8,8 +8,6 @@ Per farlo, ci si è basati sui contenuti della [descrizione](1-descrizione.md) e
## Legenda
<!--TODO: Forse dovremmo rifarla scrivendo Identificatore invece che Chiave primaria?-->
![](img/3-4-relazioni/legenda.png)
## `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.
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`
@ -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`.
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`
@ -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`.
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.

View file

@ -1,6 +1,15 @@
# 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
@ -28,3 +37,19 @@ SELECT 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 |
## 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
View 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
View 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;