smartlab - diten - università di genova  · rdbms ma molto giovane e ricco di bug 22. mysql -...

34
SmartLab - DITEN - Università di Genova http://smartlab.ws Introduzione ai principali DataBase Management Systems Dr. Alessandro Ghio [email protected] 1

Upload: phungthuy

Post on 16-Feb-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

SmartLab - DITEN - Università di Genovahttp://smartlab.ws

Introduzione ai principali DataBase Management Systems

Dr. Alessandro Ghio

[email protected]

1

http://smartlab.ws

Obiettivi di questa seconda parte dell’insegnamento

• From theory to practice...• Progettare un DB è un’operazione particolarmente complessa• L’obiettivo nella pratica è progettare un sistema che funzioni

• Permetta un efficace accesso ai dati• Consenta di salvare tutta l’informazione necessaria (e anche di più)• ...

• Analizzeremo pertanto uno strumento per la gestione DB allo “stato dell’arte”• Vedremo come utilizzare i principali costrutti SQL per creare, manipolare ed estrarre

informazioni dal DB• Vi presenterò alcuni casi di studio “real world” per farvi toccare con mano alcune realtà che

basano la loro esistenza sulla collezione e lo sfruttamento delle informazioni contenute nei dati

2

http://smartlab.wsPremessa generale• Molte slide conterranno esercizi svolti

• Come vedremo nel corso delle esercitazioni, le soluzioni non saranno spesso univoche, ma ci saranno tante soluzioni possibili

• In molti casi, non esiste LA soluzione ottima, ma tante soluzioni possibili

• Entro certi limiti, chiaramente, ma basta che funzioni...

• Se trovate degli errori (e potrebbero essercene), non imbufalitevi ma segnalatemeli

3

http://smartlab.wsInformazioni• L’uomo da sempre cerca di collezionare informazioni, salvare

informazioni, scambiare informazioni, tramandare conoscenza e informazioni...

• Pensate che i server, Excel, e altri strumenti siano solo diavolerie moderne?

4

http://smartlab.wsInformazioni

Foglio Excel - XX secolo d.C.Lista dei doni offerti alla sacerdotessa

di Adab in occasione della sua elezione – Tavoletta sumera – XXVI secolo a.C.

5

http://smartlab.ws

Le informazioni possono essere collezionate in modo diverso

6

http://smartlab.ws

Le informazioni possono essere collezionate in modo diverso

7

http://smartlab.ws

Le informazioni possono essere collezionate in modo diverso

Codifica dell’informazione!

8

http://smartlab.wsDati e informazioni• Talvolta vengono confusi (e li confonderemo anche noi!)

• I dati sono simboli grezzi che devono essere interpretati e correlati per estrarre informazione

• Esempi di dati:

• Alessandro Ghio

• 3491609868

• Esempio di informazione:

• Ricercando sulla vostra lista contatti trovate il mio numero di cellulare associato al mio nome

9

http://smartlab.wsCaratteristiche dei dati• I dati sono molto stabili nel tempo

• ...generalmente sono molto più stabili dei processi che li gestiscono

• Esempio:

• I dati di una banca sono tipicamente stabili nel tempo (p.e. l’anagrafica)

• I processi di gestione variano spesso di anno in anno

• Gestire i dati è pertanto un’operazione difficile ma importante

10

http://smartlab.ws

DataBase (DB) e DataBase Management Service (DBMS)

• Definizione generale: una base di dati è una collezione di dati che rappresenta le informazioni di interesse per un sistema informativo

• In pratica: un DB è una collezione di dati grande, condivisa e persistente gestita da un DataBase Management Service (DBMS), in grado di assicurare al DB sicurezza (da intendersi qui nella doppia accezione di safety e security)• Necessità di gestire (e ridurre, possibilmente azzerare) ridondanza e inconsistenza• Necessità di implementare meccanismi di gestione di accessi multipli simultanei• Necessità di implementare funzioni di gestione, backup e ripristino di dati in ottica long-term• Necessità di realizzare strumenti di gestione accessi e privilegi

• Successo di un DBMS legato a due fattori:• Efficacia• Efficienza

11

http://smartlab.wsModello dei dati• Diversi modelli possibili...

• ...ma noi ci concentreremo solamente sul modello relazionale

• Relational DBMS (RDBMS)

• Basato sul costruttore di relazione

• Dati organizzati sulla base di schemi in tabelle, che definiscono le relazioni

• Creazione di record a struttura omogenea

12

http://smartlab.wsModello relazionale - Tabella

CodiceFiscale Cognome Nome

ABCDEF12A34B567C Rossi Mario

GHIJKL12A34B567C Verdi Bruno

MNOPQR12A34B567C Grigi Luigi

Tabella “Persone”

13

http://smartlab.wsModello relazionale - Tabella

CodiceFiscale Cognome Nome

ABCDEF12A34B567C Rossi Mario

GHIJKL12A34B567C Verdi Bruno

