Home > master > I database: progettarli ed usarli

I database: progettarli ed usarli

7 giugno 2015

Progettare database

  • Introduzione
  • Tecniche di progettazione
  • software applicativi, linguaggio SQL/DML

Definzione

  • dato: ciò che è presente prima della elaborazione
  • informazione: dato che consente di avere conoscenza di fatti
  • database: insieme organizzato di tutte le informazioni presenti in un luogo
  • indipendenza dei dati: le modifiche dei dati non devono richiedere modifica ai programmi
  • il modello di dati: indica il tipo di organizzzione dei dati che si è definito al fine di rappresentare la struttura
  • il modello logico: è il tipo di accesso a queste informazioni ad opera dei programmi applicati, senza che toccano o vedano l’organizzazione fisica


Il modello dei dati è l’insieme di concetti utilizzati per organizzare i dati e descriverne la struttura.
Il modello dei dati (Ullman) è un formalismo matematico composto da:

  • una notazione: per descrivere i dati
  • delle operazioni: per manipolare i dati

Modelli:

  • gerarchico: storicamente il primo che organizza i dati in base ad una struttura ad albero. Lo svantaggio principale consiste nel fatto che per acceedere alla foglia devo passare per tutti i rami, riducendo la prestazioni.
  • reticolare: è un tentativo di estendere il modello gerarchico per puntare direttamente dai livelli alti ai livelli bassi
  • relazionale: i modelli precedenti uniscono dati(record) e relazioni(puntatori) mentre in questo modello (Codd 1970) questi sono separati.

Il database viene visto da 2 punti di vista:

  • progettista: colui che lo progetta e realizza il “flusso di progetto”
  • utilizzatore: colui che interagisce con il database ed estrae i dati

Il flusso di progetto indica la metodologia per la progettazione e lo sviluppo di un progetto.Tali fasi sono composte da:

  • raccolta e analisi dei requisiti: definire le funzionalità richieste dal cliente
  • progettazione: progettare lo schema del database da realizzare
  • implementazione: creazione del database
  • validazione e controllo: test e controlli ai fini del colloudo

La progettazione del database può essere diviso in 3 fasi:

  • progettazione concettuale: definizione degli oggetti coinvolti
  • progettazione logica: realizzare lo schema E/R con un modello relazionale
  • progettazione fisica: realizzazione delle DDL/DML/SQL necessarie

La progettazione concettuale
Prevede la definzione della struttura, delle caratteristiche e del contenuto del database facendo uso di metodologie e modelli

Ogni progettista dovrebbe porsi queste domande:

  1. quali sono gli oggetti interessati ?
  2. come sono collegati tra di loro?
  3. quanti oggetto sono collegati nella relazione?
  4. qual’è l’identificatore degli oggetti?
  5. quali informazioni riportano?

Possibili risposte:

  1. Identificare gli oggetti che rappresentano i dati. Nel caso della biblioteca parliamo di libri, autori, argomenti
  2. Identificare le relazioni che legano gli oggetti. Per esempio i libri sono scritti da autori ed appartengono ad argomenti
  3. Identificare la cardinalità, ossia il numero min e max che ogni elemento di un oggetto può essere collegato con un elemento di un altro oggetto. Per esempio un libro è collegato con 1 o più autori
  4. Identificare l’oggetti tramite una chiave univoca. Per esempio scegliere l’identificatore interno unico del libro, per esempio il codice di inventario
  5. identificare gli attributi del libro per indicare i dati anche non univoci che caratterizzano l’oggetto. Per esempio editore, agine, anno, titolo ecc.

Disegno logico
Il modello entita-relazione è un modello concettuale di dati che fornisce dei costrutti, ossia strumenti e strutture, per definire schemi che descrivono l’organizzazione e la struttura dei dati di interesse.

  • Le entità rappresentano classi di oggetti, indicate con un rettangolo, ogni occorrenza viene detta istanza. Per esempio l’entità città ha come istanza roma, milano ecc. Alcune entità sono statiche perché cambiano raramente, per esempio le regioni italiane, mentre altre sono dinamiche perché cambiano continuamente, per esempio le prenotazioni mediche.
  • Le relazioni rappresentano il legame tra le entità, indicate con un rombo dai cui vertici partono le linee delle relazioni. Le istanze di una relazione sono una ennupla
  • La cardinalità indica il numero min e max nella relazione tra due entità. Indica quante volte una istanza è legata ad un’altra.
  • Gli attributi rappresentano dei campi informativi e non identificativi di una entità o relazione che sono di interesse per una applicazione. Il dominio di un attributo indica i valori che questo potrà assumere. Per esempio per un impiegato l’attributo età ha un dominio 18-65 anni.
  • La chiave consente di identificare univocamente una istanza di una entità. Può essere composto da uno o più attributi. Tali chiavi sono utilizzate dalle relazioni al fine di collegare due entità
  • la generalizzazione indica una entità con caratteristiche comuni che vengono ereditate da altre entità figlie.