MNOPQR12A34B567C Grigi Luigi

Tabella “Persone”Schema

14

http://smartlab.wsModello relazionale - Tabella

CodiceFiscale Cognome Nome

ABCDEF12A34B567C Rossi Mario

GHIJKL12A34B567C Verdi Bruno

MNOPQR12A34B567C Grigi Luigi

Tabella “Persone”

Istanze

15

http://smartlab.wsI principali DBMS sul mercato• ORACLE DBMS

• IBM DB2

• Microsoft SQL Server

• Microsoft Access (nonostante i difetti...)

• MySQL

• SQLite

• PicoSQL

• Teradata

16

http://smartlab.wsMySQL• DB Open Source

• Attenzione che Open Source non implica per forza che il prodotto sia distribuito gratuitamente!

• Non a caso esistono diverse licenze commerciali per MySQL

• Noi sfrutteremo la licenza Community, che consente di scaricare ed utilizzare lo strumento in modo gratuito

17

http://smartlab.wsBreve digressione sull’Open Source• Ma se lo strumento è gratis, come fa l’azienda a guadagnare?

18

http://smartlab.wsBreve digressione sull’Open Source• Ma se lo strumento è gratis, come fa l’azienda a guadagnare?

Prodotto Servizio19

http://smartlab.wsMySQL• È un RDBMS composto da un client con interfaccia a riga di comando e un

server, entrambi disponibili sia per sistemi Unix (o Unix-like) sia per Windows

• Dal 1996 supporta la maggior parte della sintassi SQL e si prevede in futuro il pieno rispetto dello standard ANSI

• Possiede delle interfacce per diversi linguaggi, compreso un driver ODBC, due driver Java, un driver per Mono e .NET ed una libreria per Python

20

http://smartlab.wsMySQL• Azienda recentemente acquistata da ORACLE

• Uno dei migliori RDBMS disponibili sul mercato

• Affidabile

• Relativamente leggero

• Versione gratuita

• Open Source (ottimo anche per applicazioni in ambito security, dato che si ha massima controllabilità sul codice)

• Il motore di Wikipedia si basa su RDBMS MySQL

21

http://smartlab.wsMySQL• It’s not always rainbows and butterflies... (cit.)• MySQL non è mai stato realmente aperto ai contributi dei volontari esterni, i quali devono aspettare mesi

o anni (generalmente invano) nella speranza di poter vedere pubblicati i loro seppur minimi bug fix• Ora che MySQL è stata acquistata da Sun (a sua volta acquisita da Oracle) sembra che l'edizione

Community abbia sempre meno importanza, in favore di quella Enterprise• Attenzione si rifocalizza anche sul prodotto

• Dall'insofferenza di alcuni utenti, perfino di molti lavoratori di MySQL, verso questi problemi, nascono i fork di MySQL• Tra questi i principali sono:

• Drizzle: RDBMS leggerissimo (3 ordini di grandezza più leggero di MySQL) e basato sullo stesso motore Open Source. Tuttavia è consigliabile solo per professionisti (ogni funzionalità non standard deve essere installata sotto forma di plug-in e lanciata manualmente ogniqualvolta se ne necessiti

• MariaDB: chiamato così in onore della figlia del fondatore (non pensate male...), è un ottimo RDBMS ma molto giovane e ricco di bug

22

http://smartlab.wsMySQL - Andiamo al sodo...• Da dove si scarica?

• http://www.mysql.it/downloads/

• Quale versione scaricare?

• MySQL Community Server

• Su quali sistemi operativi posso installare MySQL?

• Windows (x86 e x64), Linux (molte versioni, sebbene non tutte), Mac OS X (x86 32 e 64 bit), più altri ancora

23

http://smartlab.wsMySQL - Andiamo al sodo...• Come si installa?

• Basta seguire i pochi passi della procedura guidata, scegliendo (se si desidera aggiungerla) la psw per amministratore

• Come si lancia?

• L’utilizzo è un po’ più semplice in Windows (a patto che si decida di lanciare il DBMS all’avvio del PC), meno banale in Linux e Mac OS

24

http://smartlab.wsMySQL - Andiamo al sodo...• Installazione su Windows

• Eseguiamo setup.exe, seguendo le istruzioni che vengono date sullo schermo;

• ad un certo punto ci verrà chiesto di configurare MySQL 5 server, lo facciamo scegliendo l'opzione Standard Configuration, e successivamente: selezionando l'opzione di default Install As Windows Service;

• deselezionare Launch the MySQL Server Automatically, se non vogliamo che il server sia attivato in modo automatico allo start-up del sistema (sconsigliato, in generale)

• selezionare Include Bin Directory in Windows PATH, in modo da avere accesso alla directory di MySQL dal prompt di comandi indipendentemente dalla directory in cui siamo;

• disabilitiamo, nel quadro successivo Modify Security Settings che vi farebbe introdurre una password per root (non è una buona norma ma vi semplifica la vita...)

• attendiamo (fiduciosi) il termine dell’esecuzione

25

http://smartlab.wsMySQL - Andiamo al sodo...• Installazione su Linux

• Per prima cosa, è importante vericare di soddisfare i pre-requisiti richiesti:

• glibc-2.2 o versione superiore

• Compilatore C/C++

• GNU gunzip

• GNU tar

• Eseguire i comandi a sinistra come super-user (sudo)

root@localhost#: groupadd mysql

root@localhost#: useradd -g mysql mysql

root@localhost#: cd /usr/local

root@localhost#: gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf-

root@localhost#: ln -s full-path-to-mysql-VERSION-OS mysql

root@localhost#: cd mysql

root@localhost#: scripts/mysql_install_db --user=mysql

root@localhost#: chown -R root .

root@localhost#: chown -R mysql data

root@localhost#: chgrp -R mysql .

26

http://smartlab.wsMySQL - Andiamo al sodo...• Installazione su Mac OS X

• È sufficiente installare il file incluso nel DMG scaricabile dal sito di MySQL

• Sono inoltre presenti alcune estensioni per facilitare l’avvio del DBMS e l’utilizzo di MySQL

• Le procedure di default di MySQL sono macchinose e difficili da usare

• 2 possibilità alternative:

• Definire degli alias

• Modificare le variabili di ambiente PATH dell’applicativo Terminal, per esempio come mostrato in http://www.gigoblog.com/2011/03/13/add-mysql-to-terminal-shell-in-mac-os-x/

27

http://smartlab.wsMySQL - Andiamo al sodo...• Attivazione del DBMS su Windows

• Attivazione necessaria solo se non avete scelto l’avvio automatico con Windows

• Da Command Prompt, digitare

• mysqld --user root

• Per accedere al DBMS:

• mysql -u root

• Per sospendere il DBMS:

• mysqladmin --user root shutdown

28

http://smartlab.wsMySQL - Andiamo al sodo...• Attivazione del DBMS su Linux

• Da Terminal, loggarsi come sudo e andare nella directory /usr/local/mysql/bin/, quindi digitare

• ./mysqld --user root

• Per accedere al DBMS, dalla stessa directory e loggati come super-user:

• ./mysql -u root

• Per sospendere il DBMS, nella stessa directory e loggati come super-user:

• ./mysqladmin --user root shutdown

29

http://smartlab.wsMySQL - Andiamo al sodo...• Attivazione del DBMS su Mac OS X

• Da Terminale, loggarsi come sudo

• Se non sono stati definiti i percorsi nel PATH, andare nella directory /usr/local/mysql/bin/

• Digitare

• mysqld_safe

• Dato che il server deve essere eseguito in background, digitare CTRL+Z (attenzione, CTRL e non CMD) e quindi “bg”

• Per accedere al DBMS, dalla stessa directory (a meno che non siano stati definiti i percorsi nel PATH):

• mysql -u root (non necessita esplicitamente di login come super-user)

• Per sospendere il DBMS, nella stessa directory (a meno che non siano stati definiti i percorsi nel PATH) e loggati come super-user:

• mysqladmin shutdown

30

http://smartlab.wsAlcuni comandi semplici di navigazione• Per visualizzare i database nel DBMS

• show databases;

• Per selezionare un DB

• use nome_db;

• Per visualizzare le tabelle di un DB

• show tables;

• Per visualizzare lo schema di una tabella di un DB

• desc nome_tabella;

• Per visualizzare le chiavi di una tabella

• show keys from nome_tabella;

31

http://smartlab.wsAlcuni comandi semplici di navigazione

Esempio di output:

32

http://smartlab.wsWhat’s next?• Nelle prossime slide inizieremo ad analizzare alcuni costrutti utili del linguaggio SQL

per creare, modificare, alterare tabelle e per iniziare a inserire dati in queste ultime

• Cosa darò per scontato: i fondamenti di progettazione di un DB; la nomenclatura

• Come verranno strutturate le esercitazioni: tipicamente, vedremo qualche slide introduttiva e quindi vi verranno assegnati dei compiti, da realizzare principalmente in laboratorio, che ci accompagneranno verso la creazione e l’interrogazione (anche attraverso query complesse) di un DB di esempio

• L’esame: l’idea consiste nell’assegnarvi un lavoro monografico, riguardante un problema da risolvere attraverso la progettazione e realizzazione di un DB e di alcune query interrogative al DB stesso

33

http://smartlab.wsUna nota finale...• Noi lavoreremo a linea di comando su un terminale o command prompt, che

dir vogliate

• MySQL possiede anche un tool grafico, particolarmente comodo per gestire i DB nel DBMS

• Sfortunatamente è poco didattico, in quanto vi aiuta in molte operazioni che dovreste imparare a portare a termine “a mano”, senza focalizzarvi su un singolo DBMS (cosicché vi possiate “riciclare” la conoscenza in seguito anche su altri DBMS, visto che SQL è un linguaggio standard)

34