Schema ben fatto

  • correttezza: se utilizza correttamente i costrutti e non fa confusione tra di loro
  • completezza: se riesce a raffigurare la realtà che vogliamo raffigurare
  • leggibilità: lo schema deve essere comprensibile
  • animalità: i dati non devono essere ridondanti

Passaggio a schema fisico
Dallo schema concettuale allo schema fisico occorre effettuare alcune operazioni preliminari, quali:

  • trasformazione delle generalizzazioni: le generalizzazioni non possono essere rappresentate fisicamente pertanto devono essere trasformate, in questi 3 modi:
  • accorpamento dei figli nei padri: portando con se tutte le loro relazioni e attributi
  • accorpamento dei padri nei figli: portando attributi e relazioni e replicando i padri in tutti i figli
  • sostituzioni delle generalizzazioni con le relazioni: legare i padri con i figli tramite delle relazioni.
  • eliminazione di alcune relazioni: per esempio 1-1 e 1-n

Verifiche su schema fisico
Lo schema fisico deve subire delle verifiche:

  • non ridondanza: i dati non devono essere ripetuti. A meno che non ci siano delle buone ragioni in termini di prestazioni e non sono state trovate alternative valide.
  • congruenza: l’aggiornamento di un dato deve aggiornare tutti i dati che sono collegati in base ai vincoli di integrita. Per esempio se cancello un dato padre cancello anche i dati figli
  • sicurezza: il database deve gestire operazioni concorrenti
  • integrità: il database deve garantire i vincoli di integrità:
  • di appartenenza: un impiegato appartiene ad almeno un ufficio
  • di dominio: l’età deve essere compresa tra 18-65 anni
  • referenziali: tra chiavi di entità diverse

Processo di normalizzazione forza a chiarire le dipendenze funzionali
Le forme normali sono dei criteri piuttosto teorici che aiutano a costruire un DB corretto. La dipendenza funzionale indica una relazione di dipendenza. Pertanto se Y e Z sono legati da una relazione R, allora la dipendenza funzionale di Z verso Y indica che gli attributi di Z dipendono da Y.

Per esempio Y=dipendente Z=stipendio allora lo stipendio dipende dal dipendente, ossia per dipendente diverso ci sarà uno stipendio diverso

DBMS
Un Database Management System è un sistema di gestione il cui obiettivo generale è di mantenere le informazioni e renderle disponibili su richiesta (J.Date)
Un DBMS deve garantire:

  • condivisione dei dati: deve garantire a utenti diversi di accedere ai dati con un diverso livello di visibilità
  • persistenza: i dati devono perdurare anche in un tempo successivo al loro utilizzo
  • affidabilità: l’organizzazione ed i dati devono essere ricostruiti se succede un malfunzionamento
  • privatezza: l’accesso deve essere consentito solo ad utenti autorizzati
  • efficienza: tutte le operazioni devono essere eseguiti in tempi e spazi accettabili
  • efficacia: il dbms deve eseguire quello che gli è stato richiesto

MySql
Utilizzeremo come DBMS Mysql e come linguaggio SQL (structured query language).

Mysql è un dbms gratuito, sviluppato da informatici svedesi. Si basa su routine ISAM, è scritto in C e C++. E’ richiamabile da diversi linguaggi di programmazione c c++ eiffel java perl php pyton. Fornisce 3 linguaggi: DDL per la definizione, DML per la modifica e SQL per l’interrogazione

Comandi di partenza:
show database; –per mostrare i database disponibili
use database <nome>; –utilizza il database indicato
exit; –esce
create database <nomedb>; –crea il db
drop database <nomedb>; –cancella il db
show tables; –lista le tabelle del db
show columns from <tabella>; –mostra le colonne e le loro proprietà

Tipi di dati
I dati sono: numeri, caratteri e date

Tipi di dati numerici interi:

  • tinyint: 8 bit con segno
  • smallint: 16 bit con segno
  • int: 32 bit con segno

Se non si usa il segno, il range disponibile aumenta

Tipi di dati numerici con virgola:

  • float(m,d): m numero intero, d decimale
  • double(m,d): più ampio

Tipi di dati caratteri:

  • char(x): max 255 caratteri
  • varchar(x): max 255 caratteri variabili
  • text: max 16 bit
  • blob: file o immagini anche di ampie dimensioni

Tipi di dati date:

  • datetime: data e ora
  • date: data
  • time: ora
  • year: anno
  • timestamp: data variabile

Tabelle
Di seguito le istruzioni principali per gestire la vita di una tabella

  • create table <nomeTabella>( <nome attributo> tipodato opzioni,…) opzioni; –creazione tabella
  • create table <nomeTabella> if not exist <nome tabella>( …) –crea tabella se non esiste
  • alter table <nome tabella>  add( <nome attributo> tipodato opzioni,); –modifica tabella
  • alter table <nome tabella>  rename <altro nome>; –rinomina tabella
  • drop <nome tabella>; –cancella tabella

Indici
Gli indici servono per velocizzare la ricerca di campi che vengono utilizzati per fare ricerce e non sono chiavi

  • create index <nome indice> on <nome tabella>(<nome colonna>); –crea indice
  • drop index <nome indice> on <nome tabella>; –cancella indice

DML
Data manipulation language sono le istruzioni utilizzate per inserire, modificare e cancellare i dati nel database:

  • insert into <nome tabella> (<nome attributo>, <nome attributo>,..) value(<nome valore>, <nome valore>, ..); –inserire nuovi record.I valori che non si vogliono inserire o non vengono dichiarati oppure vengono dichiarati NULL.
  • load data infile <nome file> into <nome tabella> (<nome attributo>, <nome attributo>,…); — carica dei valori presenti nel file nella tabella
  • update <nome tabella> set <nome attributo>=<valore> where <condizioni>; –i valori possono essere modificati all’occorrenza
  • delete from <nome tabella> where <condizioni>; –cancella i record che rispettono la condizione, se la condizione viene omessa allora verranno cancellati tutti

SQL
SQL e’ un linguaggio dichiarativo in quanto esprime il risultato più che la procedura per ottenerlo

  • select <nome attributi> from <nome tabella> where <condizioni>; –estrarre da una tabella dei valori in base a delle condizioni
  • distinct –consente di non visualizzare valori ripetuti
  • alias –consente di sostituire il nome della colonna in visualizzazione

Operatori per la clausola WHERE:

  • =, !=, <>,>,>=, <, <=
  • between…and …
  • in
  • like
  • is NULL
  • NOT, AND, OR

Funzioni per la clausola SELECT:

  • AVG, COUNT, MAX, MIN, SUM
  • +, -, *, /, ABS, ROUND, TRUNC
  • ORDER BY… GROUP BY… HAVING

Select nidificate o annidate
Vengono create delle select che estraggono un valore da usare in un altra select
select colonna1 from tabella where colonna2 = (select colonna2 from tabella where colonna1 = ‘valore’)
Ma tale query non è molto performante pertanto è preferibile sostituirla con l’uso di alias
select colonna1 from tabella t1, tabella t2 where t1.colonna2 = t2.colonna2 and t2.colonna1 = ‘valore’

Algebra con SELECT
E’ possibile usare alcuni comandi per aggregare i valori estratti

  • UNION, INTERSECT, MINUS

Viste o Tabelle virtuali
E’ possibile creare viste che consentono di ottenere diversi vantaggi

  • non occupano memoria
  • sicurezza, si possono non far vedere delle colonne
  • convenienza: si espongono query semplici ed ottimizzate

create view <nome vista> as select <nome attributo> from <nome tabella> where <condizione>; — creazione di vista

Sicurezza
E’ possibile definire tramite le GRANT i diritti per ogni singolo utente sugli oggetti del database

  • grant <tipo privilegio> on <nome tabella> to <utente>; –aggiunge un privilegio all’utente
  • revoke <tipo privilegio> on <nome tabella> from <utente>;–rimuove un privilegio all’utente
Categorie:master
%d blogger cliccano Mi Piace per questo